Extended-remote catch exec

This patch implements exec catchpoints for extended-remote Linux
targets.  The implementation follows the same approach used for
fork catchpoints, implementing extended-remote target routines for
inserting and removing the catchpoints by just checking if exec events
are supported.  Existing host-side code and previous support for
extended-remote exec events takes care of the rest.

gdb/ChangeLog:

	* remote.c (remote_exec_event_p): New function.
	(remote_insert_exec_catchpoint): New function.
	(remote_remove_exec_catchpoint): New function.
	(init_extended_remote_ops): Initialize extended_remote_ops
	members to_insert_exec_catchpoint and
	to_remove_exec_catchpoint.
This commit is contained in:
Don Breazeal
2015-09-11 11:06:02 -07:00
parent 94585166df
commit d46addbb52
2 changed files with 41 additions and 0 deletions

View File

@@ -1596,6 +1596,14 @@ remote_vfork_event_p (struct remote_state *rs)
return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
}
/* Returns true if exec events are supported. */
static int
remote_exec_event_p (struct remote_state *rs)
{
return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
}
/* Insert fork catchpoint target routine. If fork events are enabled
then return success, nothing more to do. */
@@ -1636,6 +1644,26 @@ remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
return 0;
}
/* Insert exec catchpoint target routine. If exec events are
enabled, just return success. */
static int
remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
{
struct remote_state *rs = get_remote_state ();
return !remote_exec_event_p (rs);
}
/* Remove exec catchpoint target routine. Nothing to do, just
return success. */
static int
remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
{
return 0;
}
/* Tokens for use by the asynchronous signal handlers for SIGINT. */
static struct async_signal_handler *async_sigint_remote_twice_token;
static struct async_signal_handler *async_sigint_remote_token;
@@ -12793,6 +12821,10 @@ Specify the serial device it is connected to (e.g. /dev/ttya).";
= remote_insert_vfork_catchpoint;
extended_remote_ops.to_remove_vfork_catchpoint
= remote_remove_vfork_catchpoint;
extended_remote_ops.to_insert_exec_catchpoint
= remote_insert_exec_catchpoint;
extended_remote_ops.to_remove_exec_catchpoint
= remote_remove_exec_catchpoint;
}
static int