diff options
| author | John Polstra <jdp@FreeBSD.org> | 2000-01-29 01:27:04 +0000 |
|---|---|---|
| committer | John Polstra <jdp@FreeBSD.org> | 2000-01-29 01:27:04 +0000 |
| commit | 7dbe16fbeef1df733f74de7203647a4eba928609 (patch) | |
| tree | e68cb1ab7205d71d070d2a9fc194f8a433a8b083 /libexec/rtld-elf/rtld.h | |
| parent | 2a0bb85541802e36517ff6b94b5020ef14b496a4 (diff) | |
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.
Notes
svn path=/head/; revision=56780
Diffstat (limited to 'libexec/rtld-elf/rtld.h')
| -rw-r--r-- | libexec/rtld-elf/rtld.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h index 3a88547d0298..6d1ebbf37b05 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); |
