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]

[PATCH] A little do-rel.h fix


Hi!

When map == &_dl_rtld_map, r will still point to the first RELATIVE reloc as
the elf_machine_rel_relative loop was skipped, which means all the RELATIVE
relocs will be done by elf_machine_rel even when we know they are already
ok (second part of the patch).
The first one is only if you think it is a good idea to put it in now
(otherwise I'll keep it in my prelink patchset where it is obvisously very
useful e.g. for dlopening prelinked libs).

2001-08-24  Jakub Jelinek  <jakub@redhat.com>

	* elf/do-rel.h (elf_dynamic_do_rel): If l_addr is 0, skip relative
	records.  Set r unconditionally to first non-relative record.

--- libc/elf/do-rel.h.jj	Fri Aug 24 18:15:24 2001
+++ libc/elf/do-rel.h	Fri Aug 24 18:18:23 2001
@@ -70,11 +70,13 @@ elf_dynamic_do_rel (struct link_map *map
 	 _dl_rtld_map, which is incompatible with a weak decl in the same
 	 file.  */
       weak_extern (_dl_rtld_map);
-      if (map != &_dl_rtld_map) /* Already done in rtld itself.  */
+      if (map != &_dl_rtld_map /* Already done in rtld itself.  */
+	  && l_addr)
 #endif
 	for (; r < endrel; ++r)
 	  elf_machine_rel_relative (l_addr, r,
 				    (void *) (l_addr + r->r_offset));
+      r = endrel;
 
       if (map->l_info[VERSYMIDX (DT_VERSYM)])
 	{

	Jakub


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