From: Daniel Jacobowitz Date: Sat, 28 Sep 2002 00:41:27 +0000 (+0000) Subject: 2002-09-27 Kaz Kojima X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2a6cbe5993a85133f90d4f4021571a7274698acc;p=pf3gnuchains%2Fpf3gnuchains3x.git 2002-09-27 Kaz Kojima * config/tc-sh.c (sh_force_relocation): Return 0 for some PC relative relocations when not relaxing. * testsuite/gas/sh/pcrel2.s: New. * testsuite/gas/sh/pcrel2.d: New. * testsuite/gas/sh/basic.exp: Add pcrel2 test. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 705ef535ce..641f7c1e3f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-09-27 Kaz Kojima + + * config/tc-sh.c (sh_force_relocation): Return 0 for + some PC relative relocations when not relaxing. + 2002-09-26 Jakub Jelinek * 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 b74dc56b22..be5e857832 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 11566bef74..1336d7d692 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2002-09-27 Kaz Kojima + + * gas/sh/pcrel2.s: New. + * gas/sh/pcrel2.d: New. + * gas/sh/basic.exp: Add pcrel2 test. + 2002-09-27 Jason Thorpe * gas/vax/elf-rel.[ds]: New test. diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp index b3815c17cf..dade86aca2 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 0000000000..9b363afc3a --- /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 0000000000..5a34111ccc --- /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