This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Make STT_GNU_IFUNC symbol dynamic


On Sat, May 23, 2009 at 2:44 PM, Ulrich Drepper <drepper@redhat.com> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> H.J. Lu wrote:
>> Which tool will generate the new relocation? Will it be internal to linker.
>
> The code the compiler generates contains ordinary calls. ?The assembler
> will have to refrain from optimizing calls to static IFUNC functions.

Assembler will always generate PLT relocation for @PLT. I don't think
we need to change the assembler.

> But the real logic is entirely internal to the static linker. ?For every
> local IFUNC symbol create a PLT slot. ?This slot has no global symbol
> attached and the relocation should be R_*_IRELATIVE (my proposed name).
> ?This relocation works like a R_*_RELATIVE relocation but it uses the
> return value as for SHT_GNU_IFUNC symbols. ?The reason we need such a
> relocation is that we have no symbol at runtime. ?We cannot use a normal
> PLT slot relocation since this would perform a global name lookup, which
> is wrong. ?The R_*_IRELATIVE relocation is also more efficient.
>
>

I took a look. It isn't hard to implement. Should it be R_*_IJUMP_SLOT
since it will be processed closer to R_*_JUMP_SLOT than R_*_RELATIVE?
My linker only patch for x86-64 is ready for test. I just need to
verify it works
with glibc on x86-64.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]