about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2015-07-24 09:57:32 +0100
committerSzabolcs Nagy <nsz@port70.net>2015-07-24 09:57:32 +0100
commit0910702c4d2cf9e8302b35c9519548726e1ac489 (patch)
treee337a3a9bb65193b6a5752c07c81f6377ddfdc8f
parenta81a00ff94a43af85f7aefceb6d31f3c0f11151d (diff)
downloadglibc-0910702c4d2cf9e8302b35c9519548726e1ac489.tar.gz
glibc-0910702c4d2cf9e8302b35c9519548726e1ac489.tar.xz
glibc-0910702c4d2cf9e8302b35c9519548726e1ac489.zip
[AArch64][BZ #17711] Fix extern protected data handling
Fixes elf/tst-protected1a and elf/tst-protected1b tests.

Depends on a gcc patch that makes protected visibility data non-local:
https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01871.html
and on a binutils patch so R_*_GLOB_DAT relocs are used for it:
https://sourceware.org/ml/binutils/2015-07/msg00246.html
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/aarch64/dl-machine.h3
-rw-r--r--sysdeps/aarch64/dl-sysdep.h2
3 files changed, 11 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d43a564c32..ecce7f3273 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-24  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	[BZ #17711]
+	* sysdeps/aarch64/dl-sysdep.h (DL_EXTERN_PROTECTED_DATA): Define.
+	* sysdeps/aarch64/dl-machine.h (elf_machine_type_class): Handle
+	ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA.
+
 2015-07-24  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* stdlib/cxa_thread_atexit_impl.c: Use the lock name dl_load_lock
diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
index 350d9879b2..217e1798c4 100644
--- a/sysdeps/aarch64/dl-machine.h
+++ b/sysdeps/aarch64/dl-machine.h
@@ -195,7 +195,8 @@ _dl_start_user:							\n\
      (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))
+   | (((type) == R_AARCH64_COPY) * ELF_RTYPE_CLASS_COPY)		\
+   | (((type) == R_AARCH64_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA))
 
 #define ELF_MACHINE_JMP_SLOT	R_AARCH64_JUMP_SLOT
 
diff --git a/sysdeps/aarch64/dl-sysdep.h b/sysdeps/aarch64/dl-sysdep.h
index 4f951def57..0bdbea651e 100644
--- a/sysdeps/aarch64/dl-sysdep.h
+++ b/sysdeps/aarch64/dl-sysdep.h
@@ -21,3 +21,5 @@
 /* _dl_argv cannot be attribute_relro, because _dl_start_user
    might write into it after _dl_start returns.  */
 #define DL_ARGV_NOT_RELRO 1
+
+#define DL_EXTERN_PROTECTED_DATA