Browse Source

Move "debug_addr" ptr from dl-startup.c to ldso.c

Joakim Tjernlund 21 năm trước cách đây
mục cha
commit
86eecc5c40
3 tập tin đã thay đổi với 9 bổ sung11 xóa
  1. 1 1
      ldso/include/ldso.h
  2. 1 8
      ldso/ldso/dl-startup.c
  3. 7 2
      ldso/ldso/ldso.c

+ 1 - 1
ldso/include/ldso.h

@@ -68,7 +68,7 @@ extern char *_dl_strdup(const char *string);
 extern void _dl_dprintf(int, const char *, ...);
 
 extern void _dl_get_ready_to_run(struct elf_resolve *tpnt, unsigned long load_addr,
-		Elf32_auxv_t auxvt[AT_EGID + 1], char **envp, struct r_debug *debug_addr,
+		Elf32_auxv_t auxvt[AT_EGID + 1], char **envp,
 		unsigned char *malloc_buffer, unsigned char *mmap_zero, char **argv);
 
 

+ 1 - 8
ldso/ldso/dl-startup.c

@@ -130,7 +130,6 @@ DL_BOOT(unsigned long args)
 	Elf32_auxv_t auxvt[AT_EGID + 1];
 	unsigned char *malloc_buffer, *mmap_zero;
 	Elf32_Dyn *dpnt;
-	struct r_debug *debug_addr = NULL;
 	size_t pagesize;
 	int indx;
 #if defined(__i386__)
@@ -299,12 +298,6 @@ found_got:
 	tpnt = LD_MALLOC(sizeof(struct elf_resolve));
 	_dl_memset(tpnt, 0, sizeof(struct elf_resolve));
 
-	/*
-	 * This is used by gdb to locate the chain of shared libraries that are currently loaded.
-	 */
-	debug_addr = LD_MALLOC(sizeof(struct r_debug));
-	_dl_memset(debug_addr, 0, sizeof(struct r_debug));
-
 	/* OK, that was easy.  Next scan the DYNAMIC section of the image.
 	   We are only doing ourself right now - we will have to do the rest later */
 #ifdef __SUPPORT_LD_DEBUG_EARLY__
@@ -433,7 +426,7 @@ found_got:
 	   fixed up by now.  Still no function calls outside of this library ,
 	   since the dynamic resolver is not yet ready. */
 	_dl_get_ready_to_run(tpnt, load_addr, auxvt, envp,
-			     debug_addr, malloc_buffer, mmap_zero, argv);
+			     malloc_buffer, mmap_zero, argv);
 
 
 	/* Transfer control to the application.  */

+ 7 - 2
ldso/ldso/ldso.c

@@ -85,7 +85,7 @@ static void debug_fini (int status, void *arg)
 #endif
 
 void _dl_get_ready_to_run(struct elf_resolve *tpnt, unsigned long load_addr,
-		Elf32_auxv_t auxvt[AT_EGID + 1], char **envp, struct r_debug *debug_addr,
+		Elf32_auxv_t auxvt[AT_EGID + 1], char **envp,
 		unsigned char *malloc_buffer, unsigned char *mmap_zero, char **argv)
 {
 	ElfW(Phdr) *ppnt;
@@ -97,6 +97,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, unsigned long load_addr,
 	struct elf_resolve *tpnt1;
 	struct elf_resolve app_tpnt_tmp;
 	struct elf_resolve *app_tpnt = &app_tpnt_tmp;
+	struct r_debug *debug_addr;
 	unsigned long brk_addr, *lpnt;
 	int (*_dl_atexit) (void *);
 #if defined (__SUPPORT_LD_DEBUG__)
@@ -173,7 +174,11 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, unsigned long load_addr,
 		}
 #endif
 	}
-
+	/*
+	 * This is used by gdb to locate the chain of shared libraries that are currently loaded.
+	 */
+	debug_addr = _dl_malloc(sizeof(struct r_debug));
+	_dl_memset(debug_addr, 0, sizeof(struct r_debug));
 
 	ppnt = (ElfW(Phdr) *) auxvt[AT_PHDR].a_un.a_ptr;
 	for (i = 0; i < auxvt[AT_PHNUM].a_un.a_val; i++, ppnt++) {