From d6b5d570a3255d8dc80e07c3674594574cd98fe7 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 31 Jan 2002 03:41:25 +0000 Subject: Update. 2002-01-30 Ulrich Drepper * Versions.def [ld]: Add GLIBC_2.3. * elf/dl-addr.c: Move global variables for SHARED code in struct _rtld_global. Export this struct, remove all exports for the signal variables. * elf/dl-close.c: Likewise. * elf/dl-conflict.c: Likewise. * elf/dl-debug.c: Likewise. * elf/dl-deps.c: Likewise. * elf/dl-dst.h: Likewise. * elf/dl-error.c: Likewise. * elf/dl-fini.c: Likewise. * elf/dl-init.c: Likewise. * elf/dl-iteratephdr.c: Likewise. * elf/dl-libc.c: Likewise. * elf/dl-load.c: Likewise. * elf/dl-lookup.c: Likewise. * elf/dl-minimal.c: Likewise. * elf/dl-object.c: Likewise. * elf/dl-open.c: Likewise. * elf/dl-profile.c: Likewise. * elf/dl-profstub.c: Likewise. * elf/dl-reloc.c: Likewise. * elf/dl-runtime.c: Likewise. * elf/dl-support.c: Likewise. * elf/dl-sym.c: Likewise. * elf/dl-version.c: Likewise. * elf/do-lookup.h: Likewise. * elf/do-rel.h: Likewise. * elf/dynamic-link.h: Likewise. * elf/rtld.c: Likewise. * sysdeps/generic/dl-cache.c: Likewise. * sysdeps/generic/dl-sysdep.c: Likewise. * sysdeps/generic/ldsodefs.h: Likewise. * sysdeps/generic/libc-start.c: Likewise. * sysdeps/i386/dl-machine.h: Likewise. * sysdeps/ia64/dl-fptr.c: Likewise. * sysdeps/ia64/dl-machine.h: Likewise. * sysdeps/unix/sysv/linux/dl-librecon.h: Likewise. * sysdeps/unix/sysv/linux/dl-origin.c: Likewise. * sysdeps/unix/sysv/linux/dl-osinfo.h: Likewise. * sysdeps/unix/sysv/linux/getclktck.c: Likewise. * sysdeps/unix/sysv/linux/getpagesize.c: Likewise. * sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise. * sysdeps/unix/sysv/linux/ia64/dl-static.c: Likewise. * sysdeps/unix/sysv/linux/ia64/getpagesize.c: Likewise. * malloc/thread-m.h: Spinlock definitions for x86/x86_64. --- sysdeps/generic/ldsodefs.h | 168 +++++++++++++++++++++++++++++---------------- 1 file changed, 109 insertions(+), 59 deletions(-) (limited to 'sysdeps/generic/ldsodefs.h') diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 837d32d0ca..52303327c0 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -1,5 +1,5 @@ /* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -189,29 +190,35 @@ typedef void (*receiver_fct) (int, const char *, const char *); user interface to run-time dynamic linking. */ -/* Parameters passed to the dynamic linker. */ -extern char **_dl_argv; - -/* Cached value of `getpagesize ()'. */ -extern size_t _dl_pagesize; - -/* OS version. */ -extern unsigned int _dl_osversion; - -/* File descriptor referring to the zero-fill device. */ -extern int _dl_zerofd; - -/* Name of the shared object to be profiled (if any). */ -extern const char *_dl_profile; -/* Map of shared object to be profiled. */ -extern struct link_map *_dl_profile_map; -/* Filename of the output file. */ -extern const char *_dl_profile_output; -/* Map of shared object to be prelink traced. */ -extern struct link_map *_dl_trace_prelink_map; - -/* If nonzero the appropriate debug information is printed. */ -extern int _dl_debug_mask; +#ifndef SHARED +# define EXTERN extern +# define GL(name) _##name +#else +# define EXTERN +# define GL(name) _rtld_global._##name +struct rtld_global +{ +#endif + /* Don't change the order of the following elements. 'dl_loaded' + must remain the first element. Forever. */ + + /* And a pointer to the map for the main map. */ + EXTERN struct link_map *_dl_loaded; + /* Number of object in the _dl_loaded list. */ + EXTERN unsigned int _dl_nloaded; + /* Array representing global scope. */ + EXTERN struct r_scope_elem *_dl_global_scope[2]; + /* Direct pointer to the searchlist of the main object. */ + EXTERN struct r_scope_elem *_dl_main_searchlist; + /* Copy of the content of `_dl_main_searchlist'. */ + EXTERN struct r_scope_elem _dl_initial_searchlist; + /* This is zero at program start to signal that the global scope map is + allocated by rtld. Later it keeps the size of the map. It might be + reset if in _dl_close if the last global object is removed. */ + EXTERN size_t _dl_global_scope_alloc; + + /* If nonzero the appropriate debug information is printed. */ + EXTERN int _dl_debug_mask; #define DL_DEBUG_LIBS (1 << 0) #define DL_DEBUG_IMPCALLS (1 << 1) #define DL_DEBUG_BINDINGS (1 << 2) @@ -224,33 +231,94 @@ extern int _dl_debug_mask; #define DL_DEBUG_HELP (1 << 8) #define DL_DEBUG_PRELINK (1 << 9) -/* Expect cache ID. */ -extern int _dl_correct_cache_id; + /* Cached value of `getpagesize ()'. */ + EXTERN size_t _dl_pagesize; -/* Mask for hardware capabilities that are available. */ -extern unsigned long int _dl_hwcap; + /* OS version. */ + EXTERN unsigned int _dl_osversion; + /* Platform name. */ + EXTERN const char *_dl_platform; + EXTERN size_t _dl_platformlen; -/* Mask for important hardware capabilities we honour. */ -extern unsigned long int _dl_hwcap_mask; +#ifndef MAP_ANON + /* File descriptor referring to the zero-fill device. */ + EXTERN int _dl_zerofd; +#endif -/* File descriptor to write debug messages to. */ -extern int _dl_debug_fd; + /* CLK_TCK as reported by the kernel. */ + EXTERN int _dl_clktck; -/* Names of shared object for which the RPATH should be ignored. */ -extern const char *_dl_inhibit_rpath; + /* If nonzero print warnings messages. */ + EXTERN int _dl_verbose; -/* Nonzero if references should be treated as weak during runtime linking. */ -extern int _dl_dynamic_weak; + /* Nonzero if runtime lookups should not update the .got/.plt. */ + EXTERN int _dl_bind_not; + + /* The object to be initialized first. */ + EXTERN struct link_map *_dl_initfirst; + + /* Name of the shared object to be profiled (if any). */ + EXTERN const char *_dl_profile; + /* Map of shared object to be profiled. */ + EXTERN struct link_map *_dl_profile_map; + /* Filename of the output file. */ + EXTERN const char *_dl_profile_output; + /* Map of shared object to be prelink traced. */ + EXTERN struct link_map *_dl_trace_prelink_map; + /* Name of the object we want to trace the prelinking. */ + EXTERN const char *_dl_trace_prelink; + + /* Expect cache ID. */ + EXTERN int _dl_correct_cache_id; + + /* Counters for the number of relocations performed. */ + EXTERN unsigned long int _dl_num_relocations; + EXTERN unsigned long int _dl_num_cache_relocations; + + /* Mask for hardware capabilities that are available. */ + EXTERN unsigned long int _dl_hwcap; + + /* Mask for important hardware capabilities we honour. */ + EXTERN unsigned long int _dl_hwcap_mask; + + /* Names of shared object for which the RPATH should be ignored. */ + EXTERN const char *_dl_inhibit_rpath; + + /* Location of the binary. */ + EXTERN const char *_dl_origin_path; + + /* List of search directories. */ + EXTERN struct r_search_path_elem *_dl_all_dirs; + EXTERN struct r_search_path_elem *_dl_init_all_dirs; + + /* Structure describing the dynamic linker itself. */ + EXTERN struct link_map _dl_rtld_map; +#ifdef SHARED +}; +extern struct rtld_global _rtld_global; +#endif +#undef EXTERN + +/* Parameters passed to the dynamic linker. */ +extern int _dl_argc; +extern char **_dl_argv; + +/* Do we do lazy relocations? */ +extern int _dl_lazy; /* The array with message we print as a last resort. */ extern const char _dl_out_of_memory[]; -/* Nonzero if runtime lookups should not update the .got/.plt. */ -extern int _dl_bind_not; +/* File descriptor to write debug messages to. */ +extern int _dl_debug_fd; + +/* Nonzero if references should be treated as weak during runtime + linking. + + XXX Once we can set the default for this variable to zero move it + into _rtld_global. */ +extern int _dl_dynamic_weak; -/* List of search directories. */ -extern struct r_search_path_elem *_dl_all_dirs; -extern struct r_search_path_elem *_dl_init_all_dirs; /* OS-dependent function to open the zero-fill device. */ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ @@ -400,24 +468,6 @@ extern lookup_t _dl_lookup_versioned_symbol_skip (const char *undef, extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name) internal_function; - -/* Structure describing the dynamic linker itself. */ -extern struct link_map _dl_rtld_map; -/* And a pointer to the map for the main map. */ -extern struct link_map *_dl_loaded; -/* Number of object in the _dl_loaded list. */ -extern unsigned int _dl_nloaded; -/* Array representing global scope. */ -extern struct r_scope_elem *_dl_global_scope[2]; -/* Direct pointer to the searchlist of the main object. */ -extern struct r_scope_elem *_dl_main_searchlist; -/* Copy of the content of `_dl_main_searchlist'. */ -extern struct r_scope_elem _dl_initial_searchlist; -/* This is zero at program start to signal that the global scope map is - allocated by rtld. Later it keeps the size of the map. It might be - reset if in _dl_close if the last global object is removed. */ -extern size_t _dl_global_scope_alloc; - /* Allocate a `struct link_map' for a new object being loaded, and enter it into the _dl_main_map list. */ extern struct link_map *_dl_new_object (char *realname, const char *libname, -- cgit v1.2.3