Date: Wed, 25 Nov 1998 08:13:20 -0800 (PST) From: John Polstra <jdp@polstra.com> To: Joel Ray Holveck <joelh@gnu.org> Cc: current@FreeBSD.ORG Subject: Re: Elf linker question. Message-ID: <XFMail.981125081320.jdp@polstra.com> In-Reply-To: <86btlwxv7p.fsf@detlev.UUCP>
next in thread | previous in thread | raw e-mail | index | archive | help
If you follow up to this, let's drop it off the mailing list. It's getting
pretty far off topic.
On 25-Nov-98 Joel Ray Holveck wrote:
>>> How are things like:
>>> sighander_t mysig = libsig;
>>> handled?
>> Any time you take the address of a function, the linker actually fills
>> in the address of a little stub routine. It's the same stub that
>> gets called when you call an external function. The first time it is
>> executed, the stub jumps to code in the dynamic linker that does the
>> lazy binding to whatever function is being called. Then it rewires
>> itself (an indirect jump is used) so that all future calls will go
>> straight to the target function.
>
> Oh, so it doesn't snap the pointer in the code? It just leaves it
> pointing to the stub?
That's right. The whole point of PIC is that you don't relocate anything in
the text (code) segment. That way, all the processes using a given shared
library can share the exact same copy of the code.
Once the lazy binding has already been done for a given function, the "stub"
hardly deserves the name. It's nothing more than an indirect jump through a
location that contains a pointer to the real function's entry point.
John
---
John Polstra jdp@polstra.com
John D. Polstra & Co., Inc. Seattle, Washington USA
"Nobody ever went broke underestimating the taste of the American public."
-- H. L. Mencken
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.981125081320.jdp>
