Browse Source

Scrub up a few things I forgot. Add a few more cleanups.
-Erik

Eric Andersen 23 years ago
parent
commit
bdff18da87
9 changed files with 143 additions and 156 deletions
  1. 0 1
      ldso/ldso/boot1.c
  2. 40 1
      ldso/ldso/hash.h
  3. 0 1
      ldso/ldso/ld-uClibc.c
  4. 40 1
      ldso/ldso/ld_hash.h
  5. 0 1
      ldso/ldso/ldso.c
  6. 0 37
      ldso/ldso/link.h
  7. 1 0
      ldso/libdl/Makefile
  8. 31 57
      ldso/libdl/dlib.c
  9. 31 57
      ldso/libdl/libdl.c

+ 0 - 1
ldso/ldso/boot1.c

@@ -95,7 +95,6 @@
 #include "sysdep.h" /* before elf.h to get ELF_USES_RELOCA right */
 #include <elf.h>
 #include "linuxelf.h"
-#include "link.h"
 #include "hash.h"
 #include "syscall.h"
 #include "string.h"

+ 40 - 1
ldso/ldso/hash.h

@@ -1,4 +1,38 @@
-#include "link.h"
+#ifndef _HASH_H_
+#define _HASH_H_
+
+#include "elf.h"
+
+/* Header file that describes the internal data structures used by the
+ * ELF dynamic linker.  */
+
+struct link_map
+{
+  /* These entries must be in this order to be compatible with the
+   * interface used by gdb to obtain the list of symbols. */
+  unsigned long l_addr;	/* address at which object is mapped */
+  char *l_name;		/* full name of loaded object */
+  Elf32_Dyn *l_ld;	/* dynamic structure of object */
+  struct link_map *l_next;
+  struct link_map *l_prev;
+};
+
+/* The DT_DEBUG entry in the .dynamic section is given the address of
+ * this structure. gdb can pick this up to obtain the correct list of
+ * loaded modules. */
+struct r_debug
+{
+  int r_version;		/* debugging info version no */
+  struct link_map *r_map;	/* address of link_map */
+  unsigned long r_brk;		/* address of update routine */
+  enum
+  {
+    RT_CONSISTENT,
+    RT_ADD,
+    RT_DELETE
+  } r_state;
+  unsigned long r_ldbase;	/* base addr of ld.so */
+};
 
 #ifndef RTLD_NEXT
 #define RTLD_NEXT	((void*)-1)
@@ -94,3 +128,8 @@ static inline int _dl_symbol(char * name)
 #define DL_BAD_HANDLE 9
 #define DL_NO_SYMBOL 10
 
+
+
+#endif /* _HASH_H_ */
+
+

+ 0 - 1
ldso/ldso/ld-uClibc.c

@@ -95,7 +95,6 @@
 #include "sysdep.h" /* before elf.h to get ELF_USES_RELOCA right */
 #include <elf.h>
 #include "linuxelf.h"
-#include "link.h"
 #include "hash.h"
 #include "syscall.h"
 #include "string.h"

+ 40 - 1
ldso/ldso/ld_hash.h

@@ -1,4 +1,38 @@
-#include "link.h"
+#ifndef _HASH_H_
+#define _HASH_H_
+
+#include "elf.h"
+
+/* Header file that describes the internal data structures used by the
+ * ELF dynamic linker.  */
+
+struct link_map
+{
+  /* These entries must be in this order to be compatible with the
+   * interface used by gdb to obtain the list of symbols. */
+  unsigned long l_addr;	/* address at which object is mapped */
+  char *l_name;		/* full name of loaded object */
+  Elf32_Dyn *l_ld;	/* dynamic structure of object */
+  struct link_map *l_next;
+  struct link_map *l_prev;
+};
+
+/* The DT_DEBUG entry in the .dynamic section is given the address of
+ * this structure. gdb can pick this up to obtain the correct list of
+ * loaded modules. */
+struct r_debug
+{
+  int r_version;		/* debugging info version no */
+  struct link_map *r_map;	/* address of link_map */
+  unsigned long r_brk;		/* address of update routine */
+  enum
+  {
+    RT_CONSISTENT,
+    RT_ADD,
+    RT_DELETE
+  } r_state;
+  unsigned long r_ldbase;	/* base addr of ld.so */
+};
 
 #ifndef RTLD_NEXT
 #define RTLD_NEXT	((void*)-1)
@@ -94,3 +128,8 @@ static inline int _dl_symbol(char * name)
 #define DL_BAD_HANDLE 9
 #define DL_NO_SYMBOL 10
 
