OSDN Git Service

Sigh. I got things working this morning, then checked stuff in from the wrong
authorEric Andersen <andersen@codepoet.org>
Wed, 14 Jul 2004 23:07:46 +0000 (23:07 -0000)
committerEric Andersen <andersen@codepoet.org>
Wed, 14 Jul 2004 23:07:46 +0000 (23:07 -0000)
tree.  Bad boy, No doughnut.
 -Erik

ldso/include/ldso.h
ldso/ldso/dl-elf.c
ldso/ldso/dl-hash.c
ldso/ldso/ldso.c
ldso/libdl/libdl.c

index b415a50..e3bc197 100644 (file)
@@ -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>
index 7f0f76c..1abfff1 100644 (file)
@@ -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);
 }
index c6d4f12..251ab64 100644 (file)
@@ -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;
index 1af1679..9b7c738 100644 (file)
@@ -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;
index d7cbed7..78b92e3 100644 (file)
@@ -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);