aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorStefan Trleman <stefan.teleman@oracle.com>2016-08-04 14:57:23 +0100
committerNick Clifton <nickc@redhat.com>2016-08-04 14:57:23 +0100
commit024425668d120663a73913352df701c8f0aea316 (patch)
treee03e350ef0fe9e0a057f579ec3fa17f97dac577b /gas
parent6f67973b4280cfd045e632a3340becd16e43b4b1 (diff)
downloadgdb-024425668d120663a73913352df701c8f0aea316.zip
gdb-024425668d120663a73913352df701c8f0aea316.tar.gz
gdb-024425668d120663a73913352df701c8f0aea316.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-sparc.c16
2 files changed, 23 insertions, 0 deletions
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 ();
}
}