Skip to contentSkip to conversation

build failure with MinGW GCC 10.2

dpdk-dev Thomas Monjalon 2 participants 4 messages Dec 1, 2020

lore
Share & tools
lore
#0 lore raw

Hi,

I'm hitting an issue with x86_64-w64-mingw32-gcc (GCC) 10.2.0:

	lib/librte_eal/windows/eal_memory.c:30:14: error:
	redeclaration of ‘enum MEM_EXTENDED_PARAMETER_TYPE’

and others:
redeclaration of enumerator ‘MemExtendedParameterInvalidType’ redeclaration of enumerator ‘MemExtendedParameterAddressRequirements’ redeclaration of enumerator ‘MemExtendedParameterNumaNode’ redeclaration of enumerator ‘MemExtendedParameterPartitionHandle’ redeclaration of enumerator ‘MemExtendedParameterUserPhysicalHandle’ redeclaration of enumerator ‘MemExtendedParameterAttributeFlags’ redeclaration of enumerator ‘MemExtendedParameterMax’ redefinition of ‘struct MEM_EXTENDED_PARAMETER’ "MEM_EXTENDED_PARAMETER_TYPE_BITS" redefined

I see in the code it should be avoided:

/* MinGW-w64 headers lack VirtualAlloc2() in some distributions.
* Provide a copy of definitions and code to load it dynamically.
* Note: definitions are copied verbatim from Microsoft documentation
* and don't follow DPDK code style.
*
* MEM_RESERVE_PLACEHOLDER being defined means VirtualAlloc2() is present too. */
#ifndef MEM_PRESERVE_PLACEHOLDER

Does it mean using this flag is not true anymore in recent MinGW?

#1 lore raw
Quoted 27 lines · Thomas Monjalon

Hi,

I'm hitting an issue with x86_64-w64-mingw32-gcc (GCC) 10.2.0:

	lib/librte_eal/windows/eal_memory.c:30:14: error:
	redeclaration of ‘enum MEM_EXTENDED_PARAMETER_TYPE’

and others:
redeclaration of enumerator ‘MemExtendedParameterInvalidType’ redeclaration of enumerator ‘MemExtendedParameterAddressRequirements’ redeclaration of enumerator ‘MemExtendedParameterNumaNode’ redeclaration of enumerator ‘MemExtendedParameterPartitionHandle’ redeclaration of enumerator ‘MemExtendedParameterUserPhysicalHandle’ redeclaration of enumerator ‘MemExtendedParameterAttributeFlags’ redeclaration of enumerator ‘MemExtendedParameterMax’ redefinition of ‘struct MEM_EXTENDED_PARAMETER’ "MEM_EXTENDED_PARAMETER_TYPE_BITS" redefined

I see in the code it should be avoided:

/* MinGW-w64 headers lack VirtualAlloc2() in some distributions.
* Provide a copy of definitions and code to load it dynamically.
* Note: definitions are copied verbatim from Microsoft documentation
* and don't follow DPDK code style.
*
* MEM_RESERVE_PLACEHOLDER being defined means VirtualAlloc2() is present too. */
#ifndef MEM_PRESERVE_PLACEHOLDER

Quoted 1 line

Does it mean using this flag is not true anymore in recent MinGW?

I think the #ifndef test is incorrect, maybe MEM_PRESERVE_PLACEHOLDER is not a macro in MinGW headers as it is in Windows SDK.

What's your environment?

I can't reproduce this with the latest MinGW-w64 8.0.0 for Windows from
https://sourceforge.net/projects/mingw-w64/files/, x86_64-win32-seh flavour (GCC 8.1.0), and neither with MinGW-w64 6.0.0 (9.3.0) on NixOS.

#2 lore raw

01/12/2020 14:52, Dmitry Kozlyuk:

Quoted 30 lines · Thomas Monjalon
Quoted 27 lines

Hi,

I'm hitting an issue with x86_64-w64-mingw32-gcc (GCC) 10.2.0:

	lib/librte_eal/windows/eal_memory.c:30:14: error:
	redeclaration of ‘enum MEM_EXTENDED_PARAMETER_TYPE’

and others:
redeclaration of enumerator ‘MemExtendedParameterInvalidType’ redeclaration of enumerator ‘MemExtendedParameterAddressRequirements’ redeclaration of enumerator ‘MemExtendedParameterNumaNode’ redeclaration of enumerator ‘MemExtendedParameterPartitionHandle’ redeclaration of enumerator ‘MemExtendedParameterUserPhysicalHandle’ redeclaration of enumerator ‘MemExtendedParameterAttributeFlags’ redeclaration of enumerator ‘MemExtendedParameterMax’ redefinition of ‘struct MEM_EXTENDED_PARAMETER’ "MEM_EXTENDED_PARAMETER_TYPE_BITS" redefined

I see in the code it should be avoided:

/* MinGW-w64 headers lack VirtualAlloc2() in some distributions.
* Provide a copy of definitions and code to load it dynamically.
* Note: definitions are copied verbatim from Microsoft documentation
* and don't follow DPDK code style.
*
* MEM_RESERVE_PLACEHOLDER being defined means VirtualAlloc2() is present too. */
#ifndef MEM_PRESERVE_PLACEHOLDER

Quoted 1 line

Does it mean using this flag is not true anymore in recent MinGW?

Quoted 8 lines

I think the #ifndef test is incorrect, maybe MEM_PRESERVE_PLACEHOLDER is not a macro in MinGW headers as it is in Windows SDK.

What's your environment?

I can't reproduce this with the latest MinGW-w64 8.0.0 for Windows from
https://sourceforge.net/projects/mingw-w64/files/, x86_64-win32-seh flavour (GCC 8.1.0), and neither with MinGW-w64 6.0.0 (9.3.0) on NixOS.

I am using ArchLinux:

	mingw-w64-gcc 10.2.0-2
	mingw-w64-headers 8.0.0-1
	mingw-w64-crt 8.0.0-1
#3 lore raw
Quoted 4 lines · Thomas Monjalon

I am using ArchLinux:

	mingw-w64-gcc 10.2.0-2
	mingw-w64-headers 8.0.0-1
	mingw-w64-crt 8.0.0-1

Reproduced, working on the patch, thanks.