diff options
author | Don Breazeal <donb@codesourcery.com> | 2015-09-11 11:06:02 -0700 |
---|---|---|
committer | Don Breazeal <donb@codesourcery.com> | 2015-09-11 11:12:46 -0700 |
commit | d46addbb52a1f6d970bcac583b0b00ff4326e116 (patch) | |
tree | 9949852f9013c2a601d4266fbccbfdc4ba5f2285 /gdb/remote.c | |
parent | 94585166dfea8232c248044f9f4b1c217dc4ac2e (diff) | |
download | gdb-d46addbb52a1f6d970bcac583b0b00ff4326e116.zip gdb-d46addbb52a1f6d970bcac583b0b00ff4326e116.tar.gz gdb-d46addbb52a1f6d970bcac583b0b00ff4326e116.tar.bz2 |
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.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 59004f9..db83e6b 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -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 |