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/alpha | |
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/alpha')
-rw-r--r-- | libexec/rtld-elf/alpha/reloc.c | 7 | ||||
-rw-r--r-- | libexec/rtld-elf/alpha/rtld_machdep.h | 4 |
2 files changed, 7 insertions, 4 deletions
diff --git a/libexec/rtld-elf/alpha/reloc.c b/libexec/rtld-elf/alpha/reloc.c index 4d9356c..c1a71cf 100644 --- a/libexec/rtld-elf/alpha/reloc.c +++ b/libexec/rtld-elf/alpha/reloc.c @@ -252,7 +252,7 @@ reloc_jmpslots(Obj_Entry *obj) return -1; reloc_jmpslot(where, (Elf_Addr)(defobj->relocbase + def->st_value), - defobj); + defobj, obj, rel); } } else { const Elf_Rela *relalim; @@ -272,7 +272,7 @@ reloc_jmpslots(Obj_Entry *obj) return -1; reloc_jmpslot(where, (Elf_Addr)(defobj->relocbase + def->st_value), - defobj); + defobj, obj, (Elf_Rel *)rela); } } obj->jmpslots_done = true; @@ -281,7 +281,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/alpha/rtld_machdep.h b/libexec/rtld-elf/alpha/rtld_machdep.h index 777eb0f..d224b9c 100644 --- a/libexec/rtld-elf/alpha/rtld_machdep.h +++ b/libexec/rtld-elf/alpha/rtld_machdep.h @@ -35,7 +35,9 @@ struct Struct_Obj_Entry; #define rtld_dynamic(obj) (&_DYNAMIC) Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr, - const struct Struct_Obj_Entry *obj); + const struct Struct_Obj_Entry *, + const struct Struct_Obj_Entry *, + const Elf_Rel *); #define make_function_pointer(def, defobj) \ ((defobj)->relocbase + (def)->st_value) |