diff options
Diffstat (limited to 'libexec/rtld-elf/ia64')
-rw-r--r-- | libexec/rtld-elf/ia64/reloc.c | 12 | ||||
-rw-r--r-- | libexec/rtld-elf/ia64/rtld_machdep.h | 1 |
2 files changed, 13 insertions, 0 deletions
diff --git a/libexec/rtld-elf/ia64/reloc.c b/libexec/rtld-elf/ia64/reloc.c index 921e5d4..d5b45b7 100644 --- a/libexec/rtld-elf/ia64/reloc.c +++ b/libexec/rtld-elf/ia64/reloc.c @@ -586,6 +586,18 @@ call_initfini_pointer(const Obj_Entry *obj, Elf_Addr target) ((InitFunc) &fptr)(); } +void +call_init_pointer(const Obj_Entry *obj, Elf_Addr target) +{ + struct fptr fptr; + + fptr.gp = (Elf_Addr) obj->pltgot; + fptr.target = target; + dbg(" initfini: target=%p, gp=%p", + (void *) fptr.target, (void *) fptr.gp); + ((InitArrFunc) &fptr)(main_argc, main_argv, environ); +} + /* Initialize the special PLT entries. */ void init_pltgot(Obj_Entry *obj) diff --git a/libexec/rtld-elf/ia64/rtld_machdep.h b/libexec/rtld-elf/ia64/rtld_machdep.h index c47b309..4a68ff7 100644 --- a/libexec/rtld-elf/ia64/rtld_machdep.h +++ b/libexec/rtld-elf/ia64/rtld_machdep.h @@ -52,6 +52,7 @@ Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr, const struct Struct_Obj_Entry *, const struct Struct_Obj_Entry *, const Elf_Rel *); void *make_function_pointer(const Elf_Sym *, const struct Struct_Obj_Entry *); void call_initfini_pointer(const struct Struct_Obj_Entry *, Elf_Addr); +void call_init_pointer(const struct Struct_Obj_Entry *, Elf_Addr); #define TLS_TCB_SIZE 16 |