aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-lookup.c
AgeCommit message (Collapse)Author
1996-06-10* Makerules ($(common-objpfx)libc.so): Depend on $(elfobjdir)/ld.so.cvs/libc-960611Roland McGrath
* elf/dl-close.c: New file. * elf/link.h: Declare _dl_close. * elf/Makefile (routines): Add dl-close. * elf/dlclose.c (dlclose): Use _dl_close. * elf/Makefile ($(objpfx)librtld.so): Remove libelf from deps. * elf/dl-runtime.c (_dl_global_scope): New variable. (_dl_object_relocation_scope): New function. (fixup): Use it. * elf/rtld.c (dl_main): Use it. * elf/dl-open.c (_dl_open): Use it. If (MODE & RTLD_GLOBAL), set the l_global bit and append the new map to _dl_global_scope. * elf/link.h: Declare _dl_global_scope, _dl_global_scope_alloc, and _dl_object_relocation_scope. * elf/link.h (struct link_map): Add l_loader member. Remove _dl_map_object_from_fd decl. * elf/dl-load.c (_dl_map_object): Pass LOADER to ... (_dl_map_object_from_fd): Take new arg LOADER and set l_loader member. (_dl_map_object): Try DT_RPATH from all loaders up the chain. * elf/dl-object.c (_dl_loaded): Variable removed. (_dl_default_scope): New variable replaces it. * elf/link.h (_dl_loaded): Remove variable decl; instead define as macro for _dl_default_scope[2]. (_dl_default_scope): Declare it. * sysdeps/i386/dl-machine.h (RTLD_START): Use _dl_default_scope[2] instead of _dl_loaded. * sysdeps/m68k/dl-machine.h (RTLD_START): Likewise. * elf/rtld.c (dl_main): Use _dl_default_scope for symbol lookups. * elf/dl-reloc.c (_dl_relocate_object): Remove check for _dl_rtld_map. * elf/rtld.c (dl_main): Pass 0 for LAZY flag when re-relocating self. * elf/link.h (struct link_map.l_type): Remove lt_interpreter. (struct link_map): Add new flag member l_global. * elf/dl-reloc.c (_dl_relocate_object): Check for _dl_rtld_map directly instead of looking for lt_interpreter. * sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise. * elf/rtld.c (_dl_start): Don't bother setting BOOTSTRAP_MAP.l_type. (dl_main): Set _dl_rtld_map.l_type to lt_library. * elf/dl-deps.c (_dl_map_object_deps): Propagate MAP->l_type to dependencies loaded, downgrading lt_executable -> lt_library. * elf/dl-load.c (_dl_map_object_from_fd): Take new arg TYPE and set l_type from that, translating lt_library->lt_executable based on the file's ELF type. (_dl_map_object): Likewise. * elf/link.h: Update prototypes. * elf/dl-open.c: Pass type lt_loaded. * elf/rtld.c: Pass type lt_library. * elf/dl-load.c (_dl_map_object_from_fd): Handle null return from _dl_new_object. (_dl_map_object_from_fd: lose): Unchain and free L if it's not null. Free REALNAME, and just use NAME in error message. * elf/dl-object.c (_dl_new_object): If malloc fails, return null instead of calling _dl_signal_error. * elf/dl-load.c (_dl_map_object_from_fd): Close FD before signalling error for _dl_zerofd setup failure. * elf/dl-object.c (_dl_startup_loaded): Variable removed. * elf/link.h: Remove its decl. * elf/dl-reloc.c (_dl_relocate_object): Take new SCOPE arg and pass it through to _dl_lookup_symbol. * elf/link.h (_dl_relocate_object): Update comment and prototype. * elf/rtld.c (dl_main): Pass scope vector to _dl_relocate_object. * elf/dl-lookup.c (_dl_lookup_symbol): Arg SYMBOL_SCOPE is now a null-terminated vector of pointers, no longer a vector of exactly two. * elf/link.h (_dl_lookup_symbol): Update comment and prototype. * elf/dl-runtime.c (fixup): Set up scope for symbol lookup properly as done in _dl_relocate_object. * elf/dlopen.c: Pass "" to _dl_open when FILE is null.
1996-06-10Mon Jun 10 06:14:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>Roland McGrath
* sysdeps/mach/hurd/dl-sysdep.c (__open): Define this instead of open. (__close, __mmap): Likewise define with __ names now. Mon Jun 10 05:13:18 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * elf/dl-support.c: New file. * elf/Makefile (CFLAGS-dl-support.c): New variable. (routines, elide-routines.so): Add dl-support. * elf/dl-minimal.c (_dl_pagesize): Remove common defn. * elf/dl-load.c (_dl_pagesize): Define it here. (_dl_map_object_from_fd): Initialize it if zero. * elf/link.h (_dl_pagesize): Remove const. Sun Jun 9 04:04:26 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * elf/Makefile (routines): Add dl-symbol. * elf/dl-lookup.c (_dl_symbol_value): Moved to ... * elf/dl-symbol.c: New file. * elf/elf.h (Elf32_Xword, Elf32_Sxword): New types. (Elf32_Section, Elf64_Section): New types, 16 bits. (Elf32_Sym, Elf64_Sym): Use it. * elf/dl-deps.c (_dl_open): Moved to ... * elf/dl-open.c: New file. * Makefile (routines): Add dl-open. * elf/Makefile (dl-routines): New variable. (routines): Add $(dl-routines). (elide-routines.so): New variable, set to $(dl-routines). (libdl-inhibit-o): Variable removed; build all flavors of -ldl. (rtld-routines): All but rtld, dl-sysdep, and dl-minimal moved to $(dl-routines). * elf/dl-lookup.c (_dl_lookup_symbol): Remove magic symbol grokage. * elf/dladdr.c: Use ELFW(ST_BIND) in place of ELF32_ST_BIND. * elf/dl-load.c (open_path): Use __ names for open and close. Avoid using strdup. (_dl_map_object): Likewise. (_dl_map_object_from_fd): Use __ names for mmap, munmap, and mprotect. * elf/dl-minimal.c (malloc): Likewise. * elf/dl-reloc.c (_dl_relocate_object): Likewise. * elf/dl-minimal.c (_dl_pagesize): New variable. (malloc): Use that instead of a static variable. * elf/dl-reloc.c (_dl_relocate_object): Use _dl_pagesize instead of calling getpagesize. * elf/dl-load.c (_dl_map_object_from_fd): Likewise. * elf/link.h: Declare _dl_pagesize. * elf/rtld.c (dl_r_debug): Renamed to _dl_r_debug. * elf/link.h (struct link_map): Use Half for l_phnum instead of Word. * elf/rtld.c (dl_main): Use Half for phdr count arg. (_dl_sysdep_start): Update prototype of DL_MAIN function ptr arg. * elf/dl-load.c (_dl_map_object_from_fd): Use explicit Elf32_Word to extract 4-byte magic number, not ElfW(Word). Match EI_CLASS against native wordsize, either 32 or 64. * elf/elf.h (Elf64_Byte, Elf64_Section): Typedefs removed. In C a char is always a byte, no need for a typedef. Section indices are 16-bit quantities in elf64, which already have a typedef Elf64_Half. Remove partial -lelf implementation. There is now a separately-distributed `libelf' package that implements it. * elf/dl-lookup.c: Don't #include <libelf.h> any more. (_dl_elf_hash): New function, moved from libelf.h:elf_hash. (_dl_lookup_symbol): Use it instead of elf_hash. * elf/libelf.h: File removed. * elf/elf_hash.c: File removed. * elf/Makefile (headers): Remove libelf.h. (extra-libs): Remove libelf. (libelf-routines): Variable removed. * elf/Makefile (libdl.so): Remove commands from this target. The implicit rule commands are correct, this explicit rule just serves to add some dependencies. * elf/dl-lookup.c (_dl_lookup_symbol): Use ELFW(ST_TYPE) in place of ELF32_ST_TYPE. Likewise ST_BIND. * elf/do-rel.h (elf_dynamic_do_rel): Likewise R_SYM. * elf/link.h (ElfW): New macro for wordsize-independent ElfXX_* type naming. (ELFW): New macro, likewise for ELFXX_* macro naming. (_ElfW, _ElfW_1): New macros, subroutines of ElfW and ELF. Sat Jun 8 20:52:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * elf/link.h, elf/do-rel.h, elf/dynamic-link.h, elf/dl-deps.c, elf/dl-init.c, elf/dl-load.c, elf/dl-lookup.c, elf/dl-reloc.c, elf/dl-runtime.c, elf/dladdr.c, elf/dlclose.c, elf/dlsym.c, elf/linux-compat.c, elf/rtld.c: Change all uses of `Elf32_XXX' to `ElfW(XXX)' for wordsize-independence. Sat Jun 8 20:50:42 1996 Richard Henderson <rth@tamu.edu> * elf/elf.h: Move Elf64_* types in parity with Elf32 counterparts. (Elf64_auxv_t): New type. (EM_ALPHA, R_ALPHA_*): New macros for elf64-alpha format.
1996-06-05Wed Jun 5 00:01:19 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>Roland McGrath
* elf/dl-lookup.c (_dl_lookup_symbol): Fix typos in last change. Comment out ref to nonexistent _dl_close.
1996-06-05Tue Jun 4 21:01:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>Roland McGrath
* sysdeps/mach/hurd/getlogin_r.c: New file. Wed Jun 5 02:11:30 1996 Ulrich Drepper <drepper@cygnus.com> * io/Makefile (routines): Add ttyname_r. * resolv/res_debug.c, resolv/resolv.h: Update from bind-4.3.4-T4A. * sysdeps/libm-i387/e_asinl.S, sysdeps/libm-i387/e_atan2l.S, sysdeps/libm-i387/e_expl.S, sysdeps/libm-i387/e_fmodl.S, sysdeps/libm-i387/e_log10l.S, sysdeps/libm-i387/e_logl.S, sysdeps/libm-i387/e_remainderl.S, sysdeps/libm-i387/e_scalbl.S, sysdeps/libm-i387/e_sqrtl.S, sysdeps/libm-i387/s_atanl.S, sysdeps/libm-i387/s_cosl.S, sysdeps/libm-i387/s_ilogbl.S, sysdeps/libm-i387/s_log1pl.S, sysdeps/libm-i387/s_logbl.S, sysdeps/libm-i387/s_scalbnl.S, sysdeps/libm-i387/s_sinl.S, sysdeps/libm-i387/s_tanl.S: New files. i387 assembler versions of `long double' math functions. * sysdeps/libm-ieee754/k_standard.c: Add handling for errors in long double functions. * sysdeps/libm-ieee754/s_ilogbl.c, sysdeps/libm-ieee754/s_logbl.c, sysdeps/libm-ieee754/s_modfl.c: New files. Generic versions of `long double' math functions. * sysdeps/libm-ieee754/s_isinf.c [NO_LONG_DOUBLE]: Add string alias for __isinfl. * sysdeps/libm-ieee754/w_acoshl.c, sysdeps/libm-ieee754/w_acosl.c, sysdeps/libm-ieee754/w_asinl.c, sysdeps/libm-ieee754/w_atan2l.c, sysdeps/libm-ieee754/w_atanhl.c, sysdeps/libm-ieee754/w_cabsl.c, sysdeps/libm-ieee754/w_coshl.c, sysdeps/libm-ieee754/w_dreml.c, sysdeps/libm-ieee754/w_expl.c, sysdeps/libm-ieee754/w_fmodl.c, sysdeps/libm-ieee754/w_gammal.c, sysdeps/libm-ieee754/w_gammal_r.c, sysdeps/libm-ieee754/w_hypotl.c, sysdeps/libm-ieee754/w_j0l.c, sysdeps/libm-ieee754/w_j1l.c, sysdeps/libm-ieee754/w_jnl.c, sysdeps/libm-ieee754/w_lgammal.c, sysdeps/libm-ieee754/w_lgammal_r.c, sysdeps/libm-ieee754/w_log10l.c, sysdeps/libm-ieee754/w_logl.c, sysdeps/libm-ieee754/w_powl.c, sysdeps/libm-ieee754/w_remainderl.c, sysdeps/libm-ieee754/w_scalbl.c, sysdeps/libm-ieee754/w_sinhl.c, sysdeps/libm-ieee754/w_sqrtl.c: New files. Wrapper functions around long double function implementations. * sysdeps/posix/ttyname_r.c (ttyname_r): Use _D_EXACT_NAMLEN to determine length of directory entry name. * posix/Makefile (routines): Add getlogin_r. * posix/unistd.h: Add prototype for getlogin_r. * sysdeps/stub/getlogin_r.c: New file. Reentrant version of getlogin function, specified in P1003.1c/D6. Stub version. * sysdeps/unix/getlogin.c (getlogin): Use ttyname_r instead of ttyname. This avoids saving and restoring the old content. Also use setutent_r, getutline_r and endutent_r instead of accing UTMP file directly. * sysdeps/unix/getlogin_r.c: New file. Reentrant version of getlogin function, specified in P1003.1c/D6. Tue Jun 4 20:10:09 1996 J.T. Conklin <jtc@cygnus.com> * sysdeps/libm-i387/s_finitef.S: Fix mask for exponent. * elf/dl-lookup.c (_dl_lookup_symbol): Grok magical undefined symbols _GNU_libc_dl_{open,close,symbol} and resolve them to dl functions. * elf/rtld.c (rtld_map): Renamed to _dl_rtld_map, made global. * elf/link.h: Declare _dl_rtld_map. * elf/dl-lookup.c (_dl_symbol_value): New function. * elf/link.h: Declare it. stdio-common/vfscanf.c: Prepare for reentrant libio. Used in reentrant libio.
1996-06-04Tue Jun 4 02:25:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>Roland McGrath
* elf/linux-compat.c (_init): Pass reloc_addr arg to _dl_lookup_symbol. * elf/dl-lookup.c (_dl_lookup_symbol): Use l_searchlist. * elf/dl-deps.c: New file. * elf/Makefile (rtld-routines): Add dl-deps. * elf/link.h: Declare _dl_map_object_deps, _dl_open. * elf/rtld.c (dl_main): Use _dl_map_object_deps. * elf/dlopen.c: Use _dl_open. * elf/rtld.c (dl_main): Remove BEFORE_RTLD variable and list frobnication based on its value. Detach RTLD_MAP from the chain if its l_opencount is zero after loading deps. * elf/dlfcn.h (RTLD_BINDING_MASK): New macro. * elf/link.h (struct link_map): Replace l_deps_loaded flag member with `struct link_map **l_searchlist' and `unsigned int l_nsearchlist'. * elf/dl-lookup.c (_dl_lookup_symbol): Make SYMBOL_SCOPE arg an array of two link_map ptrs. Search the maps in the l_searchlist of each elt that is not null. * elf/dl-reloc.c (_dl_relocate_object): Pass proper SCOPE array. * elf/dl-runtime.c: Likewise. * elf/dlsym.c: Likewise. * elf/rtld.c (dl_main): Likewise. * elf/dl-minimal.c (realloc): Support realloc of the block most recently returned by the minimal malloc. * intl/localealias.c, intl/dcgettext.c [_LIBC]: Define HAVE_ALLOCA.
1996-06-03Mon Jun 3 00:30:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>cvs/libc-960603Roland McGrath
* elf/dl-lookup.c (_dl_lookup_symbol): Take new arg RELOC_ADDR and don't allow a defn resolving to that address. * elf/link.h: Update prototype and comment. * elf/dl-runtime.c (fixup): Define local `resolve' function and pass it to elf_machine_relplt. * elf/dl-reloc.c (_dl_relocate_object: resolve): Take new arg RELOC_ADDR and pass it through to _dl_lookup_symbol. * elf/do-rel.h (elf_dynamic_do_rel): Pass RESOLVE to elf_machine_rel instead of calling it ourselves and passing its results. (elf_dynamic_do_rel): RESOLVE fn takes new arg RELOC_ADDR. * elf/rtld.c (dl_main): Pass 0 for RELOC_ADDR to _dl_lookup_symbol. * sysdeps/i386/dl-machine.h (elf_machine_rel): Remove SYM_LOADADDR arg. Add RESOLVE function ptr arg. Call *RESOLVE as necessary. * sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise. * sysdeps/stub/dl-machine.h: Likewise. * csu/initfini.c (_fini): Add extern decl for i_am_not_a_leaf. * elf/dlfcn.h (dl_open_mode): Enumerated type removed. (RTLD_LAZY, RTLD_NOW): Define these as macros instead. (RTLD_GLOBAL): New macro. (dlopen): Take arg of type int instead of dl_open_mode. * elf/dlopen.c: Likewise. * math/math.h (_Mldbl): New macro, either produces L suffix or not. (M_*): Use it for these constants.
1996-06-02* elf/dl-lookup.c (_dl_lookup_symbol): Arg NOSELF renamed to NOPLT.Roland McGrath
Reject SHN_UNDEF defns iff NOPLT is nonzero. * elf/link.h (_dl_lookup_symbol): Update prototype and comment. * elf/dl-runtime.c (fixup): Pass 1 to _dl_lookup_symbol for NOPLT. * elf/dlsym.c (dlsym): Pass 0. * elf/rtld.c (dl_main): Likewise. * elf/dl-reloc.c (_dl_relocate_object: resolve): Second arg R_OFFSET replaced with NOPLT flag. Pass it through to _dl_lookup_symbol. * elf/do-rel.h (elf_dynamic_do_rel): Update prototype of RESOLVE arg. Pass `elf_machine_pltrel_p (R->r_type)' result as NOPLT flag value. * sysdeps/i386/dl-machine.h (elf_machine_pltrel_p): New macro. * sysdeps/m68k/dl-machine.h (elf_machine_pltrel_p): Likewise. * sysdeps/stub/dl-machine.h (elf_machine_pltrel_p): Likewise.
1995-11-16* elf/dl-lookup.c (_dl_lookup_symbol): Undefined symbol is nocvs/libc-951116Roland McGrath
error if weak. * elf/Makefile (default-rpath): New variable. (CPPFLAGS): Append -DDEFAULT_RPATH=.... * elf/dl-load.c (_dl_map_object): Use DEFAULT_RPATH instead of hard-coded "/lib:/usr/lib".
1995-09-07Wed Sep 6 19:41:10 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>Roland McGrath
* elf/dl-lookup.c (_dl_lookup_symbol): Test WEAK_VALUE.s rather than WEAK_VALUE.a to see if a weak value has been set. A valid weak value may set WEAK_VALUE.a to 0.
1995-06-12* elf/dl-load.c (_dl_map_object): Add MAP_INHERIT flag in mmapRoland McGrath
from zero fill. * elf/dl-lookup.c (_dl_lookup_symbol): Take new flag arg NOSELF; if nonzero, don't let *REF satisfy the reference itself. * elf/link.h (_dl_lookup_symbol): Add new arg NOSELF in decl. * sysdeps/i386/dl-runtime.c (_dl_runtime_resolve): Pass new arg to _dl_lookup_symbol. * elf/do-rel.h (elf_dynamic_do_rel): Pass new second arg of R->r_offset to RESOLVE callback. * elf/dl-reloc.c (_dl_relocate_object: resolve): Don't let *REF satisfy the reference itself if its value equals the reloc's offset. * elf/rtld.c (dl_main): Write a newline in fatal msg. * Makerules (lib%.so: lib%_pic.a): Pass $(LDFLAGS.so).
1995-05-31Tue May 30 15:52:32 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>Roland McGrath
* mach/Makefile (server-interfaces): Removed notify and device_reply. For shlibs with eager binding, libmachuser.so must not refer to any functions not defined in libc.
1995-05-08Sat May 6 11:06:47 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>Roland McGrath
* Makeconfig (+gccwarn): Add -Winline. * hurd/hurdsig.c (_hurd_internal_post_signal): If SS->context is set, avoid abort_rpcs, and use reply and intr ports saved in SS->context. * sysdeps/mach/hurd/i386/trampoline.c: Don't set SS->intr_port from SS->context. Don't clear SS->context. * sysdeps/mach/hurd/i386/sigreturn.c: Don't set SS->intr_port when setting SS->context. If msg_sig_post returns, re-lock and clear SS->context. Fri May 5 10:37:09 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * mach/Makefile (errsystems.c): Comment out generation rule. * sysdeps/mach/_strerror.c: Consider a system unknown if its bad_sub member is null. * mach/mig-alloc.c: Add weak alias to non-__ name.
1995-05-02* sysdeps/mach/i386/sysdep.h (SNARF_ARGS, CALL_WITH_SP): Rewritten.Roland McGrath
* sysdeps/i386/dl-machine.h: New file. * sysdeps/stub/dl-machine.h: New file. * sysdeps/i386/dl-runtime.c: New file. * sysdeps/stub/dl-runtime.c: New file. * sysdeps/i386/elf/start.S: New file. * sysdeps/generic/dl-sysdep.c: New file. * sysdeps/mach/hurd/dl-sysdep.c: New file.