diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 182 |
1 files changed, 103 insertions, 79 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index d7a6093b21..5d253e460a 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -220,23 +220,6 @@ struct rtld_global 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) -#define DL_DEBUG_SYMBOLS (1 << 3) -#define DL_DEBUG_VERSIONS (1 << 4) -#define DL_DEBUG_RELOC (1 << 5) -#define DL_DEBUG_FILES (1 << 6) -#define DL_DEBUG_STATISTICS (1 << 7) -/* These two are used only internally. */ -#define DL_DEBUG_HELP (1 << 8) -#define DL_DEBUG_PRELINK (1 << 9) - - /* 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. @@ -246,12 +229,6 @@ struct rtld_global At this time it is not anymore a problem to modify the tables. */ __rtld_lock_define_recursive (EXTERN, _dl_load_lock) - /* OS version. */ - EXTERN unsigned int _dl_osversion; - /* Platform name. */ - EXTERN const char *_dl_platform; - EXTERN size_t _dl_platformlen; - /* Incremented whenever something may have been added to dl_loaded. */ EXTERN unsigned long long _dl_load_adds; @@ -260,25 +237,6 @@ struct rtld_global EXTERN int _dl_zerofd; #endif - /* CLK_TCK as reported by the kernel. */ - EXTERN int _dl_clktck; - - /* 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; @@ -290,36 +248,13 @@ struct rtld_global EXTERN hp_timing_t _dl_hp_timing_overhead; #endif - /* 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; - - /* Expected 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; @@ -327,11 +262,6 @@ struct rtld_global /* File descriptor to write debug messages to. */ EXTERN int _dl_debug_fd; - /* -1 if the dynamic linker should honor library load bias, - 0 if not, -2 use the default (honor biases for normal - binaries, don't honor for PIEs). */ - EXTERN ElfW(Addr) _dl_use_load_bias; - #ifdef _LIBC_REENTRANT EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const)); #endif @@ -403,15 +333,6 @@ struct rtld_global EXTERN void (*_dl_init_static_tls) (struct link_map *); #endif -#ifdef NEED_DL_SYSINFO - /* Syscall handling improvements. This is very specific to x86. */ - EXTERN uintptr_t _dl_sysinfo; - - /* The vsyscall page is a virtual DSO pre-mapped by the kernel. - This points to its ELF header. */ - EXTERN const ElfW(Ehdr) *_dl_sysinfo_dso; -#endif - #ifdef SHARED }; # define __rtld_global_attribute__ @@ -432,6 +353,109 @@ extern struct rtld_global _rtld_local __rtld_local_attribute__; # endif extern struct rtld_global _rtld_global __rtld_global_attribute__; #endif + +#ifndef SHARED +# define GLRO(name) _##name +#else +# ifdef IS_IN_rtld +# define GLRO(name) _rtld_local_ro._##name +# else +# define GLRO(name) _rtld_global_ro._##name +# endif +struct rtld_global_ro +{ +#endif + + /* 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) +#define DL_DEBUG_SYMBOLS (1 << 3) +#define DL_DEBUG_VERSIONS (1 << 4) +#define DL_DEBUG_RELOC (1 << 5) +#define DL_DEBUG_FILES (1 << 6) +#define DL_DEBUG_STATISTICS (1 << 7) +/* These two are used only internally. */ +#define DL_DEBUG_HELP (1 << 8) +#define DL_DEBUG_PRELINK (1 << 9) + + /* Cached value of `getpagesize ()'. */ + EXTERN size_t _dl_pagesize; + + /* OS version. */ + EXTERN unsigned int _dl_osversion; + /* Platform name. */ + EXTERN const char *_dl_platform; + EXTERN size_t _dl_platformlen; + + /* CLK_TCK as reported by the kernel. */ + EXTERN int _dl_clktck; + + /* 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; + + /* Expected cache ID. */ + EXTERN int _dl_correct_cache_id; + + /* 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; + + /* -1 if the dynamic linker should honor library load bias, + 0 if not, -2 use the default (honor biases for normal + binaries, don't honor for PIEs). */ + EXTERN ElfW(Addr) _dl_use_load_bias; + + /* Name of the shared object to be profiled (if any). */ + EXTERN const char *_dl_profile; + /* Filename of the output file. */ + EXTERN const char *_dl_profile_output; + /* Name of the object we want to trace the prelinking. */ + EXTERN const char *_dl_trace_prelink; + /* Map of shared object to be prelink traced. */ + EXTERN struct link_map *_dl_trace_prelink_map; + +#ifdef NEED_DL_SYSINFO + /* Syscall handling improvements. This is very specific to x86. */ + EXTERN uintptr_t _dl_sysinfo; + + /* The vsyscall page is a virtual DSO pre-mapped by the kernel. + This points to its ELF header. */ + EXTERN const ElfW(Ehdr) *_dl_sysinfo_dso; +#endif + +#ifdef SHARED +}; +# define __rtld_global_attribute__ +# ifdef IS_IN_rtld +extern struct rtld_global_ro _rtld_local_ro + attribute_relro __rtld_local_attribute__; +# endif +extern struct rtld_global_ro _rtld_global_ro + attribute_relro __rtld_global_attribute__; +#endif #undef EXTERN #ifdef IS_IN_rtld |