Blame SOURCES/gdb-rhbz1320945-power9pre-3of3.patch

2c2fa1
commit f9c6b9078c54ea0f018b673e2ff128e61a0aa666
2c2fa1
Author: Alan Modra <amodra@gmail.com>
2c2fa1
Date:   Tue Oct 29 16:53:25 2013 +1030
2c2fa1
2c2fa1
    Report overflow on PowerPC64 @h and @ha relocations.
2c2fa1
    
2c2fa1
    This changes the behaviour of @h and @ha on PowerPC64 to report errors
2c2fa1
    on 32-bit overflow.  The motivation for this change is that on
2c2fa1
    PowerPC64, most uses of @h and @ha modifiers and their corresponding
2c2fa1
    relocations are to build up 32-bit offsets.  We'd like to know when
2c2fa1
    such offsets overflow.  Only rarely do people use @h or @ha with the
2c2fa1
    high 32-bit modifiers to build a 64-bit constant.  Those uses will now
2c2fa1
    need to use two new modifiers, @high and @higha, if the constant isn't
2c2fa1
    known at assembly time.  For now, we won't report overflow at assembly
2c2fa1
    time..
2c2fa1
    
2c2fa1
    This also fixes an error when applying some of the HIGHER and HIGHEST
2c2fa1
    relocations.
2c2fa1
    
2c2fa1
    include/elf/
2c2fa1
            * ppc64.h (R_PPC64_ADDR16_HIGH, R_PPC64_ADDR16_HIGHA,
2c2fa1
            R_PPC64_TPREL16_HIGH, R_PPC64_TPREL16_HIGHA,
2c2fa1
            R_PPC64_DTPREL16_HIGH, R_PPC64_DTPREL16_HIGHA): New.
2c2fa1
            (IS_PPC64_TLS_RELOC): Match new tls relocs.
2c2fa1
    bfd/
2c2fa1
            * reloc.c (BFD_RELOC_PPC64_ADDR16_HIGH, BFD_RELOC_PPC64_ADDR16_HIGHA,
2c2fa1
            BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA,
2c2fa1
            BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA): New.
2c2fa1
            * elf64-ppc.c (ppc64_elf_howto_raw): Add entries for new relocs.
2c2fa1
            Make all _HA and _HI relocs report signed overflow.
2c2fa1
            (ppc64_elf_reloc_type_lookup): Handle new relocs.
2c2fa1
            (must_be_dyn_reloc, ppc64_elf_check_relocs): Likewise.
2c2fa1
            (dec_dynrel_count, ppc64_elf_relocate_section): Likewise.
2c2fa1
            (ppc64_elf_relocate_section): Don't apply 0x8000 adjust to
2c2fa1
            R_PPC64_TPREL16_HIGHER, R_PPC64_TPREL16_HIGHEST,
2c2fa1
            R_PPC64_DTPREL16_HIGHER, and R_PPC64_DTPREL16_HIGHEST.
2c2fa1
            * libbfd.h: Regenerate.
2c2fa1
            * bfd-in2.h: Regenerate.
2c2fa1
    gas/
2c2fa1
            * config/tc-ppc.c (SEX16): Don't mask.
2c2fa1
            (REPORT_OVERFLOW_HI): Define as zero.
2c2fa1
            (ppc_elf_suffix): Support @high, @higha, @dtprel@high, @dtprel@higha,
2c2fa1
            @tprel@high, and @tprel@higha modifiers.
2c2fa1
            (md_assemble): Ignore X_unsigned when applying 16-bit insn fields.
2c2fa1
            Add (disabled) code to check @h and @ha reloc overflow for powerpc64.
2c2fa1
            Handle new relocs.
2c2fa1
            (md_apply_fix): Similarly.
2c2fa1
    elfcpp/
2c2fa1
            * powerpc.h (R_PPC64_ADDR16_HIGH, R_PPC64_ADDR16_HIGHA,
2c2fa1
            R_PPC64_TPREL16_HIGH, R_PPC64_TPREL16_HIGHA,
2c2fa1
            R_PPC64_DTPREL16_HIGH, R_PPC64_DTPREL16_HIGHA): Define.
2c2fa1
    gold/
2c2fa1
            * powerpc.cc (Target_powerpc::Scan::check_non_pic): Handle new relocs.
2c2fa1
            (Target_powerpc::Scan::global, local): Likewise.
2c2fa1
            (Target_powerpc::Relocate::relocate): Likewise.  Check for overflow
2c2fa1
            on all ppc64 @h and @ha relocs.
2c2fa1
2c2fa1
### a/bfd/ChangeLog
2c2fa1
### b/bfd/ChangeLog
2c2fa1
## -1,3 +1,19 @@
2c2fa1
+2013-10-30  Alan Modra  <amodra@gmail.com>
2c2fa1
+
2c2fa1
+	* reloc.c (BFD_RELOC_PPC64_ADDR16_HIGH, BFD_RELOC_PPC64_ADDR16_HIGHA,
2c2fa1
+	BFD_RELOC_PPC64_TPREL16_HIGH, BFD_RELOC_PPC64_TPREL16_HIGHA,
2c2fa1
+	BFD_RELOC_PPC64_DTPREL16_HIGH, BFD_RELOC_PPC64_DTPREL16_HIGHA): New.
2c2fa1
+	* elf64-ppc.c (ppc64_elf_howto_raw): Add entries for new relocs.
2c2fa1
+	Make all _HA and _HI relocs report signed overflow.
2c2fa1
+	(ppc64_elf_reloc_type_lookup): Handle new relocs.
2c2fa1
+	(must_be_dyn_reloc, ppc64_elf_check_relocs): Likewise.
2c2fa1
+	(dec_dynrel_count, ppc64_elf_relocate_section): Likewise.
2c2fa1
+	(ppc64_elf_relocate_section): Don't apply 0x8000 adjust to
2c2fa1
+	R_PPC64_TPREL16_HIGHER, R_PPC64_TPREL16_HIGHEST,
2c2fa1
+	R_PPC64_DTPREL16_HIGHER, and R_PPC64_DTPREL16_HIGHEST.
2c2fa1
+	* libbfd.h: Regenerate.
2c2fa1
+	* bfd-in2.h: Regenerate.
2c2fa1
+
2c2fa1
 2013-10-29  Roland McGrath  <mcgrathr@google.com>
2c2fa1
 
2c2fa1
 	* elf64-x86-64.c (elf_x86_64_nacl_plt0_entry): Correct 9-byte nop
2c2fa1
--- a/bfd/bfd-in2.h
2c2fa1
+++ b/bfd/bfd-in2.h
2c2fa1
@@ -3223,6 +3223,8 @@ instruction.  */
2c2fa1
   BFD_RELOC_PPC64_TOC16_LO_DS,
2c2fa1
   BFD_RELOC_PPC64_PLTGOT16_DS,
2c2fa1
   BFD_RELOC_PPC64_PLTGOT16_LO_DS,
2c2fa1
+  BFD_RELOC_PPC64_ADDR16_HIGH,
2c2fa1
+  BFD_RELOC_PPC64_ADDR16_HIGHA,
2c2fa1
 
2c2fa1
 /* PowerPC and PowerPC64 thread-local storage relocations.  */
2c2fa1
   BFD_RELOC_PPC_TLS,
2c2fa1
@@ -3267,6 +3269,10 @@ instruction.  */
2c2fa1
   BFD_RELOC_PPC64_DTPREL16_HIGHERA,
2c2fa1
   BFD_RELOC_PPC64_DTPREL16_HIGHEST,
2c2fa1
   BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
2c2fa1
+  BFD_RELOC_PPC64_TPREL16_HIGH,
2c2fa1
+  BFD_RELOC_PPC64_TPREL16_HIGHA,
2c2fa1
+  BFD_RELOC_PPC64_DTPREL16_HIGH,
2c2fa1
+  BFD_RELOC_PPC64_DTPREL16_HIGHA,
2c2fa1
 
2c2fa1
 /* IBM 370/390 relocations  */
2c2fa1
   BFD_RELOC_I370_D12,
2c2fa1
--- a/bfd/elf64-ppc.c
2c2fa1
+++ b/bfd/elf64-ppc.c
2c2fa1
@@ -309,7 +309,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 bfd_elf_generic_reloc,	/* special_function */
2c2fa1
 	 "R_PPC64_ADDR16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -325,7 +325,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_ha_reloc,	/* special_function */
2c2fa1
 	 "R_PPC64_ADDR16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -487,7 +487,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont,/* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed,/* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -503,7 +503,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont,/* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed,/* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -680,7 +680,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_PLT16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -696,7 +696,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_PLT16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -741,7 +741,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_sectoff_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_SECTOFF_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -756,7 +756,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_sectoff_ha_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_SECTOFF_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -963,7 +963,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_toc_reloc,	/* special_function */
2c2fa1
 	 "R_PPC64_TOC16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -982,7 +982,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_toc_ha_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_TOC16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1054,7 +1054,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_PLTGOT16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1072,7 +1072,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont,/* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_PLTGOT16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1374,7 +1374,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_DTPREL16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1389,7 +1389,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_DTPREL16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1540,7 +1540,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_TPREL16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1555,7 +1555,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_TPREL16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1692,7 +1692,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TLSGD16_HI", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1707,7 +1707,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TLSGD16_HA", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1754,7 +1754,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TLSLD16_HI", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1769,7 +1769,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TLSLD16_HA", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1815,7 +1815,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_DTPREL16_HI", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1830,7 +1830,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_DTPREL16_HA", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1876,7 +1876,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TPREL16_HI", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1891,7 +1891,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 FALSE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
 	 "R_PPC64_GOT_TPREL16_HA", /* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1964,7 +1964,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 TRUE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 bfd_elf_generic_reloc,	/* special_function */
2c2fa1
 	 "R_PPC64_REL16_HI",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1980,7 +1980,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 16,			/* bitsize */
2c2fa1
 	 TRUE,			/* pc_relative */
2c2fa1
 	 0,			/* bitpos */
2c2fa1
-	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 complain_overflow_signed, /* complain_on_overflow */
2c2fa1
 	 ppc64_elf_ha_reloc,	/* special_function */
2c2fa1
 	 "R_PPC64_REL16_HA",	/* name */
2c2fa1
 	 FALSE,			/* partial_inplace */
2c2fa1
@@ -1988,6 +1988,96 @@ static reloc_howto_type ppc64_elf_howto_raw[] = {
2c2fa1
 	 0xffff,		/* dst_mask */
2c2fa1
 	 TRUE),			/* pcrel_offset */
2c2fa1
 
2c2fa1
+  /* Like R_PPC64_ADDR16_HI, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_ADDR16_HIGH,	/* type */
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 bfd_elf_generic_reloc,	/* special_function */
2c2fa1
+	 "R_PPC64_ADDR16_HIGH",	/* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
+  /* Like R_PPC64_ADDR16_HA, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_ADDR16_HIGHA,	/* type */
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 ppc64_elf_ha_reloc,	/* special_function */
2c2fa1
+	 "R_PPC64_ADDR16_HIGHA",	/* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
+  /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_DTPREL16_HIGH,
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
+	 "R_PPC64_DTPREL16_HIGH", /* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
+  /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_DTPREL16_HIGHA,
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
+	 "R_PPC64_DTPREL16_HIGHA", /* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
+  /* Like R_PPC64_TPREL16_HI, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_TPREL16_HIGH,
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
+	 "R_PPC64_TPREL16_HIGH",	/* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
+  /* Like R_PPC64_TPREL16_HA, but no overflow.  */
2c2fa1
+  HOWTO (R_PPC64_TPREL16_HIGHA,
2c2fa1
+	 16,			/* rightshift */
2c2fa1
+	 1,			/* size (0 = byte, 1 = short, 2 = long) */
2c2fa1
+	 16,			/* bitsize */
2c2fa1
+	 FALSE,			/* pc_relative */
2c2fa1
+	 0,			/* bitpos */
2c2fa1
+	 complain_overflow_dont, /* complain_on_overflow */
2c2fa1
+	 ppc64_elf_unhandled_reloc, /* special_function */
2c2fa1
+	 "R_PPC64_TPREL16_HIGHA",	/* name */
2c2fa1
+	 FALSE,			/* partial_inplace */
2c2fa1
+	 0,			/* src_mask */
2c2fa1
+	 0xffff,		/* dst_mask */
2c2fa1
+	 FALSE),		/* pcrel_offset */
2c2fa1
+
2c2fa1
   /* GNU extension to record C++ vtable hierarchy.  */
2c2fa1
   HOWTO (R_PPC64_GNU_VTINHERIT,	/* type */
2c2fa1
 	 0,			/* rightshift */
2c2fa1
@@ -2066,8 +2156,12 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_HI16:			r = R_PPC64_ADDR16_HI;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_ADDR16_HIGH:		r = R_PPC64_ADDR16_HIGH;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_HI16_S:			r = R_PPC64_ADDR16_HA;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_ADDR16_HIGHA:		r = R_PPC64_ADDR16_HIGHA;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_PPC_BA16:			r = R_PPC64_ADDR14;
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_PPC_BA16_BRTAKEN:		r = R_PPC64_ADDR14_BRTAKEN;
2c2fa1
@@ -2186,8 +2280,12 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_PPC_TPREL16_HI:		r = R_PPC64_TPREL16_HI;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_TPREL16_HIGH:		r = R_PPC64_TPREL16_HIGH;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_PPC_TPREL16_HA:		r = R_PPC64_TPREL16_HA;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_TPREL16_HIGHA:		r = R_PPC64_TPREL16_HIGHA;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_PPC_TPREL:			r = R_PPC64_TPREL64;
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_PPC_DTPREL16:		r = R_PPC64_DTPREL16;
2c2fa1
@@ -2196,8 +2294,12 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_PPC_DTPREL16_HI:		r = R_PPC64_DTPREL16_HI;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_DTPREL16_HIGH:		r = R_PPC64_DTPREL16_HIGH;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_PPC_DTPREL16_HA:		r = R_PPC64_DTPREL16_HA;
2c2fa1
       break;
2c2fa1
+    case BFD_RELOC_PPC64_DTPREL16_HIGHA:	r = R_PPC64_DTPREL16_HIGHA;
2c2fa1
+      break;
2c2fa1
     case BFD_RELOC_PPC_DTPREL:			r = R_PPC64_DTPREL64;
2c2fa1
       break;
2c2fa1
     case BFD_RELOC_PPC_GOT_TLSGD16:		r = R_PPC64_GOT_TLSGD16;
2c2fa1
@@ -3514,6 +3616,8 @@ must_be_dyn_reloc (struct bfd_link_info *info,
2c2fa1
     case R_PPC64_TPREL16_HA:
2c2fa1
     case R_PPC64_TPREL16_DS:
2c2fa1
     case R_PPC64_TPREL16_LO_DS:
2c2fa1
+    case R_PPC64_TPREL16_HIGH:
2c2fa1
+    case R_PPC64_TPREL16_HIGHA:
2c2fa1
     case R_PPC64_TPREL16_HIGHER:
2c2fa1
     case R_PPC64_TPREL16_HIGHERA:
2c2fa1
     case R_PPC64_TPREL16_HIGHEST:
2c2fa1
@@ -5208,6 +5312,8 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
2c2fa1
 	case R_PPC64_DTPREL16_HA:
2c2fa1
 	case R_PPC64_DTPREL16_DS:
2c2fa1
 	case R_PPC64_DTPREL16_LO_DS:
2c2fa1
+	case R_PPC64_DTPREL16_HIGH:
2c2fa1
+	case R_PPC64_DTPREL16_HIGHA:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHER:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHERA:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHEST:
2c2fa1
@@ -5368,6 +5474,8 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
2c2fa1
 	case R_PPC64_TPREL16_HA:
2c2fa1
 	case R_PPC64_TPREL16_DS:
2c2fa1
 	case R_PPC64_TPREL16_LO_DS:
2c2fa1
+	case R_PPC64_TPREL16_HIGH:
2c2fa1
+	case R_PPC64_TPREL16_HIGHA:
2c2fa1
 	case R_PPC64_TPREL16_HIGHER:
2c2fa1
 	case R_PPC64_TPREL16_HIGHERA:
2c2fa1
 	case R_PPC64_TPREL16_HIGHEST:
2c2fa1
@@ -5421,6 +5529,8 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
2c2fa1
 	case R_PPC64_ADDR16_DS:
2c2fa1
 	case R_PPC64_ADDR16_HA:
2c2fa1
 	case R_PPC64_ADDR16_HI:
2c2fa1
+	case R_PPC64_ADDR16_HIGH:
2c2fa1
+	case R_PPC64_ADDR16_HIGHA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHER:
2c2fa1
 	case R_PPC64_ADDR16_HIGHERA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHEST:
2c2fa1
@@ -7052,6 +7162,8 @@ dec_dynrel_count (bfd_vma r_info,
2c2fa1
     case R_PPC64_TPREL16_HA:
2c2fa1
     case R_PPC64_TPREL16_DS:
2c2fa1
     case R_PPC64_TPREL16_LO_DS:
2c2fa1
+    case R_PPC64_TPREL16_HIGH:
2c2fa1
+    case R_PPC64_TPREL16_HIGHA:
2c2fa1
     case R_PPC64_TPREL16_HIGHER:
2c2fa1
     case R_PPC64_TPREL16_HIGHERA:
2c2fa1
     case R_PPC64_TPREL16_HIGHEST:
2c2fa1
@@ -7073,6 +7185,8 @@ dec_dynrel_count (bfd_vma r_info,
2c2fa1
     case R_PPC64_ADDR16_DS:
2c2fa1
     case R_PPC64_ADDR16_HA:
2c2fa1
     case R_PPC64_ADDR16_HI:
2c2fa1
+    case R_PPC64_ADDR16_HIGH:
2c2fa1
+    case R_PPC64_ADDR16_HIGHA:
2c2fa1
     case R_PPC64_ADDR16_HIGHER:
2c2fa1
     case R_PPC64_ADDR16_HIGHERA:
2c2fa1
     case R_PPC64_ADDR16_HIGHEST:
2c2fa1
@@ -13531,6 +13645,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
2c2fa1
 	case R_PPC64_TPREL16_HA:
2c2fa1
 	case R_PPC64_TPREL16_DS:
2c2fa1
 	case R_PPC64_TPREL16_LO_DS:
2c2fa1
+	case R_PPC64_TPREL16_HIGH:
2c2fa1
+	case R_PPC64_TPREL16_HIGHA:
2c2fa1
 	case R_PPC64_TPREL16_HIGHER:
2c2fa1
 	case R_PPC64_TPREL16_HIGHERA:
2c2fa1
 	case R_PPC64_TPREL16_HIGHEST:
2c2fa1
@@ -13565,6 +13681,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
2c2fa1
 	case R_PPC64_DTPREL16_HA:
2c2fa1
 	case R_PPC64_DTPREL16_DS:
2c2fa1
 	case R_PPC64_DTPREL16_LO_DS:
2c2fa1
+	case R_PPC64_DTPREL16_HIGH:
2c2fa1
+	case R_PPC64_DTPREL16_HIGHA:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHER:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHERA:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHEST:
2c2fa1
@@ -13597,6 +13715,8 @@ ppc64_elf_relocate_section (bfd *output_bfd,
2c2fa1
 	case R_PPC64_ADDR16_DS:
2c2fa1
 	case R_PPC64_ADDR16_HA:
2c2fa1
 	case R_PPC64_ADDR16_HI:
2c2fa1
+	case R_PPC64_ADDR16_HIGH:
2c2fa1
+	case R_PPC64_ADDR16_HIGHA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHER:
2c2fa1
 	case R_PPC64_ADDR16_HIGHERA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHEST:
2c2fa1
@@ -13911,21 +14031,20 @@ ppc64_elf_relocate_section (bfd *output_bfd,
2c2fa1
 	default:
2c2fa1
 	  break;
2c2fa1
 
2c2fa1
-	case R_PPC64_ADDR16_HA:
2c2fa1
 	case R_PPC64_REL16_HA:
2c2fa1
+	case R_PPC64_ADDR16_HA:
2c2fa1
+	case R_PPC64_ADDR16_HIGHA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHERA:
2c2fa1
 	case R_PPC64_ADDR16_HIGHESTA:
2c2fa1
 	case R_PPC64_TOC16_HA:
2c2fa1
 	case R_PPC64_SECTOFF_HA:
2c2fa1
 	case R_PPC64_TPREL16_HA:
2c2fa1
-	case R_PPC64_DTPREL16_HA:
2c2fa1
-	case R_PPC64_TPREL16_HIGHER:
2c2fa1
+	case R_PPC64_TPREL16_HIGHA:
2c2fa1
 	case R_PPC64_TPREL16_HIGHERA:
2c2fa1
-	case R_PPC64_TPREL16_HIGHEST:
2c2fa1
 	case R_PPC64_TPREL16_HIGHESTA:
2c2fa1
-	case R_PPC64_DTPREL16_HIGHER:
2c2fa1
+	case R_PPC64_DTPREL16_HA:
2c2fa1
+	case R_PPC64_DTPREL16_HIGHA:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHERA:
2c2fa1
-	case R_PPC64_DTPREL16_HIGHEST:
2c2fa1
 	case R_PPC64_DTPREL16_HIGHESTA:
2c2fa1
 	  /* It's just possible that this symbol is a weak symbol
2c2fa1
 	     that's not actually defined anywhere. In that case,
2c2fa1
--- a/bfd/libbfd.h
2c2fa1
+++ b/bfd/libbfd.h
2c2fa1
@@ -1397,6 +1397,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
2c2fa1
   "BFD_RELOC_PPC64_TOC16_LO_DS",
2c2fa1
   "BFD_RELOC_PPC64_PLTGOT16_DS",
2c2fa1
   "BFD_RELOC_PPC64_PLTGOT16_LO_DS",
2c2fa1
+  "BFD_RELOC_PPC64_ADDR16_HIGH",
2c2fa1
+  "BFD_RELOC_PPC64_ADDR16_HIGHA",
2c2fa1
   "BFD_RELOC_PPC_TLS",
2c2fa1
   "BFD_RELOC_PPC_TLSGD",
2c2fa1
   "BFD_RELOC_PPC_TLSLD",
2c2fa1
@@ -1439,6 +1441,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
2c2fa1
   "BFD_RELOC_PPC64_DTPREL16_HIGHERA",
2c2fa1
   "BFD_RELOC_PPC64_DTPREL16_HIGHEST",
2c2fa1
   "BFD_RELOC_PPC64_DTPREL16_HIGHESTA",
2c2fa1
+  "BFD_RELOC_PPC64_TPREL16_HIGH",
2c2fa1
+  "BFD_RELOC_PPC64_TPREL16_HIGHA",
2c2fa1
+  "BFD_RELOC_PPC64_DTPREL16_HIGH",
2c2fa1
+  "BFD_RELOC_PPC64_DTPREL16_HIGHA",
2c2fa1
   "BFD_RELOC_I370_D12",
2c2fa1
   "BFD_RELOC_CTOR",
2c2fa1
   "BFD_RELOC_ARM_PCREL_BRANCH",
2c2fa1
--- a/bfd/reloc.c
2c2fa1
+++ b/bfd/reloc.c
2c2fa1
@@ -2891,6 +2891,10 @@ ENUMX
2c2fa1
   BFD_RELOC_PPC64_PLTGOT16_DS
2c2fa1
 ENUMX
2c2fa1
   BFD_RELOC_PPC64_PLTGOT16_LO_DS
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_ADDR16_HIGH
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_ADDR16_HIGHA
2c2fa1
 ENUMDOC
2c2fa1
   Power(rs6000) and PowerPC relocations.
2c2fa1
 
2c2fa1
@@ -2978,6 +2982,14 @@ ENUMX
2c2fa1
   BFD_RELOC_PPC64_DTPREL16_HIGHEST
2c2fa1
 ENUMX
2c2fa1
   BFD_RELOC_PPC64_DTPREL16_HIGHESTA
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_TPREL16_HIGH
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_TPREL16_HIGHA
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_DTPREL16_HIGH
2c2fa1
+ENUMX
2c2fa1
+  BFD_RELOC_PPC64_DTPREL16_HIGHA
2c2fa1
 ENUMDOC
2c2fa1
   PowerPC and PowerPC64 thread-local storage relocations.
2c2fa1
 
2c2fa1
### a/include/elf/ChangeLog
2c2fa1
### b/include/elf/ChangeLog
2c2fa1
## -1,3 +1,10 @@
2c2fa1
+2013-10-30  Alan Modra  <amodra@gmail.com>
2c2fa1
+
2c2fa1
+	* ppc64.h (R_PPC64_ADDR16_HIGH, R_PPC64_ADDR16_HIGHA,
2c2fa1
+	R_PPC64_TPREL16_HIGH, R_PPC64_TPREL16_HIGHA,
2c2fa1
+	R_PPC64_DTPREL16_HIGH, R_PPC64_DTPREL16_HIGHA): New.
2c2fa1
+	(IS_PPC64_TLS_RELOC): Match new tls relocs.
2c2fa1
+
2c2fa1
 2013-10-14  Chao-ying Fu  <Chao-ying.Fu@imgtec.com>
2c2fa1
 
2c2fa1
 	* mips.h (enum): Add Tag_GNU_MIPS_ABI_MSA.
2c2fa1
--- a/include/elf/ppc64.h
2c2fa1
+++ b/include/elf/ppc64.h
2c2fa1
@@ -141,6 +141,14 @@ START_RELOC_NUMBERS (elf_ppc64_reloc_type)
2c2fa1
   RELOC_NUMBER (R_PPC64_TLSLD,		   108)
2c2fa1
   RELOC_NUMBER (R_PPC64_TOCSAVE,	   109)
2c2fa1
 
2c2fa1
+/* Added when HA and HI relocs were changed to report overflows.  */
2c2fa1
+  RELOC_NUMBER (R_PPC64_ADDR16_HIGH,	   110)
2c2fa1
+  RELOC_NUMBER (R_PPC64_ADDR16_HIGHA,	   111)
2c2fa1
+  RELOC_NUMBER (R_PPC64_TPREL16_HIGH,	   112)
2c2fa1
+  RELOC_NUMBER (R_PPC64_TPREL16_HIGHA,	   113)
2c2fa1
+  RELOC_NUMBER (R_PPC64_DTPREL16_HIGH,	   114)
2c2fa1
+  RELOC_NUMBER (R_PPC64_DTPREL16_HIGHA,	   115)
2c2fa1
+
2c2fa1
 #ifndef RELOC_MACROS_GEN_FUNC
2c2fa1
 /* Fake relocation only used internally by ld.  */
2c2fa1
   RELOC_NUMBER (R_PPC64_LO_DS_OPT,	   128)
2c2fa1
@@ -161,8 +169,9 @@ START_RELOC_NUMBERS (elf_ppc64_reloc_type)
2c2fa1
 
2c2fa1
 END_RELOC_NUMBERS (R_PPC64_max)
2c2fa1
 
2c2fa1
-#define IS_PPC64_TLS_RELOC(R) \
2c2fa1
-  ((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA)
2c2fa1
+#define IS_PPC64_TLS_RELOC(R)						\
2c2fa1
+  (((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA)		\
2c2fa1
+   || ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA))
2c2fa1
 
2c2fa1
 /* Specify the start of the .glink section.  */
2c2fa1
 #define DT_PPC64_GLINK		DT_LOPROC