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] |
Hi! If HAVE_Z_COMBRELOC defined means ld.so has been linked with -z combreloc, then I think further optimization is possible, particularly that if HAVE_Z_COMBRELOC is defined, we don't need to check for (map != &_dl_rtld_map), since we know if this was true, such R_*_RELATIVE would not be handled by elf_machine_rel{,a} but elf_machine_rel{,a}_relative. 2001-08-30 Jakub Jelinek <jakub@redhat.com> * sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle R_ALPHA_RELATIVE if RTLD_BOOTSTRAP and HAVE_Z_COMBRELOC. Only check for rtld map if RTLD_BOOTSTRAP nor HAVE_Z_COMBRELOC is defined. * sysdeps/i386/dl-machine.h (elf_machine_rel): Similarly. * sysdeps/ia64/dl-machine.h (elf_machine_rel): Similarly. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rel): Similarly. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rel): Similarly. --- libc/sysdeps/alpha/dl-machine.h.jj Mon Aug 27 12:04:17 2001 +++ libc/sysdeps/alpha/dl-machine.h Thu Aug 30 23:46:09 2001 @@ -468,7 +468,7 @@ elf_machine_rela (struct link_map *map, { unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); -#ifndef RTLD_BOOTSTRAP +#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* This is defined in rtld.c, but nowhere in the static libc.a; make the reference weak so static programs can still link. This declaration cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) @@ -480,12 +480,13 @@ elf_machine_rela (struct link_map *map, /* We cannot use a switch here because we cannot locate the switch jump table until we've self-relocated. */ +#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_ALPHA_RELATIVE, 0)) { -#ifndef RTLD_BOOTSTRAP +# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* Already done in dynamic linker. */ if (map != &_dl_rtld_map) -#endif +# endif { /* XXX Make some timings. Maybe it's preverable to test for unaligned access and only do it the complex way if necessary. */ @@ -500,11 +501,12 @@ elf_machine_rela (struct link_map *map, memcpy (reloc_addr_1, &reloc_addr_val, 8); } } -#ifndef RTLD_BOOTSTRAP +# ifndef RTLD_BOOTSTRAP else if (__builtin_expect (r_type == R_ALPHA_NONE, 0)) return; -#endif +# endif else +#endif { Elf64_Addr loadbase, sym_value; --- libc/sysdeps/i386/dl-machine.h.jj Mon Aug 27 12:04:30 2001 +++ libc/sysdeps/i386/dl-machine.h Thu Aug 30 23:31:53 2001 @@ -308,7 +308,7 @@ elf_machine_rel (struct link_map *map, c #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_386_RELATIVE, 0)) { -# ifndef RTLD_BOOTSTRAP +# if !define RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* This is defined in rtld.c, but nowhere in the static libc.a; make the reference weak so static programs can still link. This declaration cannot be done when compiling rtld.c --- libc/sysdeps/ia64/dl-machine.h.jj Mon Aug 27 12:04:30 2001 +++ libc/sysdeps/ia64/dl-machine.h Thu Aug 30 23:44:26 2001 @@ -508,7 +508,7 @@ elf_machine_rela (struct link_map *map, const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); Elf64_Addr value; -#ifndef RTLD_BOOTSTRAP +#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* This is defined in rtld.c, but nowhere in the static libc.a; make the reference weak so static programs can still link. This declaration cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) @@ -520,22 +520,24 @@ elf_machine_rela (struct link_map *map, /* We cannot use a switch here because we cannot locate the switch jump table until we've self-relocated. */ +#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_REL64LSB), 0)) { assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB); value = *reloc_addr; -#ifndef RTLD_BOOTSTRAP +# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* Already done in dynamic linker. */ if (map != &_dl_rtld_map) -#endif +# endif value += map->l_addr; } -#ifndef RTLD_BOOTSTRAP +# ifndef RTLD_BOOTSTRAP else if (r_type == R_IA64_NONE) return; -#endif +# endif else +#endif { struct link_map *sym_map; --- libc/sysdeps/sparc/sparc32/dl-machine.h.jj Mon Aug 27 12:04:55 2001 +++ libc/sysdeps/sparc/sparc32/dl-machine.h Thu Aug 30 23:35:16 2001 @@ -346,7 +346,7 @@ elf_machine_rela (struct link_map *map, { const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); -#ifndef RTLD_BOOTSTRAP +#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC /* This is defined in rtld.c, but nowhere in the static libc.a; make the reference weak so static programs can still link. This declaration cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) @@ -355,14 +355,16 @@ elf_machine_rela (struct link_map *map, weak_extern (_dl_rtld_map); #endif +#if !define RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_SPARC_RELATIVE, 0)) { -#ifndef RTLD_BOOTSTRAP +# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC if (map != &_dl_rtld_map) /* Already done in rtld itself. */ -#endif +# endif *reloc_addr += map->l_addr + reloc->r_addend; } else +#endif { #ifndef RTLD_BOOTSTRAP const Elf32_Sym *const refsym = sym; --- libc/sysdeps/sparc/sparc64/dl-machine.h.jj Mon Aug 27 12:04:55 2001 +++ libc/sysdeps/sparc/sparc64/dl-machine.h Thu Aug 30 23:38:40 2001 @@ -199,13 +199,15 @@ elf_machine_rela (struct link_map *map, { const unsigned long int r_type = ELF64_R_TYPE_ID (reloc->r_info); +#if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_SPARC_RELATIVE, 0)) *reloc_addr = map->l_addr + reloc->r_addend; -#ifndef RTLD_BOOTSTRAP +# ifndef RTLD_BOOTSTRAP else if (r_type == R_SPARC_NONE) /* Who is Wilbur? */ return; -#endif +# endif else +#endif { #ifndef RTLD_BOOTSTRAP const Elf64_Sym *const refsym = sym; Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |