aboutsummaryrefslogtreecommitdiff
path: root/gdb/target.h
diff options
context:
space:
mode:
authorStan Shebs <shebs@codesourcery.com>2010-06-12 00:05:22 +0000
committerStan Shebs <shebs@codesourcery.com>2010-06-12 00:05:22 +0000
commitd914c394a99165d5406c625a3675761e728b33b7 (patch)
tree9076dfce3479288e1a9c2cd8c075015657ebe9c9 /gdb/target.h
parent139f2ac873b8899228e9f99dc3b50d3416336bc7 (diff)
downloadgdb-d914c394a99165d5406c625a3675761e728b33b7.zip
gdb-d914c394a99165d5406c625a3675761e728b33b7.tar.gz
gdb-d914c394a99165d5406c625a3675761e728b33b7.tar.bz2
2010-06-11 Stan Shebs <stan@codesourcery.com>
Add per-operation permission flags. * target.h (struct target_ops): New method to_set_permissions. (target_set_permissions): New macro. (target_insert_breakpoint): Change macro to function. (target_remove_breakpoint): Ditto. (target_stop): Ditto. (may_write_registers): Declare. (may_write_memory): Declare. (may_insert_breakpoints): Declare. (may_insert_tracepoints): Declare. (may_insert_fast_tracepoints): Declare. (may_stop): Declare. * target.c (may_write_registers, may_write_registers_1): New globals. (may_write_memory, may_write_memory_1): New globals. (may_insert_breakpoints, may_insert_breakpoints_1): New globals. (may_insert_tracepoints, may_insert_tracepoints_1): New globals. (may_insert_fast_tracepoints, may_insert_fast_tracepoints_1): New globals. (may_stop, may_stop_1): New global. (target_xfer_partial): Test for write permission. (target_store_registers): Ditto. (target_insert_breakpoint): New function. (target_remove_breakpoint): New function. (target_stop): New function. (_initialize_targets): Add new set/show variables. (set_write_memory_permission): New function. (update_target_permissions): New function. (set_target_permissions): New function. (update_current_target): Default to_set_permissions. (_initialize_targets): Use new globals and setter function. * tracepoint.c (start_tracing): Test for permission. * inferior.h (update_observer_mode): Declare. * infrun.c (non_stop_1): Define earlier. (observer_mode, observer_mode_1): New globals. (set_observer_mode, show_observer_mode): New functions. (update_observer_mode): New function. (_initialize_infrun): Define "set observer" command. * remote.c (PACKET_QAllow): New optional packet. (remote_protocol_features): Add QAllow. (remote_set_permissions): New function. (remote_start_remote): Call it. (init_remote_ops): Add it to target vector. (_initialize_remote): Add config command for QAllow. * gdb.texinfo (Observer Mode): New section. (General Query Packets): Document QAllow. * gdb.base/permissions.exp: New file.
Diffstat (limited to 'gdb/target.h')
-rw-r--r--gdb/target.h25
1 files changed, 20 insertions, 5 deletions
diff --git a/gdb/target.h b/gdb/target.h
index 6f4b660..870a1eb6 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -686,6 +686,9 @@ struct target_ops
a Windows OS specific feature. */
int (*to_get_tib_address) (ptid_t ptid, CORE_ADDR *addr);
+ /* Send the new settings of write permission variables. */
+ void (*to_set_permissions) (void);
+
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
*/
@@ -889,14 +892,14 @@ extern int inferior_has_called_syscall (ptid_t pid, int *syscall_number);
/* Insert a breakpoint at address BP_TGT->placed_address in the target
machine. Result is 0 for success, or an errno value. */
-#define target_insert_breakpoint(gdbarch, bp_tgt) \
- (*current_target.to_insert_breakpoint) (gdbarch, bp_tgt)
+extern int target_insert_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt);
/* Remove a breakpoint at address BP_TGT->placed_address in the target
machine. Result is 0 for success, or an errno value. */
-#define target_remove_breakpoint(gdbarch, bp_tgt) \
- (*current_target.to_remove_breakpoint) (gdbarch, bp_tgt)
+extern int target_remove_breakpoint (struct gdbarch *gdbarch,
+ struct bp_target_info *bp_tgt);
/* Initialize the terminal settings we record for the inferior,
before we actually run the inferior. */
@@ -1091,7 +1094,7 @@ extern void target_find_new_threads (void);
Unix, this should act like SIGSTOP). This function is normally
used by GUIs to implement a stop button. */
-#define target_stop(ptid) (*current_target.to_stop) (ptid)
+extern void target_stop (ptid_t ptid);
/* Send the specified COMMAND to the target's monitor
(shell,interpreter) for execution. The result of the query is
@@ -1378,6 +1381,9 @@ extern int target_search_memory (CORE_ADDR start_addr,
#define target_get_tib_address(ptid, addr) \
(*current_target.to_get_tib_address) ((ptid), (addr))
+#define target_set_permissions() \
+ (*current_target.to_set_permissions) ()
+
/* Command logging facility. */
#define target_log_command(p) \
@@ -1540,6 +1546,15 @@ extern enum target_signal target_signal_from_command (int);
to restore it back to the current value. */
extern struct cleanup *make_show_memory_breakpoints_cleanup (int show);
+extern int may_write_registers;
+extern int may_write_memory;
+extern int may_insert_breakpoints;
+extern int may_insert_tracepoints;
+extern int may_insert_fast_tracepoints;
+extern int may_stop;
+
+extern void update_target_permissions (void);
+
/* Imported from machine dependent code */