Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 8 Jun 2012 18:31:38 -0400
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: _GLOBAL_OFFSET_TABLE_ in ldso/*/start.s?

On Fri, Jun 08, 2012 at 03:54:46PM -0500, Richard Pennington wrote:
> What is the purpose of the _GLOBAL_OFFSET_TABLE_ reference in these files? It 
> doesn't seem to be used by __dynlink(), although it seems to be passed a a 
> third parameter.

If you check git, you'll see that this code was removed. A much older
version of __dynlink took a third argument that was the base address
of the GOT, which was used to find a pointer to _DYNAMIC in the first
GOT slot (traditionally, it was stored there). Then people started
reporting crashes when linking with a non-binutils linker (gold? or
something from clang/llvm? I don't remember...) that didn't follow
this practice, so I replaced it with more elaborate code to find
_DYNAMIC. The unneeded code in the asm was not removed until much
later. I actually have a new idea for simplifying/replacing some of
the C code, but it won't affect the asm.

By the way, it might be a good idea to familiarize yourself with git
or even the gitweb interface. Questions like the one you had just now
can usually be answered quickly by checking the history of the
relevant files.

Rich

Powered by blists - more mailing lists

Your e-mail address:

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.