[PATCH] include, opcodes: prefix REG_* macros in cris.h, nds32.h and microblaze-opcm.h

Simon Marchi simark@simark.ca
Wed Aug 19 05:03:17 GMT 2026



On 2026-08-18 16:55, Rainer Orth wrote:
> Hi Simon,
> 
>> Bug 34537 reports:
>>
>>     When building gdb with the default configure options of gdb buildbots (which
>>     include --enable-targets=all), gdb fails to build:
>>
>>       CXX    microblaze-tdep.o
>>     In file included from ../../binutils-gdb/gdb/microblaze-tdep.c:37:
>>     ../../binutils-gdb/gdb/../opcodes/microblaze-opcm.h:101:9: error: ‘REG_PC’ redefined [-Werror]
>>       101 | #define REG_PC  32 /* PC.  */
>> 	  |         ^~~~~~
>>     In file included from /usr/include/sys/ucontext.h:14,
>> 		     from /usr/include/sys/signal.h:197,
>> 		     from /usr/include/sys/procset.h:17,
>> 		     from /usr/include/sys/wait.h:22,
>> 		     from ../gnulib/import/sys/wait.h:28,
>> 		     from /usr/include/stdlib.h:16,
>> 		     from /usr/gcc/16/include/c++/16.1.0/cstdlib:83,
>> 		     from ../../binutils-gdb/gdb/../gdbsupport/common-defs.h:107,
>> 		     from ./../../binutils-gdb/gdb/defs.h:26,
>> 		     from <command-line>:
>>     /usr/include/sys/regset.h:158:9: note: this is the location of the previous definition
>>       158 | #define REG_PC  REG_RIP
>> 	  |         ^~~~~~
>>     ../../binutils-gdb/gdb/../opcodes/microblaze-opcm.h:120:9: error: ‘REG_SP’ redefined [-Werror]
>>       120 | #define REG_SP  1 /* stack pointer.  */
>> 	  |         ^~~~~~
>>     /usr/include/sys/regset.h:160:9: note: this is the location of the previous definition
>>       160 | #define REG_SP  REG_RSP
>> 	  |         ^~~~~~
> [...]
>> Attempt to fix it by prefixing the macros with the arch name.
>>
>> I only modified the macros starting with "REG_", but there are other
>> macros with very generic names (e.g. "MAX_REG") that could be renamed
>> too (for consistency, IMO, all the macros in those files should be
>> prefixed the same way).
> 
> Thanks for doing this: I wasn't sure how best to address this.

I think it's just good practice to not use generic macro names in header
files and namespace them a bit.

>> I couldn't build-test this patch on Solaris, but it build with
>> --enable-targets=all on Linux.
> 
> I'll give it a whirl tomorrow.  Just in case, there are Solaris 11.4
> systems in the cfarm for some time now (cfarm216 for sparc and cfarm215
> for x86).

I tried building on cfarm216, just a simple

  $ ../configure --enable-targets=all && gmake

but I hit other problems than what you reported, the first of which:

      CC       igen/igen.o
    In file included from ../../binutils-gdb/sim/igen/igen.c:23:
    /usr/include/stdlib.h:307:12: error: conflicting types for ‘getopt’; have ‘int(int,  char * const*, const char *)’
      307 | extern int getopt(int, char *const *, const char *);
          |            ^~~~~~
    In file included from ../../binutils-gdb/sim/igen/igen.c:22:
    ../../binutils-gdb/sim/../include/getopt.h:115:12: note: previous declaration of ‘getopt’ with type ‘int(void)’
      115 | extern int getopt ();
          |            ^~~~~~
    In file included from ../../binutils-gdb/sim/igen/misc.h:36,
                     from ../../binutils-gdb/sim/igen/igen.c:25:
    /usr/gcc/15/lib/gcc/sparcv9-sun-solaris2.11/15.2.0/include-fixed/stdio.h:373:17: error: conflicting types for ‘getopt’; have ‘int(int,  char * const*, const char *)’
      373 | extern int      getopt(int, char *const *, const char *);
          |                 ^~~~~~
    ../../binutils-gdb/sim/../include/getopt.h:115:12: note: previous declaration of ‘getopt’ with type ‘int(void)’
      115 | extern int getopt ();
          |            ^~~~~~

Simon


More information about the Binutils mailing list