[dpdk-dev] [PATCH 3/3 v2] librte_eal/common: Fix redeclaration of enumerator ‘REG_EAX’

Thomas Monjalon thomas.monjalon at 6wind.com
Thu Mar 5 19:24:35 CET 2015


2015-03-05 16:31, Qiu, Michael:
> On 2015/3/5 22:39, Thomas Monjalon wrote:
> > 2015-03-05 14:03, Qiu, Michael:
> >> On 3/5/2015 9:54 PM, David Marchand wrote:
> >>> On Thu, Mar 5, 2015 at 2:50 PM, Michael Qiu <michael.qiu at intel.com
> >>> <mailto:michael.qiu at intel.com>> wrote:
> >>>
> >>>     include/rte_cpuflags.h:154:2: error: redeclaration of enumerator
> >>>     ‘REG_EAX’
> >>>     In file included from /usr/include/signal.h:358:0,
> >>>                      from /usr/include/sys/wait.h:30,
> >>>                      from /root/dpdk/app/test/test_mp_secondary.c:50:
> >>>     /usr/include/sys/ucontext.h:180:3: note: previous definition of
> >>>     ‘REG_EAX’ was here
> >>>
> >>>     In i686, from REG_EAX to REG_EDX are all defined in
> >>>             /usr/include/sys/ucontext.h
> >>>
> >>>     Rename to CPU_REG_EAX to avoid this issue.
> >>>
> >>>     Signed-off-by: Michael Qou <michael.qiu at intel.com
> >>>     <mailto:michael.qiu at intel.com>>
> >>>
> >>>
> >>> NAK.
> >>>
> >> I have answered in you last thread, please check the mail.
> >>
> >> Yes, but for some reason, it was not include, see /usr/include/signal.h:358
> >>
> >> # include <bits/sigstack.h>
> >> # if defined __USE_XOPEN || defined __USE_XOPEN2K8
> >> /* This will define `ucontext_t' and `mcontext_t'.  */
> >> #  include <sys/ucontext.h>
> >> # endif
> >>
> >> So only if __USE_XOPEN or __USE_XOPEN2K8 been defined will include 
> >> <sys/ucontext.h>
> > So try to define USE_XOPEN.
> >
> >> Why NAK?
> > Because it seems you didn't really try to include system headers.
> 
> See below(ucontext.h:25):
> #ifdef __x86_64__
> ...
> #ifdef __USE_GNU
> enmu{
>     ...
>   REG_RBX,
> # define REG_RBX        REG_RBX
>   REG_RDX,
> # define REG_RDX        REG_RDX
>   REG_RAX,
> # define REG_RAX        REG_RAX
>   REG_RCX,
> # define REG_RCX        REG_RCX
> ...
> };
> #endif
> ...
> #else /* !__x86_64__ */
> ...
> #ifdef __USE_GNU
> enmu{
> ...
>   REG_EBX,
> # define REG_EBX        REG_EBX
>   REG_EDX,
> # define REG_EDX        REG_EDX
>   REG_ECX,
> # define REG_ECX        REG_ECX
>   REG_EAX,
> # define REG_EAX        REG_EAX
> ...
> };
> #endif
> ...
> #endif /* !__x86_64__ */
> 
> 
> For none x86_64 platform will be defined as REG_E*X, but x86_64 will be
> REG_R*X.
> 
> This is why only happens in i686 platform.
> 
> Does this clear?

OK thanks.
So it is not possible to use this system header.
It seems your patch is a good approach.



More information about the dev mailing list