public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Alan Modra <amodra@bigpond.net.au>
To: Steven Munroe <munroesj@us.ibm.com>
Cc: Richard Sandiford <richard@codesourcery.com>, 	binutils@sourceware.org
Subject: Re: Link problems with section anchors
Date: Fri, 04 Aug 2006 01:30:00 -0000	[thread overview]
Message-ID: <20060804013032.GB23605@bubble.grove.modra.org> (raw)
In-Reply-To: <44D2755E.9020600@us.ibm.com>

On Thu, Aug 03, 2006 at 05:14:54PM -0500, Steven Munroe wrote:
> `.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)
> ...
> 
> This is related to -fsection-anchors because rebuilding with
> -fno-section-anchors makes the problem go away.

Taking a look at -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

vs -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

Note the difference in local vs. global symbol used on the GOT reloc.
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.  Hmm, I suppose ld could create a new
global name that incorporated the section name, and do the same for
section groups, but twiddling relocs to use a different symbol is
non-trivial.

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre

       reply	other threads:[~2006-08-04  1:30 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <44D2755E.9020600@us.ibm.com>
2006-08-04  1:30 ` Alan Modra [this message]
2006-08-04  9:04   ` Richard Sandiford
2006-08-04 13:53     ` Steven Munroe
2006-08-04 13:54     ` David Edelsohn
2006-08-04 14:01       ` Richard Sandiford
2006-08-04 14:12         ` David Edelsohn
     [not found] <3A3FC75F7C72D711A7DC009027AC9C4B1788D9@jupiter>
2004-05-19  3:30 ` Powerpc Linux build fails Alan Modra
2004-05-19  4:27   ` Geoff Keating
2004-05-19  5:10     ` Alan Modra
2004-05-19 16:24       ` Kumar Gala
2004-05-20  0:44         ` Alan Modra
     [not found] <087e01c3b5da$77d658e0$0202040a@catdog>
2003-11-29  1:42 ` ppc problem with .rodata.str1.4. binutils requirement for gcc 3.3.1? Alan Modra
2003-11-29 18:14   ` Kris Warkentin
2001-12-31 19:09 Compiling kernel 2.4.17 fails at link stage Krishnakumar B
2002-01-04  3:50 ` Alan Modra
2002-01-04 12:39   ` [Linux-ia64] " Alan Modra
  -- strict thread matches above, loose matches on Subject: below --
2001-10-24 18:26 Release 2.12 Hans-Peter Nilsson
2001-10-24 18:38 ` Alan Modra
2001-10-24 18:43   ` David O'Brien
2001-10-24 19:30     ` Alan Modra
2001-10-24 19:35       ` MMIX (was: Re: Release 2.12) Hans-Peter Nilsson
2001-10-24 21:45       ` Release 2.12 Eric Christopher
2001-10-25  8:41         ` H . J . Lu
2001-10-25  8:47       ` H . J . Lu
2001-10-24 18:49   ` Daniel Jacobowitz
2001-10-24 19:43     ` Alan Modra
2001-10-24 20:10       ` Daniel Jacobowitz
2001-10-24 20:35         ` Alan Modra
2001-10-24 20:44           ` Daniel Jacobowitz
2001-10-25  5:09         ` Christopher C. Chimelis
2001-10-25  1:56       ` Philip Blundell
2001-10-25  8:30         ` H . J . Lu
2001-10-25  8:47           ` David O'Brien
     [not found]       ` <amodra@bigpond.net.au>
2002-01-04 17:42         ` [Linux-ia64] Compiling kernel 2.4.17 fails at link stage Grant Grundler
2002-01-04 17:59           ` H . J . Lu
2002-01-04 20:37             ` Grant Grundler
2002-01-04 22:39               ` H . J . Lu
2002-01-07 12:52                 ` Grant Grundler
2002-01-04 19:21           ` Alan Modra
2003-11-29  2:33         ` ppc problem with .rodata.str1.4. binutils requirement for gcc 3.3.1? David Edelsohn
2003-11-29  3:05           ` Alan Modra
2003-11-29  4:06         ` David Edelsohn
2003-11-29  4:10           ` Andrew Pinski
2003-11-29  4:20             ` David Edelsohn
2003-11-29  6:47               ` Alan Modra
2003-11-29 19:40         ` David Edelsohn
2004-05-19 15:19         ` Powerpc Linux build fails David Edelsohn
2004-05-20  0:39           ` Alan Modra
2004-05-20  1:24             ` Alan Modra
2004-05-20  1:46               ` Alan Modra
2004-05-20  2:29         ` David Edelsohn
2004-05-20  3:10           ` Alan Modra
2006-08-04  1:49         ` Link problems with section anchors David Edelsohn
2006-08-04  2:04           ` Alan Modra
2001-10-24 19:37   ` Release 2.12 Russ Allbery
2001-10-24 19:52     ` Alan Modra
2001-10-25  0:46 ` H . J . Lu
2001-10-25  8:57   ` David O'Brien
2001-10-25  9:38     ` H . J . Lu
2001-10-25  9:44       ` H . J . Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060804013032.GB23605@bubble.grove.modra.org \
    --to=amodra@bigpond.net.au \
    --cc=binutils@sourceware.org \
    --cc=munroesj@us.ibm.com \
    --cc=richard@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).