summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/alpha
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/alpha
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/alpha')
-rw-r--r--libexec/rtld-elf/alpha/reloc.c7
-rw-r--r--libexec/rtld-elf/alpha/rtld_machdep.h4
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)
OpenPOWER on IntegriCloud