|
|
|
@ -248,15 +248,14 @@ struct audit_ifaces |
|
|
|
|
|
|
|
/* Test whether given NAME matches any of the names of the given object. */ |
|
|
|
extern int _dl_name_match_p (const char *__name, const struct link_map *__map) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Compute next higher prime number. */ |
|
|
|
extern unsigned long int _dl_higher_prime_number (unsigned long int n) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* A stripped down strtoul-like implementation. */ |
|
|
|
uint64_t internal_function _dl_strtoul (const char *, char **) |
|
|
|
internal_function attribute_hidden; |
|
|
|
uint64_t _dl_strtoul (const char *, char **) attribute_hidden; |
|
|
|
|
|
|
|
/* Function used as argument for `_dl_receive_error' function. The
|
|
|
|
arguments are the error code, error string, and the objname the |
|
|
|
@ -586,13 +585,10 @@ struct rtld_global_ro |
|
|
|
void (*_dl_debug_printf) (const char *, ...) |
|
|
|
__attribute__ ((__format__ (__printf__, 1, 2))); |
|
|
|
void (*_dl_mcount) (ElfW(Addr) frompc, ElfW(Addr) selfpc); |
|
|
|
lookup_t (internal_function *_dl_lookup_symbol_x) (const char *, |
|
|
|
struct link_map *, |
|
|
|
const ElfW(Sym) **, |
|
|
|
struct r_scope_elem *[], |
|
|
|
const struct r_found_version *, |
|
|
|
int, int, |
|
|
|
struct link_map *); |
|
|
|
lookup_t (*_dl_lookup_symbol_x) (const char *, struct link_map *, |
|
|
|
const ElfW(Sym) **, struct r_scope_elem *[], |
|
|
|
const struct r_found_version *, int, int, |
|
|
|
struct link_map *); |
|
|
|
int (*_dl_check_caller) (const void *, enum allowmask); |
|
|
|
void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen, |
|
|
|
Lmid_t nsid, int argc, char *argv[], char *env[]); |
|
|
|
@ -851,8 +847,7 @@ libc_hidden_proto (_dl_catch_exception) |
|
|
|
extern struct link_map *_dl_map_object (struct link_map *loader, |
|
|
|
const char *name, |
|
|
|
int type, int trace_mode, int mode, |
|
|
|
Lmid_t nsid) |
|
|
|
internal_function attribute_hidden; |
|
|
|
Lmid_t nsid) attribute_hidden; |
|
|
|
|
|
|
|
/* Call _dl_map_object on the dependencies of MAP, and set up
|
|
|
|
MAP->l_searchlist. PRELOADS points to a vector of NPRELOADS previously |
|
|
|
@ -862,11 +857,10 @@ extern void _dl_map_object_deps (struct link_map *map, |
|
|
|
struct link_map **preloads, |
|
|
|
unsigned int npreloads, int trace_mode, |
|
|
|
int open_mode) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Cache the locations of MAP's hash table. */ |
|
|
|
extern void _dl_setup_hash (struct link_map *map) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_setup_hash (struct link_map *map) attribute_hidden; |
|
|
|
|
|
|
|
|
|
|
|
/* Collect the directories in the search path for LOADER's dependencies.
|
|
|
|
@ -875,8 +869,7 @@ extern void _dl_setup_hash (struct link_map *map) |
|
|
|
by a previous call with COUNTING set, and SI must point to SI->dls_size |
|
|
|
bytes to be used in filling in the result. */ |
|
|
|
extern void _dl_rtld_di_serinfo (struct link_map *loader, |
|
|
|
Dl_serinfo *si, bool counting) |
|
|
|
internal_function; |
|
|
|
Dl_serinfo *si, bool counting); |
|
|
|
|
|
|
|
|
|
|
|
/* Search loaded objects' symbol tables for a definition of the symbol
|
|
|
|
@ -907,22 +900,18 @@ extern lookup_t _dl_lookup_symbol_x (const char *undef, |
|
|
|
const struct r_found_version *version, |
|
|
|
int type_class, int flags, |
|
|
|
struct link_map *skip_map) |
|
|
|
internal_function attribute_hidden; |
|
|
|
|
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Look up symbol NAME in MAP's scope and return its run-time address. */ |
|
|
|
extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name) |
|
|
|
internal_function; |
|
|
|
|
|
|
|
/* Add the new link_map NEW to the end of the namespace list. */ |
|
|
|
extern void _dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Allocate a `struct link_map' for a new object being loaded. */ |
|
|
|
extern struct link_map *_dl_new_object (char *realname, const char *libname, |
|
|
|
int type, struct link_map *loader, |
|
|
|
int mode, Lmid_t nsid) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Relocate the given object (if it hasn't already been).
|
|
|
|
SCOPE is passed to _dl_lookup_symbol in symbol lookups. |
|
|
|
@ -933,15 +922,14 @@ extern void _dl_relocate_object (struct link_map *map, |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Protect PT_GNU_RELRO area. */ |
|
|
|
extern void _dl_protect_relro (struct link_map *map) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_protect_relro (struct link_map *map) attribute_hidden; |
|
|
|
|
|
|
|
/* Call _dl_signal_error with a message about an unhandled reloc type.
|
|
|
|
TYPE is the result of ELFW(R_TYPE) (r_info), i.e. an R_<CPU>_* value. |
|
|
|
PLT is nonzero if this was a PLT reloc; it just affects the message. */ |
|
|
|
extern void _dl_reloc_bad_type (struct link_map *map, |
|
|
|
unsigned int type, int plt) |
|
|
|
internal_function attribute_hidden __attribute__ ((__noreturn__)); |
|
|
|
attribute_hidden __attribute__ ((__noreturn__)); |
|
|
|
|
|
|
|
/* Resolve conflicts if prelinking. */ |
|
|
|
extern void _dl_resolve_conflicts (struct link_map *l, |
|
|
|
@ -952,14 +940,12 @@ extern void _dl_resolve_conflicts (struct link_map *l, |
|
|
|
/* Check the version dependencies of all objects available through
|
|
|
|
MAP. If VERBOSE print some more diagnostics. */ |
|
|
|
extern int _dl_check_all_versions (struct link_map *map, int verbose, |
|
|
|
int trace_mode) |
|
|
|
internal_function attribute_hidden; |
|
|
|
int trace_mode) attribute_hidden; |
|
|
|
|
|
|
|
/* Check the version dependencies for MAP. If VERBOSE print some more
|
|
|
|
diagnostics. */ |
|
|
|
extern int _dl_check_map_versions (struct link_map *map, int verbose, |
|
|
|
int trace_mode) |
|
|
|
internal_function attribute_hidden; |
|
|
|
int trace_mode) attribute_hidden; |
|
|
|
|
|
|
|
/* Initialize the object in SCOPE by calling the constructors with
|
|
|
|
ARGC, ARGV, and ENV as the parameters. */ |
|
|
|
@ -972,8 +958,7 @@ extern void _dl_fini (void); |
|
|
|
|
|
|
|
/* Sort array MAPS according to dependencies of the contained objects. */ |
|
|
|
extern void _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, |
|
|
|
Lmid_t ns) |
|
|
|
internal_function attribute_hidden; |
|
|
|
Lmid_t ns) attribute_hidden; |
|
|
|
|
|
|
|
/* The dynamic linker calls this function before and having changing
|
|
|
|
any shared object mappings. The `r_state' member of `struct r_debug' |
|
|
|
@ -986,15 +971,14 @@ rtld_hidden_proto (_dl_debug_state) |
|
|
|
argument is the run-time load address of the dynamic linker, to be put |
|
|
|
in the `r_ldbase' member. Returns the address of the structure. */ |
|
|
|
extern struct r_debug *_dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Initialize the basic data structure for the search paths. */ |
|
|
|
extern void _dl_init_paths (const char *library_path) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_init_paths (const char *library_path) attribute_hidden; |
|
|
|
|
|
|
|
/* Gather the information needed to install the profiling tables and start
|
|
|
|
the timers. */ |
|
|
|
extern void _dl_start_profile (void) internal_function attribute_hidden; |
|
|
|
extern void _dl_start_profile (void) attribute_hidden; |
|
|
|
|
|
|
|
/* The actual functions used to keep book on the calls. */ |
|
|
|
extern void _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc); |
|
|
|
@ -1006,25 +990,22 @@ rtld_hidden_proto (_dl_mcount) |
|
|
|
extern void _dl_mcount_wrapper (void *selfpc); |
|
|
|
|
|
|
|
/* Show the members of the auxiliary array passed up from the kernel. */ |
|
|
|
extern void _dl_show_auxv (void) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_show_auxv (void) attribute_hidden; |
|
|
|
|
|
|
|
/* Return all environment variables starting with `LD_', one after the
|
|
|
|
other. */ |
|
|
|
extern char *_dl_next_ld_env_entry (char ***position) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern char *_dl_next_ld_env_entry (char ***position) attribute_hidden; |
|
|
|
|
|
|
|
/* Return an array with the names of the important hardware capabilities. */ |
|
|
|
extern const struct r_strlenpair *_dl_important_hwcaps (const char *platform, |
|
|
|
size_t paltform_len, |
|
|
|
size_t *sz, |
|
|
|
size_t *max_capstrlen) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Look up NAME in ld.so.cache and return the file name stored there,
|
|
|
|
or null if none is found. Caller must free returned string. */ |
|
|
|
extern char *_dl_load_cache_lookup (const char *name) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern char *_dl_load_cache_lookup (const char *name) attribute_hidden; |
|
|
|
|
|
|
|
/* If the system does not support MAP_COPY we cannot leave the file open
|
|
|
|
all the time since this would create problems when the file is replaced. |
|
|
|
@ -1036,8 +1017,7 @@ extern void _dl_unload_cache (void) attribute_hidden; |
|
|
|
most convenient manner available. *SIZEP gets the size of the |
|
|
|
file. On error MAP_FAILED is returned. */ |
|
|
|
extern void *_dl_sysdep_read_whole_file (const char *file, size_t *sizep, |
|
|
|
int prot) |
|
|
|
internal_function attribute_hidden; |
|
|
|
int prot) attribute_hidden; |
|
|
|
|
|
|
|
/* System-specific function to do initial startup for the dynamic linker.
|
|
|
|
After this, file access calls and getenv must work. This is responsible |
|
|
|
@ -1050,18 +1030,17 @@ extern ElfW(Addr) _dl_sysdep_start (void **start_argptr, |
|
|
|
ElfW(auxv_t) *auxv)) |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
extern void _dl_sysdep_start_cleanup (void) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_sysdep_start_cleanup (void) attribute_hidden; |
|
|
|
|
|
|
|
|
|
|
|
/* Determine next available module ID. */ |
|
|
|
extern size_t _dl_next_tls_modid (void) internal_function attribute_hidden; |
|
|
|
extern size_t _dl_next_tls_modid (void) attribute_hidden; |
|
|
|
|
|
|
|
/* Count the modules with TLS segments. */ |
|
|
|
extern size_t _dl_count_modids (void) internal_function attribute_hidden; |
|
|
|
extern size_t _dl_count_modids (void) attribute_hidden; |
|
|
|
|
|
|
|
/* Calculate offset of the TLS blocks in the static TLS block. */ |
|
|
|
extern void _dl_determine_tlsoffset (void) internal_function attribute_hidden; |
|
|
|
extern void _dl_determine_tlsoffset (void) attribute_hidden; |
|
|
|
|
|
|
|
#ifndef SHARED |
|
|
|
/* Set up the TCB for statically linked applications. This is called
|
|
|
|
@ -1079,16 +1058,13 @@ extern void *_dl_allocate_tls (void *mem); |
|
|
|
rtld_hidden_proto (_dl_allocate_tls) |
|
|
|
|
|
|
|
/* Get size and alignment requirements of the static TLS block. */ |
|
|
|
extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp) |
|
|
|
internal_function; |
|
|
|
extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp); |
|
|
|
|
|
|
|
extern void _dl_allocate_static_tls (struct link_map *map) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void _dl_allocate_static_tls (struct link_map *map) attribute_hidden; |
|
|
|
|
|
|
|
/* These are internal entry points to the two halves of _dl_allocate_tls,
|
|
|
|
only used within rtld.c itself at startup time. */ |
|
|
|
extern void *_dl_allocate_tls_storage (void) |
|
|
|
internal_function attribute_hidden; |
|
|
|
extern void *_dl_allocate_tls_storage (void) attribute_hidden; |
|
|
|
extern void *_dl_allocate_tls_init (void *); |
|
|
|
rtld_hidden_proto (_dl_allocate_tls_init) |
|
|
|
|
|
|
|
@ -1137,7 +1113,7 @@ extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid) |
|
|
|
extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden; |
|
|
|
|
|
|
|
extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr) |
|
|
|
internal_function attribute_hidden; |
|
|
|
attribute_hidden; |
|
|
|
|
|
|
|
/* Show show of an object. */ |
|
|
|
extern void _dl_show_scope (struct link_map *new, int from) |
|
|
|
@ -1147,10 +1123,10 @@ extern struct link_map *_dl_find_dso_for_object (const ElfW(Addr) addr); |
|
|
|
rtld_hidden_proto (_dl_find_dso_for_object) |
|
|
|
|
|
|
|
/* Initialization which is normally done by the dynamic linker. */ |
|
|
|
extern void _dl_non_dynamic_init (void) internal_function; |
|
|
|
extern void _dl_non_dynamic_init (void); |
|
|
|
|
|
|
|
/* Used by static binaries to check the auxiliary vector. */ |
|
|
|
extern void _dl_aux_init (ElfW(auxv_t) *av) internal_function; |
|
|
|
extern void _dl_aux_init (ElfW(auxv_t) *av); |
|
|
|
|
|
|
|
|
|
|
|
__END_DECLS |
|
|
|
|