gdb/record-full: Use xmalloc instead of alloca for temporary memory storage.
authorMarcin Kościelnicki <koriakin@0x04.net>
Mon, 2 Nov 2015 01:12:58 +0000 (02:12 +0100)
committerMarcin Kościelnicki <koriakin@0x04.net>
Wed, 4 Nov 2015 14:26:59 +0000 (15:26 +0100)
On the newly added s390 target, it's possible for a single instruction
to write practically unbounded amount of memory (eg. MVCLE).  This caused
a stack overflow when alloca was used.

gdb/ChangeLog:

* record-full.c (record_full_exec_insn): Use xmalloc for temporary
memory storage.

gdb/ChangeLog
gdb/record-full.c

index a95fe4c..d286821 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-04  Marcin Kościelnicki  <koriakin@0x04.net>
+
+       * record-full.c (record_full_exec_insn): Use xmalloc for temporary
+       memory storage.
+
 2015-11-04  Markus Metzger  <markus.t.metzger@intel.com>
 
        * record.c (get_insn_history_modifiers): Set DISASSEMBLY_SOURCE
index 595e357..03b3d41 100644 (file)
@@ -726,7 +726,8 @@ record_full_exec_insn (struct regcache *regcache,
        /* Nothing to do if the entry is flagged not_accessible.  */
         if (!entry->u.mem.mem_entry_not_accessible)
           {
-            gdb_byte *mem = (gdb_byte *) alloca (entry->u.mem.len);
+            gdb_byte *mem = (gdb_byte *) xmalloc (entry->u.mem.len);
+            struct cleanup *cleanup = make_cleanup (xfree, mem);
 
             if (record_debug > 1)
               fprintf_unfiltered (gdb_stdlog,
@@ -771,6 +772,8 @@ record_full_exec_insn (struct regcache *regcache,
                      record_full_stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
                  }
               }
+
+           do_cleanups (cleanup);
           }
       }
       break;