diff options
author | Stefan Trleman <stefan.teleman@oracle.com> | 2016-08-04 14:57:23 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2016-08-04 14:57:23 +0100 |
commit | 024425668d120663a73913352df701c8f0aea316 (patch) | |
tree | e03e350ef0fe9e0a057f579ec3fa17f97dac577b /gas | |
parent | 6f67973b4280cfd045e632a3340becd16e43b4b1 (diff) | |
download | gdb-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/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-sparc.c | 16 |
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 (); } } |