X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fh8300-tdep.c;h=bf5b9ec6583e295fcbb3a03b9a4a4a567d81a42d;hb=9a897d43f034544cd09292d0fb6fded7eb64ae8d;hp=7edc3ccaed016c36699a2887e4cfbd08b5a847ff;hpb=481695ed5f6e0a8a9c9c50bfac1cdd2b3151e6c9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c index 7edc3ccaed..bf5b9ec658 100644 --- a/gdb/h8300-tdep.c +++ b/gdb/h8300-tdep.c @@ -1,6 +1,6 @@ /* Target-machine dependent code for Renesas H8/300, for GDB. - Copyright (C) 1988-2017 Free Software Foundation, Inc. + Copyright (C) 1988-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -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 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. */ @@ -742,7 +739,7 @@ static void h8300_extract_return_value (struct type *type, struct regcache *regcache, gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); int len = TYPE_LENGTH (type); ULONGEST c, addr; @@ -779,7 +776,7 @@ static void h8300h_extract_return_value (struct type *type, struct regcache *regcache, gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST c; @@ -844,7 +841,7 @@ static void h8300_store_return_value (struct type *type, struct regcache *regcache, const gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST val; @@ -873,7 +870,7 @@ static void h8300h_store_return_value (struct type *type, struct regcache *regcache, const gdb_byte *valbuf) { - struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct gdbarch *gdbarch = regcache->arch (); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); ULONGEST val; @@ -1170,7 +1167,7 @@ pseudo_from_raw_register (struct gdbarch *gdbarch, struct regcache *regcache, enum register_status status; ULONGEST val; - status = regcache_raw_read_unsigned (regcache, raw_regno, &val); + status = regcache->raw_read (raw_regno, &val); if (status == REG_VALID) store_unsigned_integer (buf, register_size (gdbarch, pseudo_regno), @@ -1208,7 +1205,7 @@ h8300_pseudo_register_read (struct gdbarch *gdbarch, regno, E_EXR_REGNUM); } else - return regcache_raw_read (regcache, regno, buf); + return regcache->raw_read (regno, buf); } static void