git: rtld: Add STT_GNU_IFUNC and R_MACHINE_IRELATIVE_GNU support

John Marino marino at crater.dragonflybsd.org
Mon Jan 23 08:15:11 PST 2012


commit 0e63a289be0e5b68be98ed583e6cf069f47ef7fa
Author: John Marino <draco at marino.st>
Date:   Sun Jan 22 00:00:15 2012 +0100

    rtld: Add STT_GNU_IFUNC and R_MACHINE_IRELATIVE_GNU support
    
    Add support for STT_GNU_IFUNC and R_MACHINE_IRELATIVE GNU extensions to
    rtld. This adds runtime bits neccessary for the use of the dispatch
    functions from the dynamically-linked executables and shared libraries.
    
    To allow use of external references from the dispatch function, resolution
    of the R_MACHINE_IRESOLVE relocations in PLT is postponed until GOT entries
    for PLT are prepared, and normal resolution of the GOT entries is finished.
    Similar to how it is done by GNU, IRELATIVE relocations are resolved in
    advance, instead of normal lazy handling for PLT.
    
    Taken-from:
    FreeBSD SVN 228435 (12 DEC 2011)
    FreeBSD SVN 228503 (14 DEC 2011)
    FreeBSD SVN 229508 (04 JAN 2012)

Summary of changes:
 libexec/rtld-elf/i386/reloc.c   |  110 +++++++++++++++++++++++++++-----------
 libexec/rtld-elf/rtld.c         |  105 ++++++++++++++++++++++++++++++++++---
 libexec/rtld-elf/rtld.h         |    5 ++
 libexec/rtld-elf/x86_64/reloc.c |   75 ++++++++++++++++++++++++++
 sys/cpu/i386/include/elf.h      |    4 +-
 sys/cpu/x86_64/include/elf.h    |    3 +-
 sys/sys/elf_common.h            |    3 +-
 7 files changed, 261 insertions(+), 44 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/0e63a289be0e5b68be98ed583e6cf069f47ef7fa


-- 
DragonFly BSD source repository





More information about the Commits mailing list