This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb/binutils-2_25-branch] Use dynamic text relocs for protected vars


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2791b633e5d83c349a9c32573517e3b6c350e5dc

commit 2791b633e5d83c349a9c32573517e3b6c350e5dc
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Feb 23 16:45:05 2015 +1030

    Use dynamic text relocs for protected vars
    
    Rather than reporting a link error on attempting to use dynbss for
    protected vars, use dynamic text relocs.
    
    	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Heed -z nocopyreloc.
    	Use text relocs rather than giving an error on trying to use
    	.dynbss for protected shared lib vars.
    	* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.

Diff:
---
 bfd/ChangeLog   |  9 +++++++++
 bfd/elf32-ppc.c | 17 +++++++++++++++++
 bfd/elf64-ppc.c | 17 +++++++++++++++++
 3 files changed, 43 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d12d966..78fe403 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@
+2015-03-18  Alan Modra  <amodra@gmail.com>
+
+	Apply from master
+	2015-02-26  Alan Modra  <amodra@gmail.com>
+	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Heed -z nocopyreloc.
+	Use text relocs rather than giving an error on trying to use
+	.dynbss for protected shared lib vars.
+	* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
+
 2015-03-06  H.J. Lu  <hongjiu.lu@intel.com>
 
 	Backport from master
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 83f8452..3325406 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -5576,6 +5576,13 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (!h->non_got_ref)
     return TRUE;
 
+  /* If -z nocopyreloc was given, we won't generate them either.  */
+  if (info->nocopyreloc)
+    {
+      h->non_got_ref = 0;
+      return TRUE;
+    }
+
    /* If we didn't find any dynamic relocs in read-only sections, then
       we'll be keeping the dynamic relocs and avoiding the copy reloc.
       We can't do this if there are any small data relocations.  This
@@ -5592,6 +5599,16 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
+  /* Protected variables do not work with .dynbss.  The copy in
+     .dynbss won't be used by the shared library with the protected
+     definition for the variable.  Text relocations are preferable
+     to an incorrect program.  */
+  if (h->protected_def)
+    {
+      h->non_got_ref = 0;
+      return TRUE;
+    }
+
   /* We must allocate the symbol in our .dynbss section, which will
      become part of the .bss section of the executable.  There will be
      an entry for this symbol in the .dynsym section.  The dynamic
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 3b64f9a..3026b46 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -7075,6 +7075,13 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   if (!h->def_dynamic || !h->ref_regular || h->def_regular)
     return TRUE;
 
+  /* If -z nocopyreloc was given, don't generate them either.  */
+  if (info->nocopyreloc)
+    {
+      h->non_got_ref = 0;
+      return TRUE;
+    }
+
   /* If we didn't find any dynamic relocs in read-only sections, then
      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
   if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h))
@@ -7083,6 +7090,16 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
       return TRUE;
     }
 
+  /* Protected variables do not work with .dynbss.  The copy in
+     .dynbss won't be used by the shared library with the protected
+     definition for the variable.  Text relocations are preferable
+     to an incorrect program.  */
+  if (h->protected_def)
+    {
+      h->non_got_ref = 0;
+      return TRUE;
+    }
+
   if (h->plt.plist != NULL)
     {
       /* We should never get here, but unfortunately there are versions


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]