summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldso/ldso/ldso.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
index fa1be0755..11e8817c7 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
@@ -387,6 +387,9 @@ LD_BOOT(unsigned long args)
/* 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__
+ SEND_STDERR("scanning DYNAMIC section\n");
+#endif
while (dpnt->d_tag) {
#if defined(__mips__)
if (dpnt->d_tag == DT_MIPS_GOTSYM)
@@ -430,12 +433,13 @@ LD_BOOT(unsigned long args)
continue;
}
app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val;
- if (dpnt->d_tag == DT_DEBUG)
+ if (dpnt->d_tag == DT_DEBUG) {
#ifdef FORCE_SHAREABLE_TEXT_SEGMENTS
dpnt->d_un.d_val = (unsigned long) debug_addr;
#else
dpnt_debug = dpnt;
#endif
+ }
if (dpnt->d_tag == DT_TEXTREL)
app_tpnt->dynamic_info[DT_TEXTREL] = 1;
dpnt++;
@@ -443,6 +447,10 @@ LD_BOOT(unsigned long args)
}
}
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("done scanning DYNAMIC section\n");
+#endif
+
/* Get some more of the information that we will need to dynamicly link
this module to itself */
@@ -452,6 +460,10 @@ LD_BOOT(unsigned long args)
tpnt->elf_buckets = hash_addr;
hash_addr += tpnt->nbucket;
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("done grabbing link information\n");
+#endif
+
#ifndef FORCE_SHAREABLE_TEXT_SEGMENTS
/* Ugly, ugly. We need to call mprotect to change the protection of
the text pages so that we can do the dynamic linking. We can set the
@@ -461,6 +473,10 @@ LD_BOOT(unsigned long args)
elf_phdr *ppnt;
int i;
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("calling mprotect on the shared library/dynamic linker\n");
+#endif
+
/* First cover the shared library/dynamic linker. */
if (tpnt->dynamic_info[DT_TEXTREL]) {
header = (elfhdr *) auxvt[AT_BASE].a_un.a_ptr;
@@ -475,6 +491,9 @@ LD_BOOT(unsigned long args)
}
}
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("calling mprotect on the application program\n");
+#endif
/* Now cover the application program. */
if (app_tpnt->dynamic_info[DT_TEXTREL]) {
ppnt = (elf_phdr *) auxvt[AT_PHDR].a_un.a_ptr;
@@ -487,26 +506,27 @@ LD_BOOT(unsigned long args)
}
}
}
-
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("About to store the debug structure address\n");
+#endif
/* Now we can store the debug structure address */
if (dpnt_debug != NULL) {
dpnt_debug->d_un.d_val = (unsigned long) debug_addr;
}
#endif
-
-
+
#if defined(__mips__)
- /*
- * For MIPS we have to do stuff to the GOT before we do relocations.
- */
+#ifdef __SUPPORT_LD_DEBUG_EARLY__
+ SEND_STDERR("About to do MIPS specific GOT bootstrap\n");
+#endif
+ /* For MIPS we have to do stuff to the GOT before we do relocations. */
PERFORM_BOOTSTRAP_GOT(got);
#endif
-
/* OK, now do the relocations. We do not do a lazy binding here, so
that once we are done, we have considerably more flexibility. */
#ifdef __SUPPORT_LD_DEBUG_EARLY__
- SEND_STDERR("About to do library loader relocations.\n");
+ SEND_STDERR("About to do library loader relocations\n");
#endif
goof = 0;