aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2002-09-28 00:41:27 +0000
committerDaniel Jacobowitz <drow@false.org>2002-09-28 00:41:27 +0000
commit8ba4dac030f0e32ab1589cf58e1dff856084bee9 (patch)
treeb269deafc59dc21ce9b9351e01e0ca422b858cb2
parent613d38b830681277708706b18fec7b327a5d0216 (diff)
downloadgdb-8ba4dac030f0e32ab1589cf58e1dff856084bee9.zip
gdb-8ba4dac030f0e32ab1589cf58e1dff856084bee9.tar.gz
gdb-8ba4dac030f0e32ab1589cf58e1dff856084bee9.tar.bz2
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. * testsuite/gas/sh/pcrel2.s: New. * testsuite/gas/sh/pcrel2.d: New. * testsuite/gas/sh/basic.exp: Add pcrel2 test.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-sh.c12
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/sh/basic.exp2
-rw-r--r--gas/testsuite/gas/sh/pcrel2.d5
-rw-r--r--gas/testsuite/gas/sh/pcrel2.s17
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