diff options
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-sh.c | 5 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/basic.exp | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/too_large.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/sh/too_large.s | 39 |
6 files changed, 68 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index e3c02c8..0b72f17 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2006-07-12 Nick Clifton <nickc@redhat.com> + + * config/tc-sh.c (md_apply_fix): Do not allow the generic code in + fixup_segment() to repeat a range check on a value that have + already been checked here. + 2006-07-07 James E Wilson <wilson@specifix.com> * config/tc-mips.c (mips_cpu_info_table): Add sb1a. diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index 0abbe92..9d651de 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -4080,6 +4080,11 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) } if (max != 0 && (val < min || val > max)) as_bad_where (fixP->fx_file, fixP->fx_line, _("offset out of range")); + else if (max != 0) + /* Stop the generic code from trying to overlow check the value as well. + It may not have the correct value anyway, as we do not store val back + into *valP. */ + fixP->fx_no_overflow = 1; if (fixP->fx_addsy == NULL && fixP->fx_pcrel == 0) fixP->fx_done = 1; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index a4cd0e9..fcec568 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2006-07-12 Nick Clifton <nickc@redhat.com> + + * gas/sh/basic.exp: Run "too_large" dump test. + * gas/sh/too_large.s: New test file. Check that .byte directives + do not generate a bogus overflow message. + * gas/sh/too_large.s: New test control file. + 2006-07-05 Julian Brown <julian@codesourcery.com> * gas/arm/vfp-neon-syntax.d: Tweak expected fmsrr syntax. diff --git a/gas/testsuite/gas/sh/basic.exp b/gas/testsuite/gas/sh/basic.exp index 093048b..2f9424d 100644 --- a/gas/testsuite/gas/sh/basic.exp +++ b/gas/testsuite/gas/sh/basic.exp @@ -167,6 +167,8 @@ if [istarget sh*-*-*] then { # Test --allow-reg-prefix. run_dump_test "reg-prefix" + + run_dump_test "too_large" } } diff --git a/gas/testsuite/gas/sh/too_large.d b/gas/testsuite/gas/sh/too_large.d new file mode 100644 index 0000000..597e745 --- /dev/null +++ b/gas/testsuite/gas/sh/too_large.d @@ -0,0 +1,9 @@ +#name: Check for bogus overflow errors in .byte directives +#as: -big -relax -isa=sh4a +#nm: -n + +[ ]*U \.L318 +[ ]*U \.L319 +[ ]*U \.L320 +[ ]*U \.L321 +0+00100 t \.L307 diff --git a/gas/testsuite/gas/sh/too_large.s b/gas/testsuite/gas/sh/too_large.s new file mode 100644 index 0000000..b67b8f7 --- /dev/null +++ b/gas/testsuite/gas/sh/too_large.s @@ -0,0 +1,39 @@ + .file "too_large.c" + .text + nop + .align 8 +.L307: + .byte .L302-.L307 + .byte .L303-.L307 + .byte .L304-.L307 + .byte .L305-.L307 +.L304: + mov.l .L318,r1 + jsr @r1 + mov r8,r4 + lds r0,fpul + fsts fpul,fr1 + flds fr1,fpul + sts fpul,r0 + mov r14,r15 + lds.l @r15+,pr + mov.l @r15+,r14 + mov.l @r15+,r8 + rts + nop +.L305: + mov.l .L319,r7 + jsr @r7 + mov r8,r4 + lds r0,fpul + bra .L307 + fsts fpul,fr1 +.L303: + mov.l .L320,r6 + jsr @r6 + mov r8,r4 + lds r0,fpul + bra .L307 + fsts fpul,fr1 +.L302: + mov.l .L321,r5 |