Compilation of GDB (Binutils) on a recent Gentoo % gcc --version gcc (Gentoo 7.3.0-r3 p1.4) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % equery l sys-libs/glibc * Searching for glibc in sys-libs ... [IP-] [ ] sys-libs/glibc-2.26-r7:2.2 fails with the following error: CXX gdb.o In file included from ../../gdb/defs.h:28:0, from ../../gdb/gdb.c:19: ../../gdb/common/common-defs.h:71:0: error: "_FORTIFY_SOURCE" redefined [-Werror] #define _FORTIFY_SOURCE 2 <built-in>: note: this is the location of the previous definition cc1plus: all warnings being treated as errors make[2]: *** [Makefile:1619: gdb.o] Error 1 This patch is a simple workaround: --- a/gdb/common/common-defs.h +++ b/gdb/common/common-defs.h @@ -67,7 +67,7 @@ optimization is required because _FORTIFY_SOURCE only works when optimization is enabled. */ -#if defined __OPTIMIZE__ && __OPTIMIZE__ > 0 +#if defined __OPTIMIZE__ && __OPTIMIZE__ > 0 && 0 #define _FORTIFY_SOURCE 2 #endif
Apparently this is a Gentoo problem. See: https://bugs.gentoo.org/621036 Gentoo patches their GCC to explicitly define _FORTIFY_SOURCE=2, which causes problems when the user tries to (re)define it. There's at least one other bug report here: https://jira.mongodb.org/browse/SERVER-29982 Because it's a distro bug, I'm closing this bug as WONTFIX. If you still think this is a GDB bug, feel free to reopen. Thanks.
Well, one could argue that it's also possible to make GDB more robust in this scenario. It's just a matter of guarding the definition of _FORTIFY_SOURCE. I'll submit a patch for it.
Patch sent: https://sourceware.org/ml/gdb-patches/2018-10/msg00732.html
The master branch has been updated by Sergio Durigan Junior <sergiodj@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=656efb5e2691b2bd29573d9985d20206c47b6927 commit 656efb5e2691b2bd29573d9985d20206c47b6927 Author: Sergio Durigan Junior <sergiodj@redhat.com> Date: Tue Oct 30 17:37:03 2018 -0400 Fix PR gdb/23835: Don't redefine _FORTIFY_SOURCE if it's already defined Gentoo has a local GCC patch which always defines _FORTIFY_SOURCE=2. This causes a build problem when building GDB there, because "common/common-defs.h" also defines _FORTIFY_SOURCE=2: CXX gdb.o In file included from ../../gdb/defs.h:28:0, from ../../gdb/gdb.c:19: ../../gdb/common/common-defs.h:71:0: error: "_FORTIFY_SOURCE" redefined [-Werror] #define _FORTIFY_SOURCE 2 <built-in>: note: this is the location of the previous definition cc1plus: all warnings being treated as errors make[2]: *** [Makefile:1619: gdb.o] Error 1 Even though it is questionable whether Gentoo's approach is the correct one: https://jira.mongodb.org/browse/SERVER-29982 https://bugs.gentoo.org/621036 it is still possible for GDB to be a bit more robust here and make sure it just defines _FORTIFY_SOURCE if it hasn't been defined already. This patch does that. Tested by rebuilding and making sure the macro was defined. gdb/ChangeLog: 2018-10-31 Sergio Durigan Junior <sergiodj@redhat.com> PR gdb/23835 * common/common-defs.h: Don't redefine _FORTIFY_SOURCE if it's already defined.
The issue should be fixed now. Please reopen this bug if you still face problems. Thanks.