gcc-11.2.1-1.fc35.ppc64le gdb-10.2-6.fc35.ppc64le Fedora-Rawhide clone gdb and build it as follows 1.flags="-g3 -Og -flto" CFLAGS="$flags" CXXFLAGS="$flags" ../binutils-gdb/configure --disable-binutils --disable-elfcpp --disable-gas --disable-gold --disable-gprof --disable-ld --enable-unit-tests --with-system-readline --with-separate-debug-dir=/usr --disable-sim 2.make -j `nproc` results: ../../binutils-gdb/gdbserver/../gdb/arch/ppc-linux-tdesc.h:44:28: error: ‘tdesc_powerpc_isa207_htm_vsx64l’ violates the C++ One Definition Rule [-Werror=odr] 44 | extern struct target_desc *tdesc_powerpc_isa207_htm_vsx64l; Note: struct target_desc is actually defined in gdb/target-descriptions.c. Not in a header.
Marking as dup of the generic ODR bug. *** This bug has been marked as a duplicate of bug 22395 ***
If this still occurs, we need to reopen it. If it does occur, please post the entire warning.
This appears to have popped up again (FSF master updated May 6, 2026): CXXLD gdbserver ../../src/gdbserver/../gdb/arch/ppc-linux-tdesc.h:46:29: error: ‘tdesc_powerpc_isa207_htm_vsx64l’ violates the C++ One Definition Rule [-Werror=odr] 46 | extern const_target_desc_up tdesc_powerpc_isa207_htm_vsx64l; | ^ powerpc-isa207-htm-vsx64l-generated.cc:26:27: note: ‘tdesc_powerpc_isa207_htm_vsx64l’ was previously declared here 26 | const struct target_desc *tdesc_powerpc_isa207_htm_vsx64l; | ^ powerpc-isa207-htm-vsx64l-generated.cc:26:27: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used [snip] I'm working on a patch.
The master branch has been updated by Keith Seitz <kseitz@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d839c0e5ab5a1c08d0a110b31f54d17946d4fc8b commit d839c0e5ab5a1c08d0a110b31f54d17946d4fc8b Author: Keith Seitz <keiths@redhat.com> Date: Tue Jul 7 12:10:08 2026 -0700 regdat.sh: generate const_target_desc_up for register descriptions Late last year, a patch propagated the use of target_desc unique pointers (commit 1a5362ce51ef79ffb61caa20c93284dc368dc74a). At the time, the "old regformats/regdat.sh [weren't] changed because their target_desc objects are statically allocated in the generated files." Unfortunately that re-introduced ODR violations on ppc64le: CXXLD gdbserver ../../src/gdbserver/../gdb/arch/ppc-linux-tdesc.h:46:29: error: âtdesc_powerpc_isa207_htm_vsx64lâ violates the C++ One Definition Rule [-Werror=odr] 46 | extern const_target_desc_up tdesc_powerpc_isa207_htm_vsx64l; | ^ powerpc-isa207-htm-vsx64l-generated.cc:26:27: note: âtdesc_powerpc_isa207_htm_vsx64lâ was previously declared here 26 | const struct target_desc *tdesc_powerpc_isa207_htm_vsx64l; | ^ powerpc-isa207-htm-vsx64l-generated.cc:26:27: note: code may be misoptimized unless â-fno-strict-aliasingâ is used Update regdat.sh so that generated init_registers_* code matches the const-unique_ptr-based target description API, resolving the ODR violation. A follow-up patch updates various gdbserver architectures to accommodate this API change. Tested on ppc64le and s390x Fedora 43 and mips-linux cross build (all with LTO). Approved-By: Simon Marchi <simon.marchi@efficios.com> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28444
Fixed again.