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

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