+
+
+#endif /* _HASH_H_ */
+
+

+ 0 - 1
ldso/ldso/ldso.c

@@ -95,7 +95,6 @@
 #include "sysdep.h" /* before elf.h to get ELF_USES_RELOCA right */
 #include <elf.h>
 #include "linuxelf.h"
-#include "link.h"
 #include "hash.h"
 #include "syscall.h"
 #include "string.h"

+ 0 - 37
ldso/ldso/link.h

@@ -1,37 +0,0 @@
-#ifndef _LINK_H
-#define _LINK_H
-
-#include "elf.h"
-
-/* Header file that describes the internal data structures used by the
- * ELF dynamic linker.  */
-
-struct link_map
-{
-  /* These entries must be in this order to be compatible with the
-   * interface used by gdb to obtain the list of symbols. */
-  unsigned long l_addr;	/* address at which object is mapped */
-  char *l_name;		/* full name of loaded object */
-  Elf32_Dyn *l_ld;	/* dynamic structure of object */
-  struct link_map *l_next;
-  struct link_map *l_prev;
-};
-
-/* The DT_DEBUG entry in the .dynamic section is given the address of
- * this structure. gdb can pick this up to obtain the correct list of
- * loaded modules. */
-struct r_debug
-{
-  int r_version;		/* debugging info version no */
-  struct link_map *r_map;	/* address of link_map */
-  unsigned long r_brk;		/* address of update routine */
-  enum
-  {
-    RT_CONSISTENT,
-    RT_ADD,
-    RT_DELETE
-  } r_state;
-  unsigned long r_ldbase;	/* base addr of ld.so */
-};
-
-#endif /* _LINK_H */

+ 1 - 0
ldso/libdl/Makefile

@@ -43,6 +43,7 @@ ar-target: $(OBJS)
 	#rm -f $(TOPDIR)lib/$(LIBDL)
 	#install -m 644 $(LIBDL) $(TOPDIR)lib
 
+
 $(OBJS): %.o : %.c
 	$(TARGET_CC) -I../d-link -I../d-link/$(TARGET_ARCH) $(TARGET_CFLAGS) -c $< -o $@
 	$(STRIPTOOL) -x -R .note -R .comment $*.o

+ 31 - 57
ldso/libdl/dlib.c

@@ -5,6 +5,7 @@
  */
 
 #include <stdlib.h>
+#include <features.h>
 #include "dlfcn.h"
 #include "sysdep.h"
 #include "syscall.h"
@@ -453,19 +454,11 @@ const char *_dlerror()
 }
 
 /* Generate the correct symbols that we need. */
-#if 1
-#pragma weak dlopen = _dlopen
-#pragma weak dlerror = _dlerror
-#pragma weak dlclose = _dlclose
-#pragma weak dlsym = _dlsym
-#pragma weak dladdr = _dladdr
-#else
-__asm__(".weak dlopen;dlopen=_dlopen");
-__asm__(".weak dlerror;dlerror=_dlerror");
-__asm__(".weak dlclose;dlclose=_dlclose");
-__asm__(".weak dlsym;dlsym=_dlsym");
-__asm__(".weak dladdr;dladdr=_dladdr");
-#endif
+weak_alias(dlopen, _dlopen);
+weak_alias(dlerror, _dlerror);
+weak_alias(dlclose, _dlclose);
+weak_alias(dlsym, _dlsym);
+weak_alias(dladdr, _dladdr);
 
 /* This is a real hack.  We need access to the dynamic linker, but we
 also need to make it possible to link against this library without any
@@ -474,47 +467,28 @@ possible, but at run time the normal symbols are accessed. */
 
 static void foobar()
 {
-	_dl_fdprintf(2, "libdl library not correctly linked\n");
+	_dl_fprintf(2, "libdl library not correctly linked\n");
 	_dl_exit(1);
 }
 
 static int __attribute__ ((unused)) foobar1 = (int) foobar;	/* Use as pointer */
 
