From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7814) id 0F86A3858C51; Mon, 23 May 2022 20:37:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0F86A3858C51 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Fangrui Song To: glibc-cvs@sourceware.org Subject: [glibc] Revert "[AArch64][BZ #17711] Fix extern protected data handling" X-Act-Checkin: glibc X-Git-Author: Fangrui Song X-Git-Refname: refs/heads/master X-Git-Oldrev: a8b11bd1f8dc68795b377138b5d94638ef75a50d X-Git-Newrev: e555954e026df1b85b8ef6c101d05f97b1520d7e Message-Id: <20220523203707.0F86A3858C51@sourceware.org> Date: Mon, 23 May 2022 20:37:07 +0000 (GMT) X-BeenThere: glibc-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Glibc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 May 2022 20:37:07 -0000 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e555954e026df1b85b8ef6c101d05f97b1520d7e commit e555954e026df1b85b8ef6c101d05f97b1520d7e Author: Fangrui Song Date: Mon May 23 13:37:05 2022 -0700 Revert "[AArch64][BZ #17711] Fix extern protected data handling" This reverts commit 0910702c4d2cf9e8302b35c9519548726e1ac489. 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 Diff: --- sysdeps/aarch64/dl-machine.h | 13 ++++++------- sysdeps/aarch64/dl-sysdep.h | 21 --------------------- 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h index fe120bb507..292abe5152 100644 --- a/sysdeps/aarch64/dl-machine.h +++ b/sysdeps/aarch64/dl-machine.h @@ -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) diff --git a/sysdeps/aarch64/dl-sysdep.h b/sysdeps/aarch64/dl-sysdep.h deleted file mode 100644 index 1516dd7d3f..0000000000 --- a/sysdeps/aarch64/dl-sysdep.h +++ /dev/null @@ -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 - . */ - -#include_next - -#define DL_EXTERN_PROTECTED_DATA