summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/alpha
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2001-10-29 10:10:10 +0000
committerpeter <peter@FreeBSD.org>2001-10-29 10:10:10 +0000
commit7f637f2bb2ae5510edd8461a7ccc1ab9bb20c34d (patch)
treec6f2e920ed301497d5c70408b7fe99cd0e111427 /libexec/rtld-elf/alpha
parent0135add4a6138b4850540eb42f6a4345c3956c2a (diff)
downloadFreeBSD-src-7f637f2bb2ae5510edd8461a7ccc1ab9bb20c34d.zip
FreeBSD-src-7f637f2bb2ae5510edd8461a7ccc1ab9bb20c34d.tar.gz
Update rtld for the "new" ia64 ABI. In the old toolchain, the
DT_INIT and DT_FINI tags pointed to fptr records. In 2.11.2, it points to the actuall address of the function. On IA64 you cannot just take an address of a function, store it in a function pointer variable and call it.. the function pointers point to a fptr data block that has the target gp and address in it. This is absolutely necessary for using the in-tree binutils toolchain, but (unfortunately) will not work with old shared libraries. Save your old ld-elf.so.1 if you want to use old ones still. Do not mix-and-match. This is a no-op change for i386 and alpha. Reviewed by: dfr
Diffstat (limited to 'libexec/rtld-elf/alpha')
-rw-r--r--libexec/rtld-elf/alpha/rtld_machdep.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/libexec/rtld-elf/alpha/rtld_machdep.h b/libexec/rtld-elf/alpha/rtld_machdep.h
index a461deb..11dd60c 100644
--- a/libexec/rtld-elf/alpha/rtld_machdep.h
+++ b/libexec/rtld-elf/alpha/rtld_machdep.h
@@ -40,6 +40,9 @@ Elf_Addr reloc_jmpslot(Elf_Addr *, Elf_Addr,
#define make_function_pointer(def, defobj) \
((defobj)->relocbase + (def)->st_value)
+#define call_initfini_pointer(obj, target) \
+ (((InitFunc)(target))())
+
/* Atomic operations. */
int cmp0_and_store_int(volatile int *, int);
void atomic_add_int(volatile int *, int);
OpenPOWER on IntegriCloud