diff options
author | tmm <tmm@FreeBSD.org> | 2002-11-18 22:08:50 +0000 |
---|---|---|
committer | tmm <tmm@FreeBSD.org> | 2002-11-18 22:08:50 +0000 |
commit | bd3dff9a70f16d5b5e3d0958fdf1aadf3d6b8e74 (patch) | |
tree | 144093917c9f45647cc2dc3355dc9f42d2ed85c3 /libexec/rtld-elf/ia64 | |
parent | 51e467ab6a998ed87592e244cb39ccfb38d424c0 (diff) | |
download | FreeBSD-src-bd3dff9a70f16d5b5e3d0958fdf1aadf3d6b8e74.zip FreeBSD-src-bd3dff9a70f16d5b5e3d0958fdf1aadf3d6b8e74.tar.gz |
Fix the handling of high PLT entries (> 32764) on sparc64. This requires
additional arguments to reloc_jmpslot(), which is why MI code and MD code
of other platforms had to be changed.
Reviewed by: jake
Approved by: re
Diffstat (limited to 'libexec/rtld-elf/ia64')
-rw-r--r-- | libexec/rtld-elf/ia64/reloc.c | 7 | ||||
-rw-r--r-- | libexec/rtld-elf/ia64/rtld_machdep.h | 3 |
2 files changed, 6 insertions, 4 deletions
diff --git a/libexec/rtld-elf/ia64/reloc.c b/libexec/rtld-elf/ia64/reloc.c index 7f8c166..be846c1 100644 --- a/libexec/rtld-elf/ia64/reloc.c +++ b/libexec/rtld-elf/ia64/reloc.c @@ -364,7 +364,7 @@ reloc_jmpslots(Obj_Entry *obj) reloc_jmpslot(where, (Elf_Addr)(defobj->relocbase + def->st_value), - defobj); + defobj, obj, rel); } } else { const Elf_Rela *relalim; @@ -385,7 +385,7 @@ reloc_jmpslots(Obj_Entry *obj) reloc_jmpslot(where, (Elf_Addr)(defobj->relocbase + def->st_value), - defobj); + defobj, obj, (Elf_Rel *)rela); } } obj->jmpslots_done = true; @@ -394,7 +394,8 @@ reloc_jmpslots(Obj_Entry *obj) /* Fixup the jump slot at "where" to transfer control to "target". */ Elf_Addr -reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *obj) +reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *obj, + const Obj_Entry *refobj, const Elf_Rel *rel) { Elf_Addr stubaddr; diff --git a/libexec/rtld-elf/ia64/rtld_machdep.h b/libexec/rtld-elf/ia64/rtld_machdep.h index b4f8e2c..a0ea72f 100644 --- a/libexec/rtld-elf/ia64/rtld_machdep.h +++ b/libexec/rtld-elf/ia64/rtld_machdep.h @@ -45,7 +45,8 @@ struct fptr { struct Struct_Obj_Entry; -Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr, const struct Struct_Obj_Entry *); +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); |