Bug 28444 - gdb fails to build on ppc64le when building with -flto
Summary: gdb fails to build on ppc64le when building with -flto
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: gdb (show other bugs)
Version: 10.1
: P2 normal
Target Milestone: ---
Assignee: Keith Seitz
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-10-11 20:24 UTC by Alexandra Hájková
Modified: 2026-07-07 19:50 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
Project(s) to access:
ssh public key:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexandra Hájková 2021-10-11 20:24:37 UTC
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.
Comment 1 Tom Tromey 2022-03-06 17:10:47 UTC
Marking as dup of the generic ODR bug.

*** This bug has been marked as a duplicate of bug 22395 ***
Comment 2 Tom de Vries 2023-09-11 07:35:04 UTC
If this still occurs, we need to reopen it.

If it does occur, please post the entire warning.
Comment 3 Keith Seitz 2026-05-07 19:39:43 UTC
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.
Comment 4 Sourceware Commits 2026-07-07 19:49:06 UTC
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
Comment 5 Keith Seitz 2026-07-07 19:50:15 UTC
Fixed again.