Fix generation of relocs for 32-bit Sparc Solaris targets.
authorStefan Trleman <stefan.teleman@oracle.com>
Thu, 4 Aug 2016 13:57:23 +0000 (14:57 +0100)
committerNick Clifton <nickc@redhat.com>
Thu, 4 Aug 2016 13:57:23 +0000 (14:57 +0100)
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.

gas/ChangeLog
gas/config/tc-sparc.c

index 9ffb962e858972bb30951581c1b307d22cf0df40..71355928752e6366475392a95a151f404196e6f7 100644 (file)
@@ -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
index 9171407621ad87eb4b36bf197577829b3d69faf2..fb3e9fe6d5bff1257f358e6ea03d23e08826bcde 100644 (file)
@@ -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 ();
        }
    }
This page took 0.028482 seconds and 4 git commands to generate.