Fix unintitialised TIC6X data
authorAlan Modra <amodra@gmail.com>
Mon, 16 Jun 2014 01:26:56 +0000 (10:56 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 16 Jun 2014 03:01:53 +0000 (12:31 +0930)
MALLOC_PERTURB_=1 results in the following fails due to uninitialised
exindx data:

FAIL: C6X unwinding directives 1 (little endian)
FAIL: C6X unwinding directives 2 (big endian)
FAIL: C6X unwinding directives 3 (segment change)
FAIL: ld-tic6x/unwind-1
FAIL: ld-tic6x/unwind-2
FAIL: ld-tic6x/unwind-3
FAIL: ld-tic6x/unwind-4
FAIL: ld-tic6x/unwind-6

* config/tc-tic6x.c (s_tic6x_ehtype): Clear after frag_more.
(tic6x_output_exidx_entry): Likewise.
(md_apply_fix): Simplify 1 byte md_number_to_chars.

gas/ChangeLog
gas/config/tc-tic6x.c

index 7e39715..55a0d00 100644 (file)
@@ -1,5 +1,11 @@
 2014-06-16  Alan Modra  <amodra@gmail.com>
 
+       * config/tc-tic6x.c (s_tic6x_ehtype): Clear after frag_more.
+       (tic6x_output_exidx_entry): Likewise.
+       (md_apply_fix): Simplify 1 byte md_number_to_chars.
+
+2014-06-16  Alan Modra  <amodra@gmail.com>
+
        * config/tc-tic54x.c (tic54x_mlib): Don't write garbage past
        end of archive to temp file.
        (tic54x_start_line_hook): Start scan for parallel on next line,
index aca07d3..3f2912a 100644 (file)
@@ -536,6 +536,7 @@ s_tic6x_ehtype (int ignored ATTRIBUTE_UNUSED)
     }
 
   p = frag_more (4);
+  memset (p, 0, 4);
   fix_new_exp (frag_now, p - frag_now->fr_literal, 4,
               &exp, 0, BFD_RELOC_C6000_EHTYPE);
 
@@ -3823,7 +3824,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          if (value < -0x80 || value > 0xff)
            as_bad_where (fixP->fx_file, fixP->fx_line,
                          _("value too large for 1-byte field"));
-         md_number_to_chars (buf, value, 1);
+         *buf = value;
        }
       break;
 
@@ -4835,6 +4836,7 @@ tic6x_output_exidx_entry (void)
   record_alignment (now_seg, 2);
 
   ptr = frag_more (8);
+  memset (ptr, 0, 8);
   where = frag_now_fix () - 8;
 
   /* Self relative offset of the function start.  */