summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/ia64
diff options
context:
space:
mode:
authortmm <tmm@FreeBSD.org>2002-11-18 22:08:50 +0000
committertmm <tmm@FreeBSD.org>2002-11-18 22:08:50 +0000
commitbd3dff9a70f16d5b5e3d0958fdf1aadf3d6b8e74 (patch)
tree144093917c9f45647cc2dc3355dc9f42d2ed85c3 /libexec/rtld-elf/ia64
parent51e467ab6a998ed87592e244cb39ccfb38d424c0 (diff)
downloadFreeBSD-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.c7
-rw-r--r--libexec/rtld-elf/ia64/rtld_machdep.h3
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);
OpenPOWER on IntegriCloud