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?
On Tue, 01 Dec 2020 14:18:53 +0100, Thomas Monjalon wrote: > 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? 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.
01/12/2020 14:52, Dmitry Kozlyuk:
> On Tue, 01 Dec 2020 14:18:53 +0100, Thomas Monjalon wrote:
> > 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?
>
> 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
On Tue, 01 Dec 2020 15:05:33 +0100, Thomas Monjalon wrote:
> 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.