diff options
author | Thiago Jung Bauermann <bauerman@br.ibm.com> | 2011-05-13 04:34:25 +0000 |
---|---|---|
committer | Thiago Jung Bauermann <bauerman@br.ibm.com> | 2011-05-13 04:34:25 +0000 |
commit | 028d0ed5d19d1c164d9ee4f4f85743ca7e955e52 (patch) | |
tree | 971789eee44563ba8452513041730d09151eac1e /gdb/top.c | |
parent | c9eaa05f39a20ebdd807dcf8141a22e08bb613f1 (diff) | |
download | fsf-binutils-gdb-028d0ed5d19d1c164d9ee4f4f85743ca7e955e52.zip fsf-binutils-gdb-028d0ed5d19d1c164d9ee4f4f85743ca7e955e52.tar.gz fsf-binutils-gdb-028d0ed5d19d1c164d9ee4f4f85743ca7e955e52.tar.bz2 |
gdb/
* mi/mi-main.c (mi_cmd_execute): Use cleanup from
prepare_execute_command.
* top.c (prepare_execute_command): Return cleanup.
(execute_command): Use cleanup from prepare_execute_command.
* top.h (prepare_execute_command): Change prototype to return
cleanup.
* defs.h (struct value): Add opaque declaration.
(make_cleanup_value_free_to_mark): Add prototype.
* utils.c (do_value_free_to_mark): New function.
(make_cleanup_value_free_to_mark): Likewise.
gdb/testsuite/
* gdb.python/py-function.exp: Test setting a value from a function
which executes a command.
Diffstat (limited to 'gdb/top.c')
-rw-r--r-- | gdb/top.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -339,10 +339,14 @@ do_chdir_cleanup (void *old_dir) } #endif -void +struct cleanup * prepare_execute_command (void) { - free_all_values (); + struct value *mark; + struct cleanup *cleanup; + + mark = value_mark (); + cleanup = make_cleanup_value_free_to_mark (mark); /* With multiple threads running while the one we're examining is stopped, the dcache can get stale without us being able to detect @@ -350,6 +354,8 @@ prepare_execute_command (void) help things like backtrace. */ if (non_stop) target_dcache_invalidate (); + + return cleanup; } /* Execute the line P as a command, in the current user context. @@ -358,12 +364,13 @@ prepare_execute_command (void) void execute_command (char *p, int from_tty) { + struct cleanup *cleanup; struct cmd_list_element *c; enum language flang; static int warned = 0; char *line; - prepare_execute_command (); + cleanup = prepare_execute_command (); /* Force cleanup of any alloca areas if using C alloca instead of a builtin alloca. */ @@ -462,6 +469,8 @@ execute_command (char *p, int from_tty) warned = 1; } } + + do_cleanups (cleanup); } /* Run execute_command for P and FROM_TTY. Capture its output into the |