[Bug target/28598] New: [4.2 Regression] GOT reloc using section anchor

dje at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri Aug 4 02:30:00 GMT 2006


`.LANCHOR0' referenced in section `.text' of libc_pic.a(strtoul_l.os):
defined in discarded section `.gnu.linkonce.r.__strtol_ul_max_tab' of
libc_pic.a(strtoul_l.os)
`.LANCHOR1' referenced in section `.text' of libc_pic.a(strtoul_l.os):
defined in discarded section `.gnu.linkonce.r.__strtol_ul_rem_tab' of
libc_pic.a(strtoul_l.os)

-fno-section-anchors strtoul_l.os
000000fe  00000f0e R_PPC_GOT16            00000000   __strtol_ul_max_tab + 0
00000102  0000100e R_PPC_GOT16            00000000   __strtol_ul_rem_tab + 0
    15: 00000000   140 OBJECT  GLOBAL HIDDEN    5 __strtol_ul_max_tab
    16: 00000000    35 OBJECT  GLOBAL HIDDEN    6 __strtol_ul_rem_tab

-fsection-anchors strtoul_l_os
000000fe  0000060e R_PPC_GOT16            00000000   .LANCHOR0 + 0
00000102  0000080e R_PPC_GOT16            00000000   .LANCHOR1 + 0
     6: 00000000     0 NOTYPE  LOCAL  DEFAULT    5 .LANCHOR0
     8: 00000000     0 NOTYPE  LOCAL  DEFAULT    6 .LANCHOR1

GOT relocs work by creating one entry in .got per symbol, so for example
if there are a dozen GOT relocs referencing __strtol_ul_max_tab you get
just one entry in .got.  Global symbols merge.  There can only be one
strong definition of a global symbol, and all references resolve to
that single definition.  However, .LANCHOR0 is local, so is a different
symbol to .LANCHOR0 in some other file.  Thus the GOT reloc referencing
.LANCHOR0 in this file creates a separate .got entry to a GOT reloc in
another file referencing .LANCHOR0.

I'd say this is a gcc bug.  (The GOT reloc can't really use section
anchors anyway because sym+off@got has rather useless semantics, so why
can't gcc use the original symbol?)  ld can't treat the local symbols in
linkonce sections as if they were global because .LANCHOR0 in
.gnu.linkonce.r.__strtol_ul_max_tab must be different from .LANCHOR0 in
.gnu.linkonce.r.some_other_name.


-- 
           Summary: [4.2 Regression] GOT reloc using section anchor
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dje at gcc dot gnu dot org
 GCC build triplet: powerpc-linux
  GCC host triplet: powerpc-linux
GCC target triplet: powerpc-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28598



More information about the Gcc-bugs mailing list