Re: [PATCH] include, opcodes: prefix REG_* macros in cris.h, nds32.h and microblaze-opcm.h
Simon Marchi <[email protected]>
| Newsgroups | gmane.comp.gdb.patches,gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
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