diff options
author | siddhesh <siddhesh> | 2012-08-24 03:57:22 +0000 |
---|---|---|
committer | siddhesh <siddhesh> | 2012-08-24 03:57:22 +0000 |
commit | 3c9f743f7cbc3e5a5474ae896465a3b4b55b56af (patch) | |
tree | 4036f5aca7ac73bc9ed5ef48db2efe647f691a5e /gdb/mt-tdep.c | |
parent | 21ebaf891ac164159ff2c16537947a2dedb96570 (diff) | |
download | gdb-3c9f743f7cbc3e5a5474ae896465a3b4b55b56af.tar.gz |
* h8300-tdep.c (h8300_push_dummy_call): Replace unsafe alloca
with xmalloc/cleanup.
* mt-tdep.c (mt_push_dummy_call): Likewise.
* tilegx-tdep.c (tilegx_push_dummy_call): Likewise.
* xstormy16-tdep.c (xstormy16_push_dummy_call): Likewise.
Diffstat (limited to 'gdb/mt-tdep.c')
-rw-r--r-- | gdb/mt-tdep.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gdb/mt-tdep.c b/gdb/mt-tdep.c index ee4b6eb5d4b..0ae51b35b7c 100644 --- a/gdb/mt-tdep.c +++ b/gdb/mt-tdep.c @@ -845,16 +845,20 @@ mt_push_dummy_call (struct gdbarch *gdbarch, struct value *function, for (j = nargs - 1; j >= i; j--) { gdb_byte *val; + struct cleanup *back_to; + const gdb_byte *contents = value_contents (args[j]); /* Right-justify the value in an aligned-length buffer. */ typelen = TYPE_LENGTH (value_type (args[j])); slacklen = (wordsize - (typelen % wordsize)) % wordsize; - val = alloca (typelen + slacklen); - memcpy (val, value_contents (args[j]), typelen); + val = xmalloc (typelen + slacklen); + back_to = make_cleanup (xfree, val); + memcpy (val, contents, typelen); memset (val + typelen, 0, slacklen); /* Now write this data to the stack. */ stack_dest -= typelen + slacklen; write_memory (stack_dest, val, typelen + slacklen); + do_cleanups (back_to); } /* Finally, if a param needs to be split between registers and stack, |