-#if 1
-#pragma weak _dl_find_hash = foobar
-#pragma weak _dl_symbol_tables = foobar1
-#pragma weak _dl_handles = foobar1
-#pragma weak _dl_loaded_modules = foobar1
-#pragma weak _dl_debug_addr = foobar1
-#pragma weak _dl_error_number = foobar1
-#pragma weak _dl_load_shared_library = foobar
-#ifdef USE_CACHE
-#pragma weak _dl_map_cache = foobar
-#pragma weak _dl_unmap_cache = foobar
-#endif
-#pragma weak _dl_malloc_function = foobar1
-#pragma weak _dl_parse_relocation_information = foobar
-#pragma weak _dl_parse_lazy_relocation_information = foobar
-#pragma weak _dl_fdprintf = foobar
-#else
-__asm__(".weak _dl_find_hash; _dl_find_hash = foobar");
-__asm__(".weak _dl_symbol_tables; _dl_symbol_tables = foobar1");
-__asm__(".weak _dl_handles; _dl_handles = foobar1");
-__asm__(".weak _dl_loaded_modules; _dl_loaded_modules = foobar1");
-__asm__(".weak _dl_debug_addr; _dl_debug_addr = foobar1");
-__asm__(".weak _dl_error_number; _dl_error_number = foobar1");
-__asm__(".weak _dl_load_shared_library; _dl_load_shared_library = foobar");
+weak_alias(_dl_find_hash, foobar);
+weak_alias(_dl_symbol_tables, foobar1);
+weak_alias(_dl_handles, foobar1);
+weak_alias(_dl_loaded_modules, foobar1);
+weak_alias(_dl_debug_addr, foobar1);
+weak_alias(_dl_error_number, foobar1);
+weak_alias(_dl_load_shared_library, foobar);
 #ifdef USE_CACHE
