public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Christophe LYON <christophe.lyon@st.com>
Cc: binutils@sourceware.org, Nick Clifton <nickc@redhat.com>,
		Phil Blundell <pb@reciva.com>
Subject: Re: linker crash in arm stub generation
Date: Mon, 15 Jun 2009 17:59:00 -0000	[thread overview]
Message-ID: <20090615175935.GA22200@caradoc.them.org> (raw)
In-Reply-To: <4A3658C4.3000800@st.com>

On Mon, Jun 15, 2009 at 04:20:52PM +0200, Christophe LYON wrote:
> Hi,
>
>>> This looks good to me - and I agree that a test would be helpful!
>>>
>> I'll propose one + proper ChangeLog entry next week.
>>
>
> I have started to look at this problem more closely, and I have one  
> question: in elf32-arm.c:allocate_dynrelocs(), there is this comment:
>
>   /* If this symbol is not defined in a regular file, and we are
>      not generating a shared library, then set the symbol to this
>      location in the .plt.  This is required to make function
>      pointers compare as equal between the normal executable and
>      the shared library.  */
>
> Why is the behaviour different when generating a shared lib?
>
> I thought I had understood the comment about function pointers  
> comparison, but I am wondering now....

A PLT entry with a non-zero address is used as the canonical location
of the function.  This is only ever required in an executable, never
in a shared library.  If all accesses to the address are PIC - which
they must be, in a shared library - then they can be easily adjusted
to point to the function's address.  And it's better to do that,
because calls through those pointers will go directly to the function
instead of to the PLT.

In an executable, this might not be the case.  For instance you might
have the address of the funtion in a constant pool in the text
segment.  If that happens, the linker must fix the address of the
function at static link time, even if the definition turns out to be
in a shared library.

Such code is (or is supposed to be, anyway) rejected in shared
objects.

-- 
Daniel Jacobowitz
CodeSourcery

  reply	other threads:[~2009-06-15 17:59 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-11 17:09 Phil Blundell
2009-06-12 12:36 ` Nick Clifton
2009-06-12 13:19   ` Christophe LYON
2009-06-12 13:49     ` Nick Clifton
2009-06-12 14:06     ` Daniel Jacobowitz
2009-06-12 14:13       ` Christophe LYON
2009-06-15 14:22         ` Christophe LYON
2009-06-15 17:59           ` Daniel Jacobowitz [this message]
2009-06-17 15:44             ` Christophe LYON
2009-06-17 16:09               ` Phil Blundell
2009-06-17 18:10               ` Daniel Jacobowitz
2009-06-18 14:25                 ` Christophe LYON
2009-06-18 14:36                   ` Christophe LYON
2009-06-22  9:24                     ` Nick Clifton
2009-06-22 11:33                       ` Christophe LYON
2009-08-26  1:21                     ` Fix Thumb-2 shared libraries Daniel Jacobowitz
2009-08-26  3:11                       ` Daniel Jacobowitz
2009-09-09 18:36                         ` Daniel Jacobowitz
2009-09-14 12:30                           ` Daniel Jacobowitz
2009-08-26 10:39                       ` Christophe LYON
2009-08-26 15:00                         ` Daniel Jacobowitz
2009-08-26 17:24                           ` Christophe LYON

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=20090615175935.GA22200@caradoc.them.org \
    --to=drow@false.org \
    --cc=binutils@sourceware.org \
    --cc=christophe.lyon@st.com \
    --cc=nickc@redhat.com \
    --cc=pb@reciva.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).