* config/tc-sh.c (md_apply_fix): Do not allow the generic code in
authorNick Clifton <nickc@redhat.com>
Wed, 12 Jul 2006 09:02:00 +0000 (09:02 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 12 Jul 2006 09:02:00 +0000 (09:02 +0000)
  fixup_segment() to repeat a range check on a value that have already
  been checked here.
* 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.

gas/ChangeLog
gas/config/tc-sh.c
gas/testsuite/ChangeLog
gas/testsuite/gas/sh/basic.exp
gas/testsuite/gas/sh/too_large.d [new file with mode: 0644]
gas/testsuite/gas/sh/too_large.s [new file with mode: 0644]

index e3c02c8f77f8a67626cac08cd7df9c33a0d40e17..0b72f175e367ccbeee07a0fb416f7a7147cdbf54 100644 (file)
@@ -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.
index 0abbe92e2116435a5c6f27b32c2b53c19dc0a2d2..9d651deb8992fa49134951123dbc72a9a63329ac 100644 (file)
@@ -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;
index a4cd0e9bcfa76b00d510c93e4156e24c4f3fb35d..fcec568a478b67c32b1a5f689cb39478154ea373 100644 (file)
@@ -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.
index 093048b87dc96c547b995c4123f1aeda9b6e9d3f..2f9424d98e6feb901672b839ca952d5ed690e7f4 100644 (file)
@@ -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 (file)
index 0000000..597e745
--- /dev/null
@@ -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 (file)
index 0000000..b67b8f7
--- /dev/null
@@ -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