diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-01-13 17:58:00 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-02-10 09:16:12 -0300 |
commit | 6628c742b2c16e785d3c884d9deeda5adb30ca12 (patch) | |
tree | 493580e40aef171896584e1d3d32bbe14c15140b /sysdeps/powerpc | |
parent | 8c8510ab2790039e58995ef3a22309582413d3ff (diff) | |
download | glibc-6628c742b2c16e785d3c884d9deeda5adb30ca12.tar.gz glibc-6628c742b2c16e785d3c884d9deeda5adb30ca12.tar.xz glibc-6628c742b2c16e785d3c884d9deeda5adb30ca12.zip |
elf: Remove prelink support
Prelinked binaries and libraries still work, the dynamic tags DT_GNU_PRELINKED, DT_GNU_LIBLIST, DT_GNU_CONFLICT just ignored (meaning the process is reallocated as default). The loader environment variable TRACE_PRELINKING is also removed, since it used solely on prelink. Checked on x86_64-linux-gnu, i686-linux-gnu, and aarch64-linux-gnu. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r-- | sysdeps/powerpc/powerpc32/dl-machine.h | 31 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/dl-machine.h | 37 |
2 files changed, 11 insertions, 57 deletions
diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index 70961b4b78..7583b491f9 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -294,7 +294,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], const int r_type = ELF32_R_TYPE (reloc->r_info); struct link_map *sym_map = NULL; -#ifndef RESOLVE_CONFLICT_FIND_MAP if (r_type == R_PPC_RELATIVE) { *reloc_addr = map->l_addr + reloc->r_addend; @@ -318,9 +317,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], value = SYMBOL_ADDRESS (sym_map, sym, true); } value += reloc->r_addend; -#else - value = reloc->r_addend; -#endif if (sym != NULL && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) @@ -341,12 +337,11 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], *reloc_addr = value; break; -#ifndef RESOLVE_CONFLICT_FIND_MAP -# ifdef RTLD_BOOTSTRAP -# define NOT_BOOTSTRAP 0 -# else -# define NOT_BOOTSTRAP 1 -# endif +#ifdef RTLD_BOOTSTRAP +# define NOT_BOOTSTRAP 0 +#else +# define NOT_BOOTSTRAP 1 +#endif case R_PPC_DTPMOD32: if (map->l_info[DT_PPC(OPT)] @@ -361,11 +356,11 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], } else if (sym_map != NULL) { -# ifndef SHARED +#ifndef SHARED CHECK_STATIC_TLS (map, sym_map); -# else +#else if (TRY_STATIC_TLS (map, sym_map)) -# endif +#endif { reloc_addr[0] = 0; /* Set up for local dynamic. */ @@ -395,11 +390,11 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], else if (sym_map != NULL) { /* This reloc is always preceded by R_PPC_DTPMOD32. */ -# ifndef SHARED +#ifndef SHARED assert (HAVE_STATIC_TLS (map, sym_map)); -# else +#else if (HAVE_STATIC_TLS (map, sym_map)) -# endif +#endif { *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); break; @@ -419,12 +414,8 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc); } break; -#endif case R_PPC_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - RESOLVE_CONFLICT_FIND_MAP (map, reloc_addr); -#endif if (map->l_info[DT_PPC(GOT)] != 0) { *reloc_addr = value; diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index a505998351..5da5de7a0a 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -537,36 +537,6 @@ elf_machine_fixup_plt (struct link_map *map, lookup_t sym_map, return finaladdr; } -static inline void __attribute__ ((always_inline)) -elf_machine_plt_conflict (struct link_map *map, lookup_t sym_map, - const ElfW(Sym) *refsym, const ElfW(Sym) *sym, - const Elf64_Rela *reloc, - Elf64_Addr *reloc_addr, Elf64_Addr finaladdr) -{ -#if _CALL_ELF != 2 - Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr; - Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr; - Elf64_FuncDesc zero_fd = {0, 0, 0}; - - if (sym_map == NULL) - finaladdr = 0; - - if (finaladdr == 0) - rel = &zero_fd; - - plt->fd_func = rel->fd_func; - plt->fd_aux = rel->fd_aux; - plt->fd_toc = rel->fd_toc; - PPC_DCBST (&plt->fd_func); - PPC_DCBST (&plt->fd_aux); - PPC_DCBST (&plt->fd_toc); - PPC_SYNC; -#else - finaladdr += ppc64_local_entry_offset (map, sym_map, refsym, sym); - *reloc_addr = finaladdr; -#endif -} - /* Return the final value of a plt relocation. */ static inline Elf64_Addr elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc, @@ -639,7 +609,6 @@ resolve_ifunc (Elf64_Addr value, const struct link_map *map, const struct link_map *sym_map) { #if _CALL_ELF != 2 -#ifndef RESOLVE_CONFLICT_FIND_MAP /* The function we are calling may not yet have its opd entry relocated. */ Elf64_FuncDesc opd; if (map != sym_map @@ -658,7 +627,6 @@ resolve_ifunc (Elf64_Addr value, asm ("" : "=r" (value) : "0" (&opd), "X" (opd)); } #endif -#endif return ((Elf64_Addr (*) (unsigned long int)) value) (GLRO(dl_hwcap)); } @@ -722,13 +690,8 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], value = resolve_ifunc (value, map, sym_map); /* Fall thru */ case R_PPC64_JMP_SLOT: -#ifdef RESOLVE_CONFLICT_FIND_MAP - elf_machine_plt_conflict (map, sym_map, refsym, sym, - reloc, reloc_addr, value); -#else elf_machine_fixup_plt (map, sym_map, refsym, sym, reloc, reloc_addr, value); -#endif return; case R_PPC64_DTPMOD64: |