gas/
authorJakub Jelinek <jakub@redhat.com>
Tue, 29 May 2007 13:18:59 +0000 (13:18 +0000)
committerJakub Jelinek <jakub@redhat.com>
Tue, 29 May 2007 13:18:59 +0000 (13:18 +0000)
2007-05-29  David S. Miller  <davem@davemloft.net>
    Jakub Jelinek  <jakub@redhat.com>

PR gas/4558
* config/tc-sparc.c (md_apply_fix): Fix relocation overflow checks
for BFD_RELOC_SPARC_WDISP16 and BFD_RELOC_SPARC_WDISP19.

gas/testsuite/
2007-05-29  Jakub Jelinek  <jakub@redhat.com>

PR gas/4558
* gas/sparc/sparc.exp: Add v9branch{1,2,3,4,5} tests.
* gas/sparc/v9branch1.d: New test.
* gas/sparc/v9branch1.s: New.
* gas/sparc/v9branch2.d: New test.
* gas/sparc/v9branch2.s: New.
* gas/sparc/v9branch3.d: New test.
* gas/sparc/v9branch3.s: New.
* gas/sparc/v9branch4.d: New test.
* gas/sparc/v9branch4.s: New.
* gas/sparc/v9branch5.d: New test.
* gas/sparc/v9branch5.s: New.

