mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
Implement show | set may-call-functions [on|off]
Inferior function calls are powerful but might lead to undesired results such as crashes when calling nested functions (frequently used in particular in Ada). This implements a GDB setting to disable calling inferior functions. Note: the idea is that if/when the 'slash command' patch is pushed, that this setting can be changed e.g. by using the shortcut /c. This is version 2 of the patch. It handles all the received comments, mostly replace 'can-call' by 'may-call', and avoid using 'inferior function call' in factor of 'calling function in the program'. 2019-04-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> gdb/ChangeLog * NEWS: Mention the new set|show may-call-functions. * infcall.c (may_call_functions_p): New variable. (show_may_call_functions_p): New function. (call_function_by_hand_dummy): Throws an error if not may-call-functions. (_initialize_infcall): Call add_setshow_boolean_cmd for may-call-functions. gdb/testsuite/ChangeLog * gdb.base/callexit.exp: Test may-call-functions off. gdb/doc/ChangeLog * gdb.texinfo (Calling): Document the new set|show may-call-functions.
This commit is contained in:
parent
a45328b93b
commit
136afab8c7
@ -1,3 +1,13 @@
|
||||
2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* NEWS: Mention the new set|show may-call-functions.
|
||||
* infcall.c (may_call_functions_p): New variable.
|
||||
(show_may_call_functions_p): New function.
|
||||
(call_function_by_hand_dummy): Throws an error if not
|
||||
may-call-functions.
|
||||
(_initialize_infcall): Call add_setshow_boolean_cmd for
|
||||
may-call-functions.
|
||||
|
||||
2019-04-25 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
PR c++/24367
|
||||
|
12
gdb/NEWS
12
gdb/NEWS
@ -27,6 +27,18 @@
|
||||
'array_indexes', 'symbols', 'unions', 'deref_refs', 'actual_objects',
|
||||
'static_members', 'max_elements', 'repeat_threshold', and 'format'.
|
||||
|
||||
* New commands
|
||||
|
||||
set may-call-functions [on|off]
|
||||
show may-call-functions
|
||||
This controls whether GDB will attempt to call functions in
|
||||
the program, such as with expressions in the print command. It
|
||||
defaults to on. Calling functions in the program being debugged
|
||||
can have undesired side effects. It is now possible to forbid
|
||||
such function calls. If function calls are forbidden, GDB will throw
|
||||
an error when a command (such as print expression) calls a function
|
||||
in the program.
|
||||
|
||||
*** Changes in GDB 8.3
|
||||
|
||||
* GDB and GDBserver now support access to additional registers on
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* gdb.texinfo (Calling): Document the new
|
||||
set|show may-call-functions.
|
||||
|
||||
2019-04-22 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.texinfo (Reverse Execution): Mention and xref process record
|
||||
|
@ -18693,6 +18693,28 @@ the default C@t{++} exception handler and the inferior terminated.
|
||||
Show the current setting of stack unwinding in the functions called by
|
||||
@value{GDBN}.
|
||||
|
||||
@item set may-call-functions
|
||||
@kindex set may-call-functions
|
||||
@cindex disabling calling functions in the program
|
||||
@cindex calling functions in the program, disabling
|
||||
Set permission to call functions in the program.
|
||||
This controls whether @value{GDBN} will attempt to call functions in
|
||||
the program, such as with expressions in the @code{print} command. It
|
||||
defaults to @code{on}.
|
||||
|
||||
To call a function in the program, @value{GDBN} has to temporarily
|
||||
modify the state of the inferior. This has potentially undesired side
|
||||
effects. Also, having @value{GDBN} call nested functions is likely to
|
||||
be erroneous and may even crash the program being debugged. You can
|
||||
avoid such hazards by forbidding @value{GDBN} from calling functions
|
||||
in the program being debugged. If calling functions in the program
|
||||
is forbidden, GDB will throw an error when a command (such as printing
|
||||
an expression) starts a function call in the program.
|
||||
|
||||
@item show may-call-functions
|
||||
@kindex show may-call-functions
|
||||
Show permission to call functions in the program.
|
||||
|
||||
@end table
|
||||
|
||||
@subsection Calling functions with no debug info
|
||||
|
@ -55,6 +55,17 @@
|
||||
asynchronous inferior function call implementation, and that in
|
||||
turn means restructuring the code so that it is event driven. */
|
||||
|
||||
static int may_call_functions_p = 1;
|
||||
static void
|
||||
show_may_call_functions_p (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c,
|
||||
const char *value)
|
||||
{
|
||||
fprintf_filtered (file,
|
||||
_("Permission to call functions in the program is %s.\n"),
|
||||
value);
|
||||
}
|
||||
|
||||
/* How you should pass arguments to a function depends on whether it
|
||||
was defined in K&R style or prototype style. If you define a
|
||||
function using the K&R syntax that takes a `float' argument, then
|
||||
@ -708,6 +719,10 @@ call_function_by_hand_dummy (struct value *function,
|
||||
struct gdb_exception e;
|
||||
char name_buf[RAW_FUNCTION_ADDRESS_SIZE];
|
||||
|
||||
if (!may_call_functions_p)
|
||||
error (_("Cannot call functions in the program: "
|
||||
"may-call-functions is off."));
|
||||
|
||||
if (!target_has_execution)
|
||||
noprocess ();
|
||||
|
||||
@ -1359,6 +1374,17 @@ When the function is done executing, GDB will silently stop."),
|
||||
void
|
||||
_initialize_infcall (void)
|
||||
{
|
||||
add_setshow_boolean_cmd ("may-call-functions", no_class,
|
||||
&may_call_functions_p, _("\
|
||||
Set permission to call functions in the program."), _("\
|
||||
Show permission to call functions in the program."), _("\
|
||||
When this permission is on, GDB may call functions in the program.\n\
|
||||
Otherwise, any sort of attempt to call a function in the program\n\
|
||||
will result in an error."),
|
||||
NULL,
|
||||
show_may_call_functions_p,
|
||||
&setlist, &showlist);
|
||||
|
||||
add_setshow_boolean_cmd ("coerce-float-to-double", class_obscure,
|
||||
&coerce_float_to_double_p, _("\
|
||||
Set coercion of floats to doubles when calling functions."), _("\
|
||||
|
@ -1,3 +1,7 @@
|
||||
2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* gdb.base/callexit.exp: Test may-call-functions off.
|
||||
|
||||
2019-04-25 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
PR c++/24367
|
||||
|
@ -37,6 +37,13 @@ if { ![runto_main] } {
|
||||
return 0
|
||||
}
|
||||
|
||||
# Verify set may-call-functions behaviour.
|
||||
gdb_test_no_output "set may-call-functions off"
|
||||
gdb_test "call callexit()" \
|
||||
"Cannot call functions in the program: may-call-functions is off." \
|
||||
"inferior function call refused in off state"
|
||||
gdb_test_no_output "set may-call-functions on"
|
||||
|
||||
# Call function (causing the program to exit), and see if gdb handles
|
||||
# it properly.
|
||||
gdb_test "call callexit()" \
|
||||
|
Loading…
Reference in New Issue
Block a user