diff options
Diffstat (limited to 'sysdeps/generic')
-rw-r--r-- | sysdeps/generic/dl-cache.c | 8 | ||||
-rw-r--r-- | sysdeps/generic/dl-origin.c | 13 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 9 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 44 |
4 files changed, 39 insertions, 35 deletions
diff --git a/sysdeps/generic/dl-cache.c b/sysdeps/generic/dl-cache.c index 7ba00e4..3800a67 100644 --- a/sysdeps/generic/dl-cache.c +++ b/sysdeps/generic/dl-cache.c @@ -38,10 +38,6 @@ static size_t cachesize; /* 1 if cache_data + PTR points into the cache. */ #define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size) -/* This is the cache ID we expect. Normally it is 3 for glibc linked - binaries. */ -int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID; - #define SEARCH_CACHE(cache) \ /* We use binary search since the table is sorted in the cache file. \ The first matching entry in the table is returned. \ @@ -111,12 +107,12 @@ do \ if (_dl_cache_check_flags (flags) \ && _dl_cache_verify_ptr (lib->value)) \ { \ - if (best == NULL || flags == _dl_correct_cache_id) \ + if (best == NULL || flags == GL(dl_correct_cache_id)) \ { \ HWCAP_CHECK; \ best = cache_data + lib->value; \ \ - if (flags == _dl_correct_cache_id) \ + if (flags == GL(dl_correct_cache_id)) \ /* We've found an exact match for the shared \ object and no general `ELF' release. Stop \ searching. */ \ diff --git a/sysdeps/generic/dl-origin.c b/sysdeps/generic/dl-origin.c index 273ffeb..db990e6 100644 --- a/sysdeps/generic/dl-origin.c +++ b/sysdeps/generic/dl-origin.c @@ -1,5 +1,5 @@ /* Find path of executable. - Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -25,9 +25,6 @@ #include <dl-dst.h> -/* Generally it is not possible to implement this. We have to fall - back on a solution where the user provides the information. */ -extern const char *_dl_origin_path; const char * _dl_get_origin (void) @@ -35,15 +32,15 @@ _dl_get_origin (void) char *result = (char *) -1; /* We use the environment variable LD_ORIGIN_PATH. If it is set make a copy and strip out trailing slashes. */ - if (_dl_origin_path != NULL) + if (GL(dl_origin_path) != NULL) { - size_t len = strlen (_dl_origin_path); - result = malloc (len + 1); + size_t len = strlen (GL(dl_origin_path)); + result = (char *) malloc (len + 1); if (result == NULL) result = (char *) -1; else { - char *cp = __mempcpy (result, _dl_origin_path, len); + char *cp = __mempcpy (result, GL(dl_origin_path), len); while (cp > result + 1 && cp[-1] == '/') --cp; *cp = '\0'; diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index f8b8ac1..d3d5a8c 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -39,7 +39,6 @@ #include <hp-timing.h> extern char **_environ; -extern fpu_control_t _dl_fpu_control; extern void _end; /* Protect SUID program against misuse of file descriptors. */ @@ -54,10 +53,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion /* This variable contains the lowest stack address ever used. */ void *__libc_stack_end; static ElfW(auxv_t) *_dl_auxv; -//Xunsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT; -#if HP_TIMING_AVAIL -hp_timing_t _dl_cpuclock_offset; -#endif #ifndef DL_FIND_ARG_COMPONENTS # define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \ @@ -95,7 +90,7 @@ _dl_sysdep_start (void **start_argptr, #endif #if HP_TIMING_AVAIL - HP_TIMING_NOW (_dl_cpuclock_offset); + HP_TIMING_NOW (GL(dl_cpuclock_offset)); #endif DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ, @@ -146,7 +141,7 @@ _dl_sysdep_start (void **start_argptr, GL(dl_clktck) = av->a_un.a_val; break; case AT_FPUCW: - _dl_fpu_control = av->a_un.a_val; + GL(dl_fpu_control) = av->a_un.a_val; break; } diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 5230332..3249105 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -29,10 +29,12 @@ #include <elf.h> #include <dlfcn.h> +#include <fpu_control.h> #include <sys/mman.h> #include <link.h> #include <dl-lookupcfg.h> #include <bits/libc-lock.h> +#include <hp-timing.h> __BEGIN_DECLS @@ -234,6 +236,15 @@ struct rtld_global /* Cached value of `getpagesize ()'. */ EXTERN size_t _dl_pagesize; + /* During the program run we must not modify the global data of + loaded shared object simultanously in two threads. Therefore we + protect `_dl_open' and `_dl_close' in dl-close.c. + + This must be a recursive lock since the initializer function of + the loaded object might as well require a call to this function. + At this time it is not anymore a problem to modify the tables. */ + __libc_lock_define_recursive (EXTERN, _dl_load_lock) + /* OS version. */ EXTERN unsigned int _dl_osversion; /* Platform name. */ @@ -251,12 +262,27 @@ struct rtld_global /* If nonzero print warnings messages. */ EXTERN int _dl_verbose; + /* Do we do lazy relocations? */ + EXTERN int _dl_lazy; + /* Nonzero if runtime lookups should not update the .got/.plt. */ EXTERN int _dl_bind_not; + /* Nonzero if references should be treated as weak during runtime + linking. */ + EXTERN int _dl_dynamic_weak; + + /* Default floating-point control word. */ + EXTERN fpu_control_t _dl_fpu_control; + /* The object to be initialized first. */ EXTERN struct link_map *_dl_initfirst; + /* Start time on CPU clock. */ +#if HP_TIMING_AVAIL + EXTERN hp_timing_t _dl_cpuclock_offset; +#endif + /* Name of the shared object to be profiled (if any). */ EXTERN const char *_dl_profile; /* Map of shared object to be profiled. */ @@ -268,7 +294,7 @@ struct rtld_global /* Name of the object we want to trace the prelinking. */ EXTERN const char *_dl_trace_prelink; - /* Expect cache ID. */ + /* Expected cache ID. */ EXTERN int _dl_correct_cache_id; /* Counters for the number of relocations performed. */ @@ -291,6 +317,9 @@ struct rtld_global EXTERN struct r_search_path_elem *_dl_all_dirs; EXTERN struct r_search_path_elem *_dl_init_all_dirs; + /* File descriptor to write debug messages to. */ + EXTERN int _dl_debug_fd; + /* Structure describing the dynamic linker itself. */ EXTERN struct link_map _dl_rtld_map; #ifdef SHARED @@ -303,22 +332,9 @@ extern struct rtld_global _rtld_global; 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[]; -/* 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; - /* OS-dependent function to open the zero-fill device. */ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ |