Blame SOURCES/gdb-rhbz1125820-ppc64le-enablement-12of37.patch

2c2fa1
commit e8910a83af41c3dbfd00191b2720d4094f8d9532
2c2fa1
Author: Alan Modra <amodra@gmail.com>
2c2fa1
Date:   Tue Oct 29 16:34:35 2013 +1030
2c2fa1
2c2fa1
    Replace DT_PPC_TLSOPT with DT_PPC_OPT.
2c2fa1
    
2c2fa1
    This removes the DT_PPC_TLSOPT/DT_PPC64_TLSOPT dynamic tag and replaces
2c2fa1
    it with DT_PPC_OPT/DT_PPC64_OPT tag to provide the same functionality
2c2fa1
    and more.  This isn't backwards compatible, but the TLSOPT tag hasn't
2c2fa1
    been used since the tls optimisation support was never submitted to
2c2fa1
    glibc.
2c2fa1
    
2c2fa1
    /include/elf/
2c2fa1
    	* ppc.h (DT_PPC_TLSOPT): Delete.
2c2fa1
    	(DT_PPC_OPT, PPC_OPT_TLS): Define.
2c2fa1
    	* ppc64.h (DT_PPC64_TLSOPT): Delete.
2c2fa1
    	(DT_PPC64_OPT, PPC64_OPT_TLS, PPC64_OPT_MULTI_TOC): Define.
2c2fa1
    bfd/
2c2fa1
    	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Use new DT_PPC_OPT
2c2fa1
    	tag to specify tls optimisation.
2c2fa1
    	* elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise.
2c2fa1
    	(ppc64_elf_finish_dynamic_sections): Specify whether multiple
2c2fa1
    	toc pointers are used via DT_PPC64_OPT.
2c2fa1
    binutils/
2c2fa1
    	* readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT.
2c2fa1
    	(get_ppc64_dynamic_type): Replace PPC64_TLSOPT with PPC64_OPT.
2c2fa1
2c2fa1
Index: gdb-7.6.1/bfd/elf32-ppc.c
2c2fa1
===================================================================
2c2fa1
--- gdb-7.6.1.orig/bfd/elf32-ppc.c
2c2fa1
+++ gdb-7.6.1/bfd/elf32-ppc.c
2c2fa1
@@ -6443,7 +6443,7 @@ ppc_elf_size_dynamic_sections (bfd *outp
2c2fa1
 	  if (!htab->no_tls_get_addr_opt
2c2fa1
 	      && htab->tls_get_addr != NULL
2c2fa1
 	      && htab->tls_get_addr->plt.plist != NULL
2c2fa1
-	      && !add_dynamic_entry (DT_PPC_TLSOPT, 0))
2c2fa1
+	      && !add_dynamic_entry (DT_PPC_OPT, PPC_OPT_TLS))
2c2fa1
 	    return FALSE;
2c2fa1
 	}
2c2fa1
 
2c2fa1
Index: gdb-7.6.1/bfd/elf64-ppc.c
2c2fa1
===================================================================
2c2fa1
--- gdb-7.6.1.orig/bfd/elf64-ppc.c
2c2fa1
+++ gdb-7.6.1/bfd/elf64-ppc.c
2c2fa1
@@ -9580,6 +9580,8 @@ ppc64_elf_size_dynamic_sections (bfd *ou
2c2fa1
 
2c2fa1
   if (htab->elf.dynamic_sections_created)
2c2fa1
     {
2c2fa1
+      bfd_boolean tls_opt;
2c2fa1
+
2c2fa1
       /* Add some entries to the .dynamic section.  We fill in the
2c2fa1
 	 values later, in ppc64_elf_finish_dynamic_sections, but we
2c2fa1
 	 must add the entries now so that we get the correct size for
2c2fa1
@@ -9611,11 +9613,14 @@ ppc64_elf_size_dynamic_sections (bfd *ou
2c2fa1
 	    return FALSE;
2c2fa1
 	}
2c2fa1
 
2c2fa1
-      if (!htab->no_tls_get_addr_opt
2c2fa1
-	  && htab->tls_get_addr_fd != NULL
2c2fa1
-	  && htab->tls_get_addr_fd->elf.plt.plist != NULL
2c2fa1
-	  && !add_dynamic_entry (DT_PPC64_TLSOPT, 0))
2c2fa1
-	return FALSE;
2c2fa1
+      tls_opt = (!htab->no_tls_get_addr_opt
2c2fa1
+		 && htab->tls_get_addr_fd != NULL
2c2fa1
+		 && htab->tls_get_addr_fd->elf.plt.plist != NULL);
2c2fa1
+      if (tls_opt || !htab->opd_abi)
2c2fa1
+	{
2c2fa1
+	  if (!add_dynamic_entry (DT_PPC64_OPT, tls_opt ? PPC64_OPT_TLS : 0))
2c2fa1
+	    return FALSE;
2c2fa1
+	}
2c2fa1
 
2c2fa1
       if (relocs)
2c2fa1
 	{
2c2fa1
@@ -14394,6 +14399,11 @@ ppc64_elf_finish_dynamic_sections (bfd *
2c2fa1
 	      dyn.d_un.d_ptr = s->vma;
2c2fa1
 	      break;
2c2fa1
 
2c2fa1
+	    case DT_PPC64_OPT:
2c2fa1
+	      if (htab->do_multi_toc && htab->multi_toc_needed)
2c2fa1
+		dyn.d_un.d_val |= PPC64_OPT_MULTI_TOC;
2c2fa1
+	      break;
2c2fa1
+
2c2fa1
 	    case DT_PPC64_OPDSZ:
2c2fa1
 	      s = bfd_get_section_by_name (output_bfd, ".opd");
2c2fa1
 	      if (s == NULL)
2c2fa1
Index: gdb-7.6.1/include/elf/ppc.h
2c2fa1
===================================================================
2c2fa1
--- gdb-7.6.1.orig/include/elf/ppc.h
2c2fa1
+++ gdb-7.6.1/include/elf/ppc.h
2c2fa1
@@ -176,7 +176,8 @@ END_RELOC_NUMBERS (R_PPC_max)
2c2fa1
 #define DT_PPC_GOT		(DT_LOPROC)
2c2fa1
 
2c2fa1
 /* Specify that tls descriptors should be optimized.  */
2c2fa1
-#define DT_PPC_TLSOPT		(DT_LOPROC + 1)
2c2fa1
+#define DT_PPC_OPT		(DT_LOPROC + 1)
2c2fa1
+#define PPC_OPT_TLS		1
2c2fa1
 
2c2fa1
 /* Processor specific flags for the ELF header e_flags field.  */
2c2fa1
 
2c2fa1
Index: gdb-7.6.1/include/elf/ppc64.h
2c2fa1
===================================================================
2c2fa1
--- gdb-7.6.1.orig/include/elf/ppc64.h
2c2fa1
+++ gdb-7.6.1/include/elf/ppc64.h
2c2fa1
@@ -225,7 +225,9 @@ ppc64_encode_local_entry(unsigned int va
2c2fa1
 #define DT_PPC64_OPD		(DT_LOPROC + 1)
2c2fa1
 #define DT_PPC64_OPDSZ		(DT_LOPROC + 2)
2c2fa1
 
2c2fa1
-/* Specify that tls descriptors should be optimized.  */
2c2fa1
-#define DT_PPC64_TLSOPT		(DT_LOPROC + 3)
2c2fa1
+/* Specify whether various optimisations are possible.  */
2c2fa1
+#define DT_PPC64_OPT		(DT_LOPROC + 3)
2c2fa1
+#define PPC64_OPT_TLS		1
2c2fa1
+#define PPC64_OPT_MULTI_TOC	2
2c2fa1
 
2c2fa1
 #endif /* _ELF_PPC64_H */