-__asm__(".weak _dl_map_cache; _dl_map_cache = foobar");
-__asm__(".weak _dl_unmap_cache; _dl_unmap_cache = foobar");
-#endif
-__asm__(".weak _dl_malloc_function; _dl_malloc_function = foobar1");
-__asm__
-	(".weak _dl_parse_relocation_information; _dl_parse_relocation_information = foobar");
-__asm__
-	(".weak _dl_parse_lazy_relocation_information; _dl_parse_lazy_relocation_information = foobar");
-__asm__(".weak _dl_fdprintf; _dl_fdprintf = foobar");
-#endif
+weak_alias(_dl_map_cache, foobar);
+weak_alias(_dl_unmap_cache, foobar);
+#endif	
+weak_alias(_dl_malloc_function, foobar1);
+weak_alias(_dl_parse_relocation_information, foobar);
+weak_alias(_dl_parse_lazy_relocation_information, foobar);
+weak_alias(_dl_fprintf, foobar);
+
 
 /*
  * Dump information to stderrr about the current loaded modules
@@ -526,10 +500,10 @@ void _dlinfo()
 	struct elf_resolve *tpnt;
 	struct dyn_elf *rpnt, *hpnt;
 
-	_dl_fdprintf(2, "List of loaded modules\n");
+	_dl_fprintf(2, "List of loaded modules\n");
 	/* First start with a complete list of all of the loaded files. */
 	for (tpnt = _dl_loaded_modules; tpnt; tpnt = tpnt->next) { 
-		_dl_fdprintf(2, "\t%8.8x %8.8x %8.8x %s %d %s\n", 
+		_dl_fprintf(2, "\t%x %x %x %s %d %s\n", 
 			(unsigned) tpnt->loadaddr, (unsigned) tpnt,
 			(unsigned) tpnt->symbol_scope,
 			type[tpnt->libtype],
@@ -537,15 +511,15 @@ void _dlinfo()
 	}
 
 	/* Next dump the module list for the application itself */
-	_dl_fdprintf(2, "\nModules for application (%x):\n",
+	_dl_fprintf(2, "\nModules for application (%x):\n",
 				 (unsigned) _dl_symbol_tables);
 	for (rpnt = _dl_symbol_tables; rpnt; rpnt = rpnt->next)
-		_dl_fdprintf(2, "\t%8.8x %s\n", (unsigned) rpnt->dyn, rpnt->dyn->libname);
+		_dl_fprintf(2, "\t%x %s\n", (unsigned) rpnt->dyn, rpnt->dyn->libname);
 
 	for (hpnt = _dl_handles; hpnt; hpnt = hpnt->next_handle) {
-		_dl_fdprintf(2, "Modules for handle %x\n", (unsigned) hpnt);
+		_dl_fprintf(2, "Modules for handle %x\n", (unsigned) hpnt);
 		for (rpnt = hpnt; rpnt; rpnt = rpnt->next)
-			_dl_fdprintf(2, "\t%8.8x %s\n", (unsigned) rpnt->dyn, 
+			_dl_fprintf(2, "\t%x %s\n", (unsigned) rpnt->dyn, 
 				rpnt->dyn->libname);
 	}
 }
@@ -565,7 +539,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 	pelf = NULL;
 
 #if 0
-	_dl_fdprintf(2, "dladdr( 0x%p, 0x%p )\n", __address, __dlip);
+	_dl_fprintf(2, "dladdr( 0x%p, 0x%p )\n", __address, __dlip);
 #endif
 
 	for (rpnt = _dl_loaded_modules; rpnt; rpnt = rpnt->next) {
@@ -573,7 +547,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 
 		tpnt = rpnt;
 #if 0
-		_dl_fdprintf(2, "Module \"%s\" at 0x%p\n", 
+		_dl_fprintf(2, "Module \"%s\" at 0x%p\n", 
 			tpnt->libname, tpnt->loadaddr);
 #endif
 		if (tpnt->loadaddr < (char *) __address
@@ -613,7 +587,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 					sf = 1;
 				}
 #if 0
-				_dl_fdprintf(2, "Symbol \"%s\" at 0x%p\n", 
+				_dl_fprintf(2, "Symbol \"%s\" at 0x%p\n", 
 					strtab + symtab[si].st_name, symbol_addr);
 #endif
 			}

+ 31 - 57
ldso/libdl/libdl.c

@@ -5,6 +5,7 @@
  */
 
 #include <stdlib.h>
+#include <features.h>
 #include "dlfcn.h"
 #include "sysdep.h"
 #include "syscall.h"
@@ -453,19 +454,11 @@ const char *_dlerror()
 }
 
 /* Generate the correct symbols that we need. */
-#if 1
-#pragma weak dlopen = _dlopen
-#pragma weak dlerror = _dlerror
-#pragma weak dlclose = _dlclose
-#pragma weak dlsym = _dlsym
-#pragma weak dladdr = _dladdr
-#else
-__asm__(".weak dlopen;dlopen=_dlopen");
-__asm__(".weak dlerror;dlerror=_dlerror");
-__asm__(".weak dlclose;dlclose=_dlclose");
-__asm__(".weak dlsym;dlsym=_dlsym");
-__asm__(".weak dladdr;dladdr=_dladdr");
-#endif
+weak_alias(dlopen, _dlopen);
+weak_alias(dlerror, _dlerror);
+weak_alias(dlclose, _dlclose);
+weak_alias(dlsym, _dlsym);
+weak_alias(dladdr, _dladdr);
 
 /* This is a real hack.  We need access to the dynamic linker, but we
 also need to make it possible to link against this library without any
@@ -474,47 +467,28 @@ possible, but at run time the normal symbols are accessed. */
 
 static void foobar()
 {
-	_dl_fdprintf(2, "libdl library not correctly linked\n");
+	_dl_fprintf(2, "libdl library not correctly linked\n");
 	_dl_exit(1);
 }
 
 static int __attribute__ ((unused)) foobar1 = (int) foobar;	/* Use as pointer */
 
-#if 1
-#pragma weak _dl_find_hash = foobar
-#pragma weak _dl_symbol_tables = foobar1
-#pragma weak _dl_handles = foobar1
-#pragma weak _dl_loaded_modules = foobar1
-#pragma weak _dl_debug_addr = foobar1
-#pragma weak _dl_error_number = foobar1
-#pragma weak _dl_load_shared_library = foobar
-#ifdef USE_CACHE
-#pragma weak _dl_map_cache = foobar
-#pragma weak _dl_unmap_cache = foobar
-#endif
-#pragma weak _dl_malloc_function = foobar1
-#pragma weak _dl_parse_relocation_information = foobar
-#pragma weak _dl_parse_lazy_relocation_information = foobar
-#pragma weak _dl_fdprintf = foobar
-#else
-__asm__(".weak _dl_find_hash; _dl_find_hash = foobar");
-__asm__(".weak _dl_symbol_tables; _dl_symbol_tables = foobar1");
-__asm__(".weak _dl_handles; _dl_handles = foobar1");
-__asm__(".weak _dl_loaded_modules; _dl_loaded_modules = foobar1");
-__asm__(".weak _dl_debug_addr; _dl_debug_addr = foobar1");
-__asm__(".weak _dl_error_number; _dl_error_number = foobar1");
-__asm__(".weak _dl_load_shared_library; _dl_load_shared_library = foobar");
+weak_alias(_dl_find_hash, foobar);
+weak_alias(_dl_symbol_tables, foobar1);
+weak_alias(_dl_handles, foobar1);
+weak_alias(_dl_loaded_modules, foobar1);
+weak_alias(_dl_debug_addr, foobar1);
+weak_alias(_dl_error_number, foobar1);
+weak_alias(_dl_load_shared_library, foobar);
 #ifdef USE_CACHE
-__asm__(".weak _dl_map_cache; _dl_map_cache = foobar");
-__asm__(".weak _dl_unmap_cache; _dl_unmap_cache = foobar");
-#endif
-__asm__(".weak _dl_malloc_function; _dl_malloc_function = foobar1");
-__asm__
-	(".weak _dl_parse_relocation_information; _dl_parse_relocation_information = foobar");
-__asm__
-	(".weak _dl_parse_lazy_relocation_information; _dl_parse_lazy_relocation_information = foobar");
-__asm__(".weak _dl_fdprintf; _dl_fdprintf = foobar");
-#endif
+weak_alias(_dl_map_cache, foobar);
+weak_alias(_dl_unmap_cache, foobar);
+#endif	
+weak_alias(_dl_malloc_function, foobar1);
+weak_alias(_dl_parse_relocation_information, foobar);
+weak_alias(_dl_parse_lazy_relocation_information, foobar);
+weak_alias(_dl_fprintf, foobar);
+
 
 /*
  * Dump information to stderrr about the current loaded modules
@@ -526,10 +500,10 @@ void _dlinfo()
 	struct elf_resolve *tpnt;
 	struct dyn_elf *rpnt, *hpnt;
 
-	_dl_fdprintf(2, "List of loaded modules\n");
+	_dl_fprintf(2, "List of loaded modules\n");
 	/* First start with a complete list of all of the loaded files. */
 	for (tpnt = _dl_loaded_modules; tpnt; tpnt = tpnt->next) { 
-		_dl_fdprintf(2, "\t%8.8x %8.8x %8.8x %s %d %s\n", 
+		_dl_fprintf(2, "\t%x %x %x %s %d %s\n", 
 			(unsigned) tpnt->loadaddr, (unsigned) tpnt,
 			(unsigned) tpnt->symbol_scope,
 			type[tpnt->libtype],
@@ -537,15 +511,15 @@ void _dlinfo()
 	}
 
 	/* Next dump the module list for the application itself */
-	_dl_fdprintf(2, "\nModules for application (%x):\n",
+	_dl_fprintf(2, "\nModules for application (%x):\n",
 				 (unsigned) _dl_symbol_tables);
 	for (rpnt = _dl_symbol_tables; rpnt; rpnt = rpnt->next)
-		_dl_fdprintf(2, "\t%8.8x %s\n", (unsigned) rpnt->dyn, rpnt->dyn->libname);
+		_dl_fprintf(2, "\t%x %s\n", (unsigned) rpnt->dyn, rpnt->dyn->libname);
 
 	for (hpnt = _dl_handles; hpnt; hpnt = hpnt->next_handle) {
-		_dl_fdprintf(2, "Modules for handle %x\n", (unsigned) hpnt);
+		_dl_fprintf(2, "Modules for handle %x\n", (unsigned) hpnt);
 		for (rpnt = hpnt; rpnt; rpnt = rpnt->next)
-			_dl_fdprintf(2, "\t%8.8x %s\n", (unsigned) rpnt->dyn, 
+			_dl_fprintf(2, "\t%x %s\n", (unsigned) rpnt->dyn, 
 				rpnt->dyn->libname);
 	}
 }
@@ -565,7 +539,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 	pelf = NULL;
 
 #if 0
-	_dl_fdprintf(2, "dladdr( 0x%p, 0x%p )\n", __address, __dlip);
+	_dl_fprintf(2, "dladdr( 0x%p, 0x%p )\n", __address, __dlip);
 #endif
 
 	for (rpnt = _dl_loaded_modules; rpnt; rpnt = rpnt->next) {
@@ -573,7 +547,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 
 		tpnt = rpnt;
 #if 0
-		_dl_fdprintf(2, "Module \"%s\" at 0x%p\n", 
+		_dl_fprintf(2, "Module \"%s\" at 0x%p\n", 
 			tpnt->libname, tpnt->loadaddr);
 #endif
 		if (tpnt->loadaddr < (char *) __address
@@ -613,7 +587,7 @@ int _dladdr(void *__address, Dl_info * __dlip)
 					sf = 1;
 				}
 #if 0
-				_dl_fdprintf(2, "Symbol \"%s\" at 0x%p\n", 
+				_dl_fprintf(2, "Symbol \"%s\" at 0x%p\n", 
 					strtab + symtab[si].st_name, symbol_addr);
 #endif
 			}