This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix prelink support on IA-32 and ARM


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 at redhat dot 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]