diff options
author | kib <kib@FreeBSD.org> | 2016-11-23 17:48:43 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2016-11-23 17:48:43 +0000 |
commit | 9ef73b375eb639d0ca5e6fe029a6aed4bf092ca6 (patch) | |
tree | a18aab4ed7ad8e0389d6779e328cfde735de1868 /libexec/rtld-elf/mips | |
parent | 7cd55eaa0f37289e264d9325cb65d7b221badb56 (diff) | |
download | FreeBSD-src-9ef73b375eb639d0ca5e6fe029a6aed4bf092ca6.zip FreeBSD-src-9ef73b375eb639d0ca5e6fe029a6aed4bf092ca6.tar.gz |
MFC r308689:
Pass CPUID[1] %edx (cpu_feature), %ecx (cpu_feature2) and
CPUID[7].%ebx (cpu_stdext_feature), %ecx (cpu_stdext_feature2) to the
ifunc resolvers on x86.
MFC r308925:
Adjust r308689 to make rtld compilable with either in-tree or
(hopefully) stock gcc 4.2.1 on i386 and other arches.
Diffstat (limited to 'libexec/rtld-elf/mips')
-rw-r--r-- | libexec/rtld-elf/mips/reloc.c | 5 | ||||
-rw-r--r-- | libexec/rtld-elf/mips/rtld_machdep.h | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/libexec/rtld-elf/mips/reloc.c b/libexec/rtld-elf/mips/reloc.c index 809adb8..2ca915e 100644 --- a/libexec/rtld-elf/mips/reloc.c +++ b/libexec/rtld-elf/mips/reloc.c @@ -618,6 +618,11 @@ reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj, } void +ifunc_init(Elf_Auxinfo aux_info[__min_size(AT_COUNT)] __unused) +{ +} + +void allocate_initial_tls(Obj_Entry *objs) { char *tls; diff --git a/libexec/rtld-elf/mips/rtld_machdep.h b/libexec/rtld-elf/mips/rtld_machdep.h index befbf13..4d2c9d9 100644 --- a/libexec/rtld-elf/mips/rtld_machdep.h +++ b/libexec/rtld-elf/mips/rtld_machdep.h @@ -52,6 +52,9 @@ Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, #define call_init_pointer(obj, target) \ (((InitArrFunc)(target))(main_argc, main_argv, environ)) +#define call_ifunc_resolver(ptr) \ + (((Elf_Addr (*)(void))ptr)()) + typedef struct { unsigned long ti_module; unsigned long ti_offset; |