From c699f0877959d373f7c0fc03ce517ffba3cfac03 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 29 May 2007 13:18:59 +0000 Subject: [PATCH] gas/ 2007-05-29 David S. Miller Jakub Jelinek 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 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. --- gas/ChangeLog | 7 +++++++ gas/config/tc-sparc.c | 14 +++++++------- gas/testsuite/ChangeLog | 15 +++++++++++++++ gas/testsuite/gas/sparc/sparc.exp | 5 +++++ gas/testsuite/gas/sparc/v9branch1.d | 23 +++++++++++++++++++++++ gas/testsuite/gas/sparc/v9branch1.s | 18 ++++++++++++++++++ gas/testsuite/gas/sparc/v9branch2.d | 3 +++ gas/testsuite/gas/sparc/v9branch2.s | 7 +++++++ gas/testsuite/gas/sparc/v9branch3.d | 3 +++ gas/testsuite/gas/sparc/v9branch3.s | 6 ++++++ gas/testsuite/gas/sparc/v9branch4.d | 3 +++ gas/testsuite/gas/sparc/v9branch4.s | 7 +++++++ gas/testsuite/gas/sparc/v9branch5.d | 3 +++ gas/testsuite/gas/sparc/v9branch5.s | 6 ++++++ 14 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 gas/testsuite/gas/sparc/v9branch1.d create mode 100644 gas/testsuite/gas/sparc/v9branch1.s create mode 100644 gas/testsuite/gas/sparc/v9branch2.d create mode 100644 gas/testsuite/gas/sparc/v9branch2.s create mode 100644 gas/testsuite/gas/sparc/v9branch3.d create mode 100644 gas/testsuite/gas/sparc/v9branch3.s create mode 100644 gas/testsuite/gas/sparc/v9branch4.d create mode 100644 gas/testsuite/gas/sparc/v9branch4.s create mode 100644 gas/testsuite/gas/sparc/v9branch5.d create mode 100644 gas/testsuite/gas/sparc/v9branch5.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 84021f5bdbf..147b11fdc3e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2007-05-29 David S. Miller + Jakub Jelinek + + 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 * config/tc-spu.h: Wrap in #ifndef/#endif. Delete coff macros. diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c index c98081c959a..84472b3cbd5 100644 --- a/gas/config/tc-sparc.c +++ b/gas/config/tc-sparc.c @@ -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. */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index e5404a0f24a..e3a93e09787 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2007-05-29 Jakub Jelinek + + 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 * gas/arm/thumb32.s: Add tests for subs pc, lr. diff --git a/gas/testsuite/gas/sparc/sparc.exp b/gas/testsuite/gas/sparc/sparc.exp index a2e362dbba1..60ca24f122c 100644 --- a/gas/testsuite/gas/sparc/sparc.exp +++ b/gas/testsuite/gas/sparc/sparc.exp @@ -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 index 00000000000..c2c05e4d88b --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch1.d @@ -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 index 00000000000..15c4a6aecd6 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch1.s @@ -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 index 00000000000..dcad03b336f --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch2.d @@ -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 index 00000000000..6048a82d7b8 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch2.s @@ -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 index 00000000000..f8105fd7039 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch3.d @@ -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 index 00000000000..6bcfea08313 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch3.s @@ -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 index 00000000000..4379388eb57 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch4.d @@ -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 index 00000000000..bf2306f34f0 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch4.s @@ -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 index 00000000000..937a3eacb7e --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch5.d @@ -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 index 00000000000..733aa2a3ed2 --- /dev/null +++ b/gas/testsuite/gas/sparc/v9branch5.s @@ -0,0 +1,6 @@ + # Text for relocation overflow diagnostic + .text +1: nop + .skip (1024 * 1024) + bne,pt %icc, 1b + nop -- 2.30.2