diff options
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/include/ldso.h | 1 | ||||
-rw-r--r-- | ldso/ldso/dl-elf.c | 23 | ||||
-rw-r--r-- | ldso/ldso/dl-hash.c | 4 | ||||
-rw-r--r-- | ldso/ldso/ldso.c | 8 | ||||
-rw-r--r-- | ldso/libdl/libdl.c | 5 |
5 files changed, 20 insertions, 21 deletions
diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h index b415a5024..e3bc197ae 100644 --- a/ldso/include/ldso.h +++ b/ldso/include/ldso.h @@ -18,7 +18,6 @@ #endif /* Pull in compiler and arch stuff */ -#include <stdlib.h> #include <stdarg.h> /* Pull in the arch specific type information */ #include <sys/types.h> diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index 7f0f76c35..1abfff157 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -31,7 +31,6 @@ #include "ldso.h" -void *(*_dl_malloc_function) (size_t size) = NULL; #ifdef USE_CACHE @@ -406,7 +405,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, tpnt = _dl_check_hashed_files(libname); if (tpnt) { if (*rpnt) { - (*rpnt)->next = (struct dyn_elf *) _dl_malloc_function(sizeof(struct dyn_elf)); + (*rpnt)->next = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf)); _dl_memset((*rpnt)->next, 0, sizeof(struct dyn_elf)); (*rpnt)->next->prev = (*rpnt); *rpnt = (*rpnt)->next; @@ -692,7 +691,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, * Add this object into the symbol chain */ if (*rpnt) { - (*rpnt)->next = (struct dyn_elf *) _dl_malloc_function(sizeof(struct dyn_elf)); + (*rpnt)->next = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf)); _dl_memset((*rpnt)->next, 0, sizeof(struct dyn_elf)); (*rpnt)->next->prev = (*rpnt); *rpnt = (*rpnt)->next; @@ -884,11 +883,12 @@ char *_dl_strdup(const char *string) int len; len = _dl_strlen(string); - retval = _dl_malloc_function(len + 1); + retval = _dl_malloc(len + 1); _dl_strcpy(retval, string); return retval; } +void *(*_dl_malloc_function) (size_t size) = NULL; union __align_type { void *p; @@ -944,20 +944,15 @@ void *_dl_malloc(int size) retval = _dl_malloc_addr; _dl_malloc_addr += size; - /* - * Align memory to 4 byte boundary. Some platforms require this, others - * simply get better performance. - */ - _dl_malloc_addr = (unsigned char *) - (((unsigned long) _dl_malloc_addr + - __alignof__(union __align_type) - 1) - & ~(__alignof__(union __align_type) - 1)); + /* Align memory to 4 byte boundary. Some platforms require this, + * others simply get better performance. */ + _dl_malloc_addr = (unsigned char *) (((unsigned long) _dl_malloc_addr + + __alignof__(union __align_type) - 1) & ~(__alignof__(union __align_type) - 1)); return retval; } void (*_dl_free_function) (void *p) = NULL; -void -_dl_free (void *p) { +void _dl_free (void *p) { if (_dl_free_function) (*_dl_free_function) (p); } diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c index c6d4f1233..251ab6466 100644 --- a/ldso/ldso/dl-hash.c +++ b/ldso/ldso/dl-hash.c @@ -100,13 +100,13 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname, int i; if (!_dl_loaded_modules) { - tpnt = _dl_loaded_modules = (struct elf_resolve *) _dl_malloc_function(sizeof(struct elf_resolve)); + tpnt = _dl_loaded_modules = (struct elf_resolve *) _dl_malloc(sizeof(struct elf_resolve)); _dl_memset(tpnt, 0, sizeof(struct elf_resolve)); } else { tpnt = _dl_loaded_modules; while (tpnt->next) tpnt = tpnt->next; - tpnt->next = (struct elf_resolve *) _dl_malloc_function(sizeof(struct elf_resolve)); + tpnt->next = (struct elf_resolve *) _dl_malloc(sizeof(struct elf_resolve)); _dl_memset(tpnt->next, 0, sizeof(struct elf_resolve)); tpnt->next->prev = tpnt; tpnt = tpnt->next; diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index 1af167985..9b7c7380e 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -191,7 +191,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *app_tpnt _dl_loaded_modules->libtype = elf_executable; _dl_loaded_modules->ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr; _dl_loaded_modules->n_phent = auxvt[AT_PHNUM].a_un.a_val; - _dl_symbol_tables = rpnt = (struct dyn_elf *) _dl_malloc_function(sizeof(struct dyn_elf)); + _dl_symbol_tables = rpnt = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf)); _dl_memset(rpnt, 0, sizeof(struct dyn_elf)); rpnt->dyn = _dl_loaded_modules; app_tpnt->usage_count++; @@ -296,7 +296,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *app_tpnt len1 = _dl_strlen(dl_debug_output); len2 = _dl_strlen(tmp1); - filename = _dl_malloc_function(len1+len2+2); + filename = _dl_malloc(len1+len2+2); if (filename) { @@ -563,12 +563,12 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *app_tpnt tpnt->prev = NULL; } if (rpnt) { - rpnt->next = (struct dyn_elf *) _dl_malloc_function(sizeof(struct dyn_elf)); + rpnt->next = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf)); _dl_memset(rpnt->next, 0, sizeof(struct dyn_elf)); rpnt->next->prev = rpnt; rpnt = rpnt->next; } else { - rpnt = (struct dyn_elf *) _dl_malloc_function(sizeof(struct dyn_elf)); + rpnt = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf)); _dl_memset(rpnt, 0, sizeof(struct dyn_elf)); } rpnt->dyn = tpnt; diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c index d7cbed733..78b92e360 100644 --- a/ldso/libdl/libdl.c +++ b/ldso/libdl/libdl.c @@ -55,6 +55,8 @@ extern struct r_debug *_dl_debug_addr __attribute__ ((__weak__)); extern unsigned long _dl_error_number __attribute__ ((__weak__)); extern void *(*_dl_malloc_function)(size_t) __attribute__ ((__weak__)); extern void (*_dl_free_function) (void *p) __attribute__ ((__weak__)); +extern void *(*malloc)(size_t size) __attribute__ ((__weak__)); +extern void (*free)(void *ptr) __attribute__ ((__weak__)); #ifdef USE_CACHE int _dl_map_cache(void) __attribute__ ((__weak__)); int _dl_unmap_cache(void) __attribute__ ((__weak__)); @@ -103,6 +105,9 @@ int _dl_fixup(struct dyn_elf *rpnt, int lazy); #define _dl_trace_loaded_objects 0 #include "../ldso/dl-elf.c" #endif +void *(*malloc)(size_t size) __attribute__ ((__weak__)); +void (*free)(void *ptr) __attribute__ ((__weak__)); +extern int atexit(void (*function)(void)); static int do_dlclose(void *, int need_fini); |