[PATCH] Fix prelink support on IA-32 and ARM
Jakub Jelinek
jakub@redhat.com
Sun Apr 6 18:50:00 GMT 2003
Hi!
IA-32 and ARM define ELF_MACHINE_NO_RELA if RTLD_BOOTSTRAP (because ld.so
on those arches really never needs to handle RELA relocations), so the
2003-03-14 change means that although prelinking could be used, ld.so would
do the relocation processing on IA-32 and ARM anyway.
2003-04-06 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c: Revert 2003-03-14 change.
* elf/dl-conflict.c (_dl_resolve_conflicts): Move
#if ! ELF_MACHINE_NO_RELA conditional into the routine.
--- libc/elf/rtld.c.jj 2003-03-20 05:58:48.000000000 -0500
+++ libc/elf/rtld.c 2003-04-06 14:45:41.000000000 -0400
@@ -1444,7 +1444,6 @@ cannot allocate TLS data structures for
_dl_printf ("\nprelink checking: %s\n", prelinked ? "ok" : "failed");
}
-#if ! ELF_MACHINE_NO_RELA /* We don't REL-only prelink. */
if (prelinked)
{
struct link_map *l;
@@ -1477,7 +1476,6 @@ cannot allocate TLS data structures for
_dl_sysdep_start_cleanup ();
}
else
-#endif
{
/* Now we have all the objects loaded. Relocate them all except for
the dynamic linker itself. We do this in reverse order so that copy
--- libc/elf/dl-conflict.c.jj 2003-03-20 05:58:48.000000000 -0500
+++ libc/elf/dl-conflict.c 2003-04-06 14:46:12.000000000 -0400
@@ -28,11 +28,11 @@
#include <sys/types.h>
#include "dynamic-link.h"
-#if ! ELF_MACHINE_NO_RELA
void
_dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
ElfW(Rela) *conflictend)
{
+#if ! ELF_MACHINE_NO_RELA
if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_RELOC, 0))
_dl_printf ("\nconflict processing: %s\n",
l->l_name[0] ? l->l_name : rtld_progname);
@@ -64,5 +64,5 @@ _dl_resolve_conflicts (struct link_map *
for (; conflict < conflictend; ++conflict)
elf_machine_rela (l, conflict, NULL, NULL, (void *) conflict->r_offset);
}
-}
#endif
+}
Jakub
More information about the Libc-hacker
mailing list