aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2013-12-04 06:44:06 -0600
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2013-12-04 07:41:37 -0600
commit7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5 (patch)
tree8af2d6588a7c4d7eea36a213f44f3b5823b63f78 /elf
parent5162e7dd96efcd9b45c1dc1471a964d45278b1e1 (diff)
downloadglibc-7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5.tar
glibc-7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5.tar.gz
glibc-7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5.tar.bz2
glibc-7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5.zip
PowerPC64: Report overflow on @h and @ha relocations
This patch updates glibc in accordance with the binutils patch checked in here: https://sourceware.org/ml/binutils/2013-10/msg00372.html This changes the various R_PPC64_..._HI and _HA relocations to report 32-bit overflows. The motivation is that existing uses of @h / @ha are to build up 32-bit offsets (for the "medium model" TOC access that GCC now defaults to), and we'd really like to see failures at link / load time rather than silent truncations. For those rare cases where a modifier is needed to build up a 64-bit constant, new relocations _HIGH / _HIGHA are supported. The patch also fixes a bug in overflow checking for the R_PPC64_ADDR30 and R_PPC64_ADDR32 relocations.
Diffstat (limited to 'elf')
-rw-r--r--elf/elf.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/elf/elf.h b/elf/elf.h
index a05ea3b640..6e2552e35d 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -2252,6 +2252,17 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
+#define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */
+#define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */
+#define R_PPC64_TOCSAVE 109 /* none */
+
+/* Added when HA and HI relocs were changed to report overflows. */
+#define R_PPC64_ADDR16_HIGH 110
+#define R_PPC64_ADDR16_HIGHA 111
+#define R_PPC64_TPREL16_HIGH 112
+#define R_PPC64_TPREL16_HIGHA 113
+#define R_PPC64_DTPREL16_HIGH 114
+#define R_PPC64_DTPREL16_HIGHA 115
/* GNU extension to support local ifunc. */
#define R_PPC64_JMP_IREL 247