diff options
author | Stan Shebs <shebs@codesourcery.com> | 2010-06-12 00:05:22 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2010-06-12 00:05:22 +0000 |
commit | d914c394a99165d5406c625a3675761e728b33b7 (patch) | |
tree | 9076dfce3479288e1a9c2cd8c075015657ebe9c9 /gdb/target.h | |
parent | 139f2ac873b8899228e9f99dc3b50d3416336bc7 (diff) | |
download | gdb-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.h | 25 |
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 */ |