diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-sh.c | 12 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/basic.exp | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/pcrel2.d | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/pcrel2.s | 17 |
6 files changed, 47 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 705ef53..641f7c1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-09-27 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * config/tc-sh.c (sh_force_relocation): Return 0 for + some PC relative relocations when not relaxing. + 2002-09-26 Jakub Jelinek <jakub@redhat.com> * config/tc-i386.c (tc_i386_fix_adjustable): Add x86-64 TLS relocs. diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index b74dc56..be5e857 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -3219,6 +3219,18 @@ int sh_force_relocation (fix) fixS *fix; { + /* These relocations can't make it into a DSO, so no use forcing + them for global symbols. */ + if (! sh_relax + && (fix->fx_r_type == BFD_RELOC_SH_PCDISP8BY2 + || fix->fx_r_type == BFD_RELOC_SH_PCDISP12BY2 + || fix->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY2 + || fix->fx_r_type == BFD_RELOC_SH_PCRELIMM8BY4 + || fix->fx_r_type == BFD_RELOC_8_PCREL + || fix->fx_r_type == BFD_RELOC_SH_SWITCH16 + || fix->fx_r_type == BFD_RELOC_SH_SWITCH32)) + return 0; + if (fix->fx_r_type == BFD_RELOC_VTABLE_INHERIT || fix->fx_r_type == BFD_RELOC_VTABLE_ENTRY || fix->fx_r_type == BFD_RELOC_SH_LOOP_START diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 11566be..1336d7d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2002-09-27 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * gas/sh/pcrel2.s: New. + * gas/sh/pcrel2.d: New. + * gas/sh/basic.exp: Add pcrel2 test. + 2002-09-27 Jason Thorpe <thorpej@wasabisystems.com> * gas/vax/elf-rel.[ds]: New test. diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp index b3815c1..dade86a 100644 --- a/gas/testsuite/gas/sh/basic.exp +++ b/gas/testsuite/gas/sh/basic.exp @@ -129,6 +129,8 @@ if [istarget sh*-*-*] then { run_dump_test "dsp" run_dump_test "pcrel" + + run_dump_test "pcrel2" } if {[istarget sh*-*elf] || [istarget sh*-linux*]} then { diff --git a/gas/testsuite/gas/sh/pcrel2.d b/gas/testsuite/gas/sh/pcrel2.d new file mode 100644 index 0000000..9b363af --- /dev/null +++ b/gas/testsuite/gas/sh/pcrel2.d @@ -0,0 +1,5 @@ +#as: -big +#objdump: -r +#name: PC-relative loads + +.*: file format .*sh.* diff --git a/gas/testsuite/gas/sh/pcrel2.s b/gas/testsuite/gas/sh/pcrel2.s new file mode 100644 index 0000000..5a34111 --- /dev/null +++ b/gas/testsuite/gas/sh/pcrel2.s @@ -0,0 +1,17 @@ + .text + + .p2align 2 +code: + bf foo + mov.l bar, r0 + mov.w bar, r0 + .globl foo +foo: + bra foo + nop + .align 2 + .globl bar +bar: + .long . - foo + .word . - foo + .byte . - foo |