mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 19:30:10 +00:00
Revert "[AArch64][BZ #17711] Fix extern protected data handling"
This reverts commit 0910702c4d
.
Say both a.so and b.so define protected data symbol `var` and the executable
copy relocates var. ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA has strange
semantics: a.so accesses the copy in the executable while b.so accesses its
own. This behavior requires that (a) the compiler emits GOT-generating
relocations (b) the linker produces GLOB_DAT instead of RELATIVE.
Without the ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA code, b.so's GLOB_DAT
will bind to the executable (normal behavior).
For aarch64 it makes sense to restore the original behavior and don't
pay the ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA cost. The behavior is very
unlikely used by anyone.
* Clang code generator treats STV_PROTECTED the same way as STV_HIDDEN:
no GOT-generating relocation in the first place.
* gold and lld reject copy relocation on a STV_PROTECTED symbol.
* Nowadays -fpie/-fpic modes are popular. GCC/Clang's codegen uses
GOT-generating relocation when accessing an default visibility
external symbol which avoids copy relocation.
Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
This commit is contained in:
parent
a8b11bd1f8
commit
e555954e02
@ -109,13 +109,12 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[],
|
||||
#define RTLD_START asm (".globl _dl_start");
|
||||
|
||||
#define elf_machine_type_class(type) \
|
||||
((((type) == AARCH64_R(JUMP_SLOT) \
|
||||
|| (type) == AARCH64_R(TLS_DTPMOD) \
|
||||
|| (type) == AARCH64_R(TLS_DTPREL) \
|
||||
|| (type) == AARCH64_R(TLS_TPREL) \
|
||||
|| (type) == AARCH64_R(TLSDESC)) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == AARCH64_R(COPY)) * ELF_RTYPE_CLASS_COPY) \
|
||||
| (((type) == AARCH64_R(GLOB_DAT)) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
|
||||
((((type) == R_AARCH64_JUMP_SLOT || \
|
||||
(type) == R_AARCH64_TLS_DTPMOD || \
|
||||
(type) == R_AARCH64_TLS_DTPREL || \
|
||||
(type) == R_AARCH64_TLS_TPREL || \
|
||||
(type) == R_AARCH64_TLSDESC) * ELF_RTYPE_CLASS_PLT) \
|
||||
| (((type) == R_AARCH64_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||
|
||||
#define ELF_MACHINE_JMP_SLOT AARCH64_R(JUMP_SLOT)
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
/* Copyright (C) 2002-2022 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include_next <dl-sysdep.h>
|
||||
|
||||
#define DL_EXTERN_PROTECTED_DATA
|
Loading…
Reference in New Issue
Block a user