14 files changed:
gas/ChangeLog
gas/config/tc-sparc.c
gas/testsuite/ChangeLog
gas/testsuite/gas/sparc/sparc.exp
gas/testsuite/gas/sparc/v9branch1.d [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch1.s [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch2.d [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch2.s [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch3.d [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch3.s [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch4.d [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch4.s [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch5.d [new file with mode: 0644]
gas/testsuite/gas/sparc/v9branch5.s [new file with mode: 0644]

index 84021f5..147b11f 100644 (file)
@@ -1,3 +1,10 @@
+2007-05-29  David S. Miller  <davem@davemloft.net>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR gas/4558
+       * config/tc-sparc.c (md_apply_fix): Fix relocation overflow checks
+       for BFD_RELOC_SPARC_WDISP16 and BFD_RELOC_SPARC_WDISP19.
+
 2007-05-29  Alan Modra  <amodra@bigpond.net.au>
 
        * config/tc-spu.h: Wrap in #ifndef/#endif.  Delete coff macros.
index c98081c..84472b3 100644 (file)
@@ -1,6 +1,6 @@
 /* tc-sparc.c -- Assemble for the SPARC
    Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
    This file is part of GAS, the GNU Assembler.
 
@@ -3309,9 +3309,9 @@ md_apply_fix (fixP, valP, segment)
          break;
 
        case BFD_RELOC_SPARC_WDISP16:
-         /* FIXME: simplify.  */
-         if (((val > 0) && (val & ~0x3fffc))
-             || ((val < 0) && (~(val - 1) & ~0x3fffc)))
+         if ((val & 3)
+             || val >= 0x1fffc
+             || val <= -(offsetT) 0x20008)
            as_bad_where (fixP->fx_file, fixP->fx_line,
                          _("relocation overflow"));
          /* FIXME: The +1 deserves a comment.  */
@@ -3320,9 +3320,9 @@ md_apply_fix (fixP, valP, segment)
          break;
 
        case BFD_RELOC_SPARC_WDISP19:
-         /* FIXME: simplify.  */
-         if (((val > 0) && (val & ~0x1ffffc))
-             || ((val < 0) && (~(val - 1) & ~0x1ffffc)))
+         if ((val & 3)
+             || val >= 0xffffc
+             || val <= -(offsetT) 0x100008)
            as_bad_where (fixP->fx_file, fixP->fx_line,
                          _("relocation overflow"));
          /* FIXME: The +1 deserves a comment.  */
index e5404a0..e3a93e0 100644 (file)
@@ -1,3 +1,18 @@
+2007-05-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR gas/4558
+       * gas/sparc/sparc.exp: Add v9branch{1,2,3,4,5} tests.
+       * gas/sparc/v9branch1.d: New test.
+       * gas/sparc/v9branch1.s: New.
+       * gas/sparc/v9branch2.d: New test.
+       * gas/sparc/v9branch2.s: New.
+       * gas/sparc/v9branch3.d: New test.
+       * gas/sparc/v9branch3.s: New.
+       * gas/sparc/v9branch4.d: New test.
+       * gas/sparc/v9branch4.s: New.
+       * gas/sparc/v9branch5.d: New test.
+       * gas/sparc/v9branch5.s: New.
+
 2007-03-25  Paul Brook  <paul@codesourcery.com>
 
        * gas/arm/thumb32.s: Add tests for subs pc, lr.
index a2e362d..60ca24f 100644 (file)
@@ -48,6 +48,11 @@ if [istarget sparc*-*-*] {
        run_dump_test "pcrel64"
        run_dump_test "plt64"
     }
+    run_dump_test "v9branch1"
+    run_dump_test "v9branch2"
+    run_dump_test "v9branch3"
+    run_dump_test "v9branch4"
+    run_dump_test "v9branch5"
 }
 
 if [istarget sparc-*-vxworks*] {
diff --git a/gas/testsuite/gas/sparc/v9branch1.d b/gas/testsuite/gas/sparc/v9branch1.d
new file mode 100644 (file)
index 0000000..c2c05e4
--- /dev/null
@@ -0,0 +1,23 @@
+#as: -Av9
+#objdump: -dr --prefix-addresses
+#name: v9branch1
+
+.*: +file format .*sparc.*
+
+Disassembly of section .text:
+0x0+000000 brz  %o0, 0x0+01fffc
+0x0+000004 nop 
+       ...
+0x0+01fff8 nop 
+0x0+01fffc nop 
+       ...
+0x0+03fffc brz  %o0, 0x0+01fffc
+0x0+040000 nop 
+0x0+040004 bne  %icc, 0x0+140000
+0x0+040008 nop 
+       ...
+0x0+13fffc nop 
+0x0+140000 nop 
+       ...
+0x0+240000 bne  %icc, 0x0+140000
+0x0+240004 nop 
diff --git a/gas/testsuite/gas/sparc/v9branch1.s b/gas/testsuite/gas/sparc/v9branch1.s
new file mode 100644 (file)
index 0000000..15c4a6a
--- /dev/null
@@ -0,0 +1,18 @@
+   # Check if maximum possible branch distances for v9 branches are accepted
+   .text
+   brz,pt %o0, 1f
+   nop
+   .skip (128 * 1024 - 16)
+   nop
+1: nop
+   .skip (128 * 1024 - 4)
+   brz,pt %o0, 1b
+   nop
+   bne,pt %icc, 2f
+   nop
+   .skip (1024 * 1024 - 16)
+   nop
+2: nop
+   .skip (1024 * 1024 - 4)
+   bne,pt %icc, 2b
+   nop
diff --git a/gas/testsuite/gas/sparc/v9branch2.d b/gas/testsuite/gas/sparc/v9branch2.d
new file mode 100644 (file)
index 0000000..dcad03b
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch2
+#error: :3:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch2.s b/gas/testsuite/gas/sparc/v9branch2.s
new file mode 100644 (file)
index 0000000..6048a82
--- /dev/null
@@ -0,0 +1,7 @@
+   # Text for relocation overflow diagnostic
+   .text
+   brz,pt %o0, 1f
+   nop
+   .skip (128 * 1024 - 12)
+   nop
+1: nop
diff --git a/gas/testsuite/gas/sparc/v9branch3.d b/gas/testsuite/gas/sparc/v9branch3.d
new file mode 100644 (file)
index 0000000..f8105fd
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch3
+#error: :5:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch3.s b/gas/testsuite/gas/sparc/v9branch3.s
new file mode 100644 (file)
index 0000000..6bcfea0
--- /dev/null
@@ -0,0 +1,6 @@
+   # Text for relocation overflow diagnostic
+   .text
+1: nop
+   .skip (128 * 1024)
+   brz,pt %o0, 1b
+   nop
diff --git a/gas/testsuite/gas/sparc/v9branch4.d b/gas/testsuite/gas/sparc/v9branch4.d
new file mode 100644 (file)
index 0000000..4379388
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch4
+#error: :3:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch4.s b/gas/testsuite/gas/sparc/v9branch4.s
new file mode 100644 (file)
index 0000000..bf2306f
--- /dev/null
@@ -0,0 +1,7 @@
+   # Text for relocation overflow diagnostic
+   .text
+   bne,pt %icc, 1f
+   nop
+   .skip (1024 * 1024 - 12)
+   nop
+1: nop
diff --git a/gas/testsuite/gas/sparc/v9branch5.d b/gas/testsuite/gas/sparc/v9branch5.d
new file mode 100644 (file)
index 0000000..937a3ea
--- /dev/null
@@ -0,0 +1,3 @@
+#as: -Av9
+#name: v9branch5
+#error: :5:.*relocation.*overflow
diff --git a/gas/testsuite/gas/sparc/v9branch5.s b/gas/testsuite/gas/sparc/v9branch5.s
new file mode 100644 (file)
index 0000000..733aa2a
--- /dev/null
@@ -0,0 +1,6 @@
+   # Text for relocation overflow diagnostic
+   .text
+1: nop
+   .skip (1024 * 1024)
+   bne,pt %icc, 1b
+   nop