Fix xstormy16's handling of pc-relative relocs against defined symbols.
authorNick Clifton <nickc@redhat.com>
Fri, 2 May 2003 12:42:13 +0000 (12:42 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 2 May 2003 12:42:13 +0000 (12:42 +0000)
gas/ChangeLog
gas/config/tc-xstormy16.c
ld/testsuite/ChangeLog
ld/testsuite/ld-xstormy16/external.s [new file with mode: 0644]
ld/testsuite/ld-xstormy16/pcrel.d [new file with mode: 0644]
ld/testsuite/ld-xstormy16/pcrel.s [new file with mode: 0644]
ld/testsuite/ld-xstormy16/xstormy16.exp [new file with mode: 0644]

index fe1ef70e3cc72b5f3b9d12465f593c3b75d04652..33db4184dd5d12833375fad02a9d23a8c0d94588 100644 (file)
@@ -1,3 +1,9 @@
+2003-05-02  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-xstormy16.c (xstormy16_md_apply_fix3): Do not bias the
+       addend with the symbol's value for pc-relative relocations against
+       a defined symbol - this will be done automatically.
+
 2003-05-01  H.J. Lu <hjl@gnu.org>
 
        * config/obj-elf.c (obj_elf_type): Accept "notype" and
index e7b6efd96ed3f9fef5befce2881a0fce18c50360..2c80b1a1c77169c8760c53b46b2657698b4f640d 100644 (file)
@@ -556,8 +556,12 @@ xstormy16_md_apply_fix3 (fixP, valueP, seg)
 
   /* Tuck `value' away for use by tc_gen_reloc.
      See the comment describing fx_addnumber in write.h.
-     This field is misnamed (or misused :-).  */
-  fixP->fx_addnumber += value;
+     This field is misnamed (or misused :-).
+     We do not do this for pc-relative relocs against a
+     defined symbol, since it will be done for us.  */
+  if ((! fixP->fx_pcrel)
+      || (fixP->fx_addsy && ! S_IS_DEFINED (fixP->fx_addsy)))
+    fixP->fx_addnumber += value;
 }
 
 \f
index 307ffae1aaa74b26098d63e6519c0a7773081f05..4f0b90185affe51558745c0c2b5612b85fd5e387 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-02  Nick Clifton  <nickc@redhat.com>
+
+       * ld-xstormy16: New directory.
+       * ld-xstormy16/xstormy16.exp: New test script.
+       * ld-xstormy16/pcrel.s: Test assembler source file.
+       * ld-xstormy16/external.s: Test assembler source file.
+       * ld-xstormy16/pcrel.d: Test expected disassembly.
+
 2003-05-02  Andreas Jaeger  <aj@suse.de>
 
        * ld-elfvers/vers.exp (build_exec): Disable vers26b3 on x86-64-linux.
diff --git a/ld/testsuite/ld-xstormy16/external.s b/ld/testsuite/ld-xstormy16/external.s
new file mode 100644 (file)
index 0000000..2907e9e
--- /dev/null
@@ -0,0 +1,5 @@
+       .text
+       .global external
+external:
+       nop
+       
\ No newline at end of file
diff --git a/ld/testsuite/ld-xstormy16/pcrel.d b/ld/testsuite/ld-xstormy16/pcrel.d
new file mode 100644 (file)
index 0000000..b19fa5e
--- /dev/null
@@ -0,0 +1,34 @@
+
+.*:     file format elf32-xstormy16
+
+Disassembly of section .data:
+Disassembly of section .text:
+
+00008000 <_start>:
+    8000:      00 79 46 80     mov.w 0x0,#0x8046
+    8004:      00 79 42 80     mov.w 0x0,#0x8042
+    8008:      00 79 44 80     mov.w 0x0,#0x8044
+    800c:      00 79 2c 00     mov.w 0x0,#0x2c
+    8010:      00 79 32 00     mov.w 0x0,#0x32
+    8014:      00 79 30 00     mov.w 0x0,#0x30
+    8018:      2c d3           bc 0x8046
+    801a:      26 d3           bc 0x8042
+    801c:      26 d3           bc 0x8044
+    801e:      24 c3 00 00     bc Rx,#0x0,0x8046
+    8022:      1c c3 00 00     bc Rx,#0x0,0x8042
+    8026:      1a c3 00 00     bc Rx,#0x0,0x8044
+    802a:      00 20 18 30     bc r0,#0x0,0x8046
+    802e:      00 20 10 30     bc r0,#0x0,0x8042
+    8032:      00 20 0e 30     bc r0,#0x0,0x8044
+    8036:      10 0d 0c 30     bc r0,r1,0x8046
+    803a:      10 0d 04 30     bc r0,r1,0x8042
+    803e:      10 0d 02 30     bc r0,r1,0x8044
+
+00008042 <global>:
+    8042:      00 00           nop
+
+00008044 <local>:
+    8044:      00 00           nop
+
+00008046 <external>:
+    8046:      00 00           nop
diff --git a/ld/testsuite/ld-xstormy16/pcrel.s b/ld/testsuite/ld-xstormy16/pcrel.s
new file mode 100644 (file)
index 0000000..6128e51
--- /dev/null
@@ -0,0 +1,31 @@
+       .text
+       .global _start
+_start:        
+       mov 0, # external
+       mov 0, # global
+       mov 0, # local
+       
+       mov 0, # external - .
+       mov 0, # global - .
+       mov 0, # local - .
+
+       bc            external
+       bc            global
+       bc            local
+       
+       bc rx, #0,    external
+       bc rx, #0,    global
+       bc rx, #0,    local
+
+       bc r0, #0,    external
+       bc r0, #0,    global
+       bc r0, #0,    local
+       
+       bc  r0, r1,   external
+       bc  r0, r1,   global
+       bc  r0, r1,   local
+       .global global
+global:
+       nop
+local:
+       nop
diff --git a/ld/testsuite/ld-xstormy16/xstormy16.exp b/ld/testsuite/ld-xstormy16/xstormy16.exp
new file mode 100644 (file)
index 0000000..c16db91
--- /dev/null
@@ -0,0 +1,38 @@
+# Expect script for ld-xstormy16 tests
+#   Copyright (C) 2003 Free Software Foundation
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+# Test xstormy16 linking of pc-relative relocs.  This tests the assembler and
+# tools like objdump as well as the linker.
+
+if {!([istarget "xstormy16*-*-*"]) } {
+    return
+}
+
+# Set up a list as described in ld-lib.exp
+
+set xstormy16_tests {
+    {   "xstormy16 pc-relative relocs linker test"
+       ""
+       ""
+       { "pcrel.s" "external.s" }
+       { {objdump -Dz pcrel.d} }
+       "pcrel"
+    }
+}
+
+run_ld_link_tests $xstormy16_tests