summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldso/include/ldso.h1
-rw-r--r--ldso/ldso/dl-elf.c23
-rw-r--r--ldso/ldso/dl-hash.c4
-rw-r--r--ldso/ldso/ldso.c8
-rw-r--r--ldso/libdl/libdl.c5
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);