aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcall.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-02-16 16:11:29 -0700
committerTom Tromey <tom@tromey.com>2018-02-21 08:54:49 -0700
commit6ccb583f751e020a6db768d517c2dd3ba6d93cc4 (patch)
treefb83d2b4e08791e1cbe3d0f90680d4ec8d3ed19e /gdb/infcall.c
parentc113ed0ca238bbcbc161f059ffe9b064e3ece333 (diff)
downloadgdb-6ccb583f751e020a6db768d517c2dd3ba6d93cc4.zip
gdb-6ccb583f751e020a6db768d517c2dd3ba6d93cc4.tar.gz
gdb-6ccb583f751e020a6db768d517c2dd3ba6d93cc4.tar.bz2
Remove a cleanup from call_function_by_hand_dummy
This removes a cleanup from call_function_by_hand_dummy, replacing manual allocation with std::vector. Regression tested by the buildbot. gdb/ChangeLog 2018-02-21 Tom Tromey <tom@tromey.com> * infcall.c (call_function_by_hand_dummy): Use std::vector.
Diffstat (limited to 'gdb/infcall.c')
-rw-r--r--gdb/infcall.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 8b75297..b7f4a17 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -39,6 +39,7 @@
#include "top.h"
#include "interps.h"
#include "thread-fsm.h"
+#include <algorithm>
/* If we can't find a function's name from its address,
we print this instead. */
@@ -732,7 +733,6 @@ call_function_by_hand_dummy (struct value *function,
struct type *ftype = check_typedef (value_type (function));
CORE_ADDR bp_addr;
struct frame_id dummy_id;
- struct cleanup *args_cleanup;
struct frame_info *frame;
struct gdbarch *gdbarch;
struct cleanup *terminate_bp_cleanup;
@@ -1054,21 +1054,16 @@ call_function_by_hand_dummy (struct value *function,
}
}
+ std::vector<struct value *> new_args;
if (hidden_first_param_p)
{
- struct value **new_args;
-
/* Add the new argument to the front of the argument list. */
- new_args = XNEWVEC (struct value *, nargs + 1);
- new_args[0] = value_from_pointer (lookup_pointer_type (values_type),
- struct_addr);
- memcpy (&new_args[1], &args[0], sizeof (struct value *) * nargs);
- args = new_args;
+ new_args.push_back
+ (value_from_pointer (lookup_pointer_type (values_type), struct_addr));
+ std::copy (&args[0], &args[nargs], std::back_inserter (new_args));
+ args = new_args.data ();
nargs++;
- args_cleanup = make_cleanup (xfree, args);
}
- else
- args_cleanup = make_cleanup (null_cleanup, NULL);
/* Create the dummy stack frame. Pass in the call dummy address as,
presumably, the ABI code knows where, in the call dummy, the
@@ -1077,8 +1072,6 @@ call_function_by_hand_dummy (struct value *function,
bp_addr, nargs, args,
sp, struct_return, struct_addr);
- do_cleanups (args_cleanup);
-
/* Set up a frame ID for the dummy frame so we can pass it to
set_momentary_breakpoint. We need to give the breakpoint a frame
ID so that the breakpoint code can correctly re-identify the