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] |
Hi! As both alpha and ia64 never use addend when relocating relative relocs (ie. they do M += L) and as prelink -r libc.so.6 saved 15% startup time on IA-32 for programs using solely -lc, I think this patch might be useful for IA-64 and Alpha. BTW: Have you looked at the dl-{s,}brk patch I posted (http://sources.redhat.com/ml/libc-hacker/2002-03/msg00100.html)? 2002-04-03 Jakub Jelinek <jakub@redhat.com> * elf/do-rel.h (elf_dynamic_do_rel): Skip relative relocs if l_addr == 0 and ELF_MACHINE_REL_RELATIVE. * sysdeps/alpha/dl-machine.h (ELF_MACHINE_REL_RELATIVE): Define. * sysdeps/ia64/dl-machine.h (ELF_MACHINE_REL_RELATIVE): Define. --- libc/elf/do-rel.h.jj Mon Feb 4 17:34:51 2002 +++ libc/elf/do-rel.h Wed Apr 3 22:47:19 2002 @@ -83,11 +83,12 @@ elf_dynamic_do_rel (struct link_map *map weak_extern (GL(dl_rtld_map)); # endif if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ -# ifndef DO_RELA +# if !defined DO_RELA || defined ELF_MACHINE_REL_RELATIVE /* Rela platforms get the offset from r_addend and this must be copied in the relocation address. Therefore we can skip the relative relocations only if this is for rel - relocations... */ + relocations or rela relocations if they are computed as + memory_loc += l_addr... */ if (l_addr != 0) # else /* ...or we know the object has been prelinked. */ --- libc/sysdeps/alpha/dl-machine.h.jj Sat Mar 23 11:51:04 2002 +++ libc/sysdeps/alpha/dl-machine.h Wed Apr 3 22:49:24 2002 @@ -577,6 +577,10 @@ elf_machine_rela (struct link_map *map, } } +/* Let do-rel.h know that on Alpha if l_addr is 0, all RELATIVE relocs + can be skipped. */ +#define ELF_MACHINE_REL_RELATIVE 1 + static inline void elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, Elf64_Addr *const reloc_addr) --- libc/sysdeps/ia64/dl-machine.h.jj Sat Mar 23 11:51:45 2002 +++ libc/sysdeps/ia64/dl-machine.h Wed Apr 3 22:50:02 2002 @@ -577,6 +577,10 @@ elf_machine_rela (struct link_map *map, assert (! "unexpected dynamic reloc format"); } +/* Let do-rel.h know that on IA-64 if l_addr is 0, all RELATIVE relocs + can be skipped. */ +#define ELF_MACHINE_REL_RELATIVE 1 + static inline void elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, Elf64_Addr *const reloc_addr) Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |