OSDN Git Service

2002-09-27 Kaz Kojima <kkojima@rr.iij4u.or.jp>
authorDaniel Jacobowitz <dan@debian.org>
Sat, 28 Sep 2002 00:41:27 +0000 (00:41 +0000)
committerDaniel Jacobowitz <dan@debian.org>
Sat, 28 Sep 2002 00:41:27 +0000 (00:41 +0000)
        * 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.

gas/ChangeLog
gas/config/tc-sh.c
gas/testsuite/ChangeLog
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/pcrel2.d [new file with mode: 0644]
gas/testsuite/gas/sh/pcrel2.s [new file with mode: 0644]

index 705ef53..641f7c1 100644 (file)
@@ -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.
index b74dc56..be5e857 100644 (file)
@@ -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
index 11566be..1336d7d 100644 (file)
@@ -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.
index b3815c1..dade86a 100644 (file)
@@ -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 (file)
index 0000000..9b363af
--- /dev/null
@@ -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 (file)
index 0000000..5a34111
--- /dev/null
@@ -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