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] Fix generation of relocs for 32-bit Sparc Solaris targets.


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

commit 024425668d120663a73913352df701c8f0aea316
Author: Stefan Trleman <stefan.teleman@oracle.com>
Date:   Thu Aug 4 14:57:23 2016 +0100

    Fix generation of relocs for 32-bit Sparc Solaris targets.
    
    	PR gas/20427
    	* config/tc-sparc.c (cons_fix_new_sparc): Prevent the generation
    	of 64-bit relocation types when assembling for a 32-bit Solaris
    	target.

Diff:
---
 gas/ChangeLog         |  7 +++++++
 gas/config/tc-sparc.c | 16 ++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9ffb962..7135592 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2016-08-04  Stefan Trleman  <stefan.teleman@oracle.com>
+
+	PR gas/20427
+	* config/tc-sparc.c (cons_fix_new_sparc): Prevent the generation
+	of 64-bit relocation types when assembling for a 32-bit Solaris
+	target.
+
 2016-07-27  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
 	* testsuite/gas/sparc/sparc.exp: Use is_elf_format to discriminate
diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c
index 9171407..fb3e9fe 100644
--- a/gas/config/tc-sparc.c
+++ b/gas/config/tc-sparc.c
@@ -4890,6 +4890,15 @@ cons_fix_new_sparc (fragS *frag,
       && now_seg->flags & SEC_ALLOC)
     r = BFD_RELOC_SPARC_REV32;
 
+#ifdef TE_SOLARIS
+  /* The Solaris linker does not allow R_SPARC_UA64
+     relocations for 32-bit executables.  */
+  if (!target_little_endian_data
+      && sparc_arch_size != 64
+      && r == BFD_RELOC_64)
+    r = BFD_RELOC_32;
+#endif
+
   if (sparc_cons_special_reloc)
     {
       if (*sparc_cons_special_reloc == 'd')
@@ -4920,7 +4929,14 @@ cons_fix_new_sparc (fragS *frag,
 	{
 	case 2: r = BFD_RELOC_SPARC_UA16; break;
 	case 4: r = BFD_RELOC_SPARC_UA32; break;
+#ifdef TE_SOLARIS
+        /* The Solaris linker does not allow R_SPARC_UA64
+	   relocations for 32-bit executables.  */
+        case 8: r = sparc_arch_size == 64 ?
+                    BFD_RELOC_SPARC_UA64 : BFD_RELOC_SPARC_UA32; break;
+#else
 	case 8: r = BFD_RELOC_SPARC_UA64; break;
+#endif
 	default: abort ();
 	}
    }


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