diff options
author | Tom Tromey <tom@tromey.com> | 2017-11-01 22:46:40 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-11-04 10:27:20 -0600 |
commit | ab4b1c4699fecd1f2461cecae108e7c583c15bc4 (patch) | |
tree | 4bde19f0837fa87065a42e08c272e4e2fd2e49c5 /gdb/h8300-tdep.c | |
parent | 454dafbdf2d1293a9b18a6fe9e9c9e0911eb740c (diff) | |
download | gdb-ab4b1c4699fecd1f2461cecae108e7c583c15bc4.zip gdb-ab4b1c4699fecd1f2461cecae108e7c583c15bc4.tar.gz gdb-ab4b1c4699fecd1f2461cecae108e7c583c15bc4.tar.bz2 |
Use std::vector in h8300-tdep.c
This changes h8300-tdep.c to use std::vector, allowing the removal of
a cleanup.
gdb/ChangeLog
2017-11-04 Tom Tromey <tom@tromey.com>
* h8300-tdep.c (h8300_push_dummy_call): Use std::vector.
Diffstat (limited to 'gdb/h8300-tdep.c')
-rw-r--r-- | gdb/h8300-tdep.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c index 011afca..acc2da9 100644 --- a/gdb/h8300-tdep.c +++ b/gdb/h8300-tdep.c @@ -662,18 +662,17 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function, for (argument = 0; argument < nargs; argument++) { - struct cleanup *back_to; struct type *type = value_type (args[argument]); int len = TYPE_LENGTH (type); char *contents = (char *) value_contents (args[argument]); /* Pad the argument appropriately. */ int padded_len = align_up (len, wordsize); - gdb_byte *padded = (gdb_byte *) xmalloc (padded_len); - back_to = make_cleanup (xfree, padded); + /* Use std::vector here to get zero initialization. */ + std::vector<gdb_byte> padded (padded_len); - memset (padded, 0, padded_len); - memcpy (len < wordsize ? padded + padded_len - len : padded, + memcpy ((len < wordsize ? padded.data () + padded_len - len + : padded.data ()), contents, len); /* Could the argument fit in the remaining registers? */ @@ -684,7 +683,7 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function, if (len > wordsize && len % wordsize) { /* I feel so unclean. */ - write_memory (sp + stack_offset, padded, padded_len); + write_memory (sp + stack_offset, padded.data (), padded_len); stack_offset += padded_len; /* That's right --- even though we passed the argument @@ -702,7 +701,7 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function, for (offset = 0; offset < padded_len; offset += wordsize) { ULONGEST word - = extract_unsigned_integer (padded + offset, + = extract_unsigned_integer (&padded[offset], wordsize, byte_order); regcache_cooked_write_unsigned (regcache, reg++, word); } @@ -711,15 +710,13 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function, else { /* It doesn't fit in registers! Onto the stack it goes. */ - write_memory (sp + stack_offset, padded, padded_len); + write_memory (sp + stack_offset, padded.data (), padded_len); stack_offset += padded_len; /* Once one argument has spilled onto the stack, all subsequent arguments go on the stack. */ reg = E_ARGLAST_REGNUM + 1; } - - do_cleanups (back_to); } /* Store return address. */ |