summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/rtld.h
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>2000-01-29 01:27:04 +0000
committerjdp <jdp@FreeBSD.org>2000-01-29 01:27:04 +0000
commit4bff590782e7100c86fb3cb5c40e46fb5c813b42 (patch)
tree15bb6f7a1a22644cfbb8a3a3b6db5834e253c62b /libexec/rtld-elf/rtld.h
parenta037c1293d958b92212a5b2d4a23307eea11f46d (diff)
downloadFreeBSD-src-4bff590782e7100c86fb3cb5c40e46fb5c813b42.zip
FreeBSD-src-4bff590782e7100c86fb3cb5c40e46fb5c813b42.tar.gz
When a threads package registers locking methods with dllockinit(),
figure out which shared object(s) contain the the locking methods and fully bind those objects as if they had been loaded with LD_BIND_NOW=1. The goal is to keep the locking methods from requiring any lazy binding. Otherwise infinite recursion occurs in _rtld_bind. This fixes the infinite recursion problem in the linuxthreads port.
Diffstat (limited to 'libexec/rtld-elf/rtld.h')
-rw-r--r--libexec/rtld-elf/rtld.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h
index 3a88547..6d1ebbf 100644
--- a/libexec/rtld-elf/rtld.h
+++ b/libexec/rtld-elf/rtld.h
@@ -142,6 +142,7 @@ typedef struct Struct_Obj_Entry {
bool textrel; /* True if there are relocations to text seg */
bool symbolic; /* True if generated with "-Bsymbolic" */
bool traced; /* Already printed in ldd trace output */
+ bool jmpslots_done; /* Already have relocated the jump slots */
struct link_map linkmap; /* for GDB */
Objlist dldags; /* Object belongs to these dlopened DAGs (%) */
@@ -176,7 +177,8 @@ void lockdflt_release(void *);
void obj_free(Obj_Entry *);
Obj_Entry *obj_new(void);
int reloc_non_plt(Obj_Entry *, Obj_Entry *);
-int reloc_plt(Obj_Entry *, bool);
+int reloc_plt(Obj_Entry *);
+int reloc_jmpslots(Obj_Entry *);
void _rtld_bind_start(void);
const Elf_Sym *symlook_obj(const char *, unsigned long,
const Obj_Entry *, bool);
OpenPOWER on IntegriCloud