2000-02-23 00:25:43 +00:00
|
|
|
/* MI Command Set - breakpoint and watchpoint commands.
|
2014-01-01 03:54:24 +00:00
|
|
|
Copyright (C) 2000-2014 Free Software Foundation, Inc.
|
2000-02-23 06:19:22 +00:00
|
|
|
Contributed by Cygnus Solutions (a Red Hat company).
|
2000-02-23 00:25:43 +00:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 18:08:50 +00:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2000-02-23 00:25:43 +00:00
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 18:08:50 +00:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2000-02-23 00:25:43 +00:00
|
|
|
|
|
|
|
#include "defs.h"
|
* breakpoint.h (struct breakpoint): New member GDBARCH.
* breakpoint.c: Include "arch-utils.h".
(set_raw_breakpoint_without_location): Add GDBARCH parameter.
Use it to set breakpoint architecture.
(set_raw_breakpoint): Add GDBARCH parameter.
(create_internal_breakpoint): Likewise.
(create_catchpoint): Likewise.
(create_fork_vfork_event_catchpoint): Likewise.
(create_breakpoint): Likewise.
(create_breakpoints): Likewise.
(break_command_really): Likewise.
(create_ada_exception_breakpoint): Likewise.
Update local callers to pass architecture:
(create_internal_breakpoint): Update.
(create_overlay_event_breakpoint): Update.
(create_longjmp_master_breakpoint): Update.
(create_thread_event_breakpoint): Update.
(create_solib_event_breakpoint): Update.
(create_catchpoint): Update.
(create_fork_vfork_event_catchpoint): Update.
(set_momentary_breakpoint): Update.
(clone_momentary_breakpoint): Update.
(create_breakpoint): Update.
(create_breakpoints): Update.
(break_command_really): Update.
(break_command_1): Update.
(set_breakpoint): Update.
(watch_command_1): Update.
(catch_fork_command_1): Update.
(catch_exec_commnd_1): Update.
(handle_gnu_v3_exceptions): Update.
(create_ada_exception_breakpoint): Update.
(catch_ada_exception_command): Update.
(catch_assert_command): Update.
(trace_command): Update.
* breakpoint.h (struct bp_location): New member GDBARCH.
* breakpoint.c (get_sal_arch): New function.
(set_raw_breakpoint): Set location architecture.
(add_location_to_breakpoint): Likewise.
(clone_momentary_breakpoint): Likewise.
(watch_command_1): Likewise.
(update_watchpoint): Likewise.
(bp_loc_is_permanent): Use location architecture instead of
current_gdbarch.
(adjust_breakpoint_address): Add GDBARCH parameter; use it
instead of current_gdbarch.
Update callers of adjust_breakpoint_address to pass
breakpoint location architecture:
(set_raw_breakpoint): Update.
(watch_command_1): Update.
* tracepoint.c: (collect_symbol): Add GDBARCH parameter, use instead
of current_gdbarch.
(add_local_symbols): Add GDBARCH parameter. Pass to collect_symbol.
(encode_actions): Pass tracepoint architecture to add_local_symbols
(encode_actions): Use tracepoint architecture instead of
current_gdbarch. Pass it to add_local_symbols and collect_symbol.
* breakpoint.h (struct breakpoint_ops): Replace last_addr parameter
of print_one callback with last_loc.
* breakpoint.c (print_one_breakpoint_location): Replace last_addr
parameter with last_loc.
(print_one_breakpoint): Likewise.
(do_captured_breakpoint_query): Update call.
(breakpoint_1): Pass last_loc instead of last_addr to
print_one_breakpoint. Pass last location architecture instead of
current_gdbarch to set_next_address.
Update all implementations of the print_one callback:
* breakpoint.c (print_one_catch_fork): Update.
(print_one_catch_vfork): Update.
(print_one_catch_exec): Update.
(print_one_exception_catchpoint): Update.
* ada-lang.c (print_one_exception): Update.
(print_one_catch_exception): Update.
(print_one_catch_exception_unhandled): Update.
(print_one_catch_assert): Update.
* breakpoint.c (print_one_breakpoint_location): Add PRINT_ADDRESS_BITS
parameter. Use it instead of gdbarch_addr_bit (current_gdbarch).
(print_one_breakpoint): Add PRINT_ADDRESS_BITS parameter and pass it
to print_one_breakpoint_location.
(breakpoint_address_bits): New function.
(do_captured_breakpoint_query): Compute number of address bits to print
and pass it to print_one_breakpoint.
(breakpoint_1): Likewise. Use it instead of current_gdbarch.
* breakpoint.h (create_thread_event_breakpoint): Add GDBARCH.
* breakpoint.c (create_thread_event_breakpoint): Likewise.
Update callers to create_thread_event_breakpoint:
* aix-thread.c (pd_enable): Update.
* linux-thread-db.c (enable_thread_event): Update.
* breakpoint.h (create_solib_event_breakpoint): Add GDBARCH.
* breakpoint.c (create_solib_event_breakpoint): Likewise.
Update callers to create_solib_event_breakpoint:
* solib-frv.c (enable_break, enable_break2): Update.
* solib-pa64.c (pa64_solib_create_inferior_hook): Update.
* solib-som.c (som_solib_create_inferior_hook): Update.
* solib-darwin.c (darwin_solib_create_inferior_hook): Update.
* solib-svr4.c (enable_break): Update.
* breakpoint.h (insert_single_step_breakpoint): Add GDBARCH.
* breakpoint.c (insert_single_step_breakpoint): Likewise.
Update callers to insert_single_step_breakpoint:
* alpha-tdep.c (alpha_software_single_step): Update.
* arm-linux-tdep.c (arm_linux_software_single_step): Update.
* arm-tdep.c (arm_software_single_step): Update.
* cris-tdep.c (cris_software_single_step): Update.
* rs6000-aix-tdep.c (rs6000_software_single_step): Update.
* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Update.
* sparc-tdep.c (sparc_software_single_step): Update.
* spu-tdep.c (spu_software_single_step): Update.
* mips-tdep.c (deal_with_atomic_sequence): Add GDBARCH parameter.
Pass it to insert_single_step_breakpoint.
(mips_software_single_step): Pass architecture to
deal_with_atomic_sequence and insert_single_step_breakpoint.
* breakpoint.h (deprecated_insert_raw_breakpoint): Add GDBARCH.
(deprecated_remove_raw_breakpoint): Likewise.
* breakpoint.c (deprecated_insert_raw_breakpoint): Add GDBARCH.
(deprecated_remove_raw_breakpoint): Likewise.
Update callers to deprecated_insert_raw_breakpoint and
deprecated_remove_raw_breakpoint:
* breakpoint.c (single_step_gdbarch): New static variable.
(insert_single_step_breakpoint): Pass GDBARCH parameter to
deprecated_insert_raw_breakpoint. Store it in single_step_gdbarch.
(remove_single_step_breakpoints): Pass architecture stored in
single_step_gdbarch to deprecated_remove_raw_breakpoint.
* rs6000-nat.c (exec_one_dummy_insn): Update.
* solib-irix.c (enable_break, disable_break): Update.
* procfs.c (procfs_mourn_inferior): Update.
(remove_dbx_link_breakpoint): Update.
* breakpoint.h (set_breakpoint): Add GDBARCH parameter.
(set_momentary_breakpoint, set_momentary_breakpoint_at_pc): Likewise.
* breakpoint.c (set_breakpoint): Add GDBARCH parameter.
(set_momentary_breakpoint, set_momentary_breakpoint_at_pc): Likewise.
Update callers to set_breakpoint, set_momentary_breakpoint and
set_momentary_breakpoint_at_pc:
* breakpoint.c (set_momentary_breakpoint_at_pc): Update.
(until_break_command): Update.
* infcall.c (call_function_by_hand): Update.
* infcmd.c (finish_backward, finish_forward): Update.
* infrun.c (insert_step_resume_breakpoint_at_sal): Add GDBARCH
parameter. Pass it to set_momentary_breakpoint.
(insert_longjmp_resume_breakpoint): Add GDBARCH parameter.
Pass it to set_momentary_breakpoint_at_pc.
(handle_inferior_event): Update.
(insert_step_resume_breakpoint_at_frame): Update.
(insert_step_resume_breakpoint_at_caller): Update..
* mi/mi-cmd-break.c: Include "arch-utils.h".
(mi_cmd_break_insert): Update.
* target.h (struct target_ops): Add GDBARCH parameter to
to_insert_breakpoint, to_remove_breakpoint, to_insert_hw_breakpoint,
and to_remove_hw_breakpoint members.
(target_insert_breakpoint, target_remove_breakpoint,
target_insert_hw_breakpoint, target_remove_hw_breakpoint): Add GDBARCH
parameter, pass to target routine.
(memory_remove_breakpoint, memory_insert_breakpoint): Add GDBARCH
parameter.
* target.c (debug_to_insert_breakpoint, debug_to_remove_breakpoint,
debug_to_insert_hw_breakpoint, debug_to_remove_hw_breakpoint): Add
GDBARCH parameter, pass to target routine.
(update_current_target): Update function signature.
* breakpoint.c (insert_bp_location, remove_breakpoint,
deprecated_insert_raw_breakpoint, deprecated_remove_raw_breakpoint):
Pass architecture to target_ routines.
Update all implementations of the target breakpoint routines to take
GDBARCH parameter and use it instead of GDBARCH as appropriate:
* corelow.c (ignore): Update.
* exec.c (ignore): Update.
* mem-break.c (memory_insert_breakpoint): Update.
(memory_remove_breakpoint): Update.
* monitor.c (monitor_insert_breakpoint): Update.
(monitor_remove_breakpoint): Update.
* record.c (record_insert_breakpoint): Update.
(record_beneath_to_insert_breakpoint): Update.
(record_remove_breakpoint): Update.
(record_beneath_to_remove_breakpoint): Update.
* remote.c (remote_insert_breakpoint): Update.
(remote_remove_breakpoint): Update.
(remote_insert_hw_breakpoint): Update.
(remote_remove_hw_breakpoint): Update.
* remote-m32r-sdi.c (m32r_insert_breakpoint): Update.
(m32r_remove_breakpoint): Update.
* remote-mips.c (mips_insert_breakpoint): Update.
(mips_remove_breakpoint): Update.
* i386-nat.c (i386_insert_hw_breakpoint): Update.
(i386_remove_hw_breakpoint): Update.
* nto-procfs.c (procfs_insert_breakpoint): Update.
(procfs_remove_breakpoint): Update.
(procfs_insert_hw_breakpoint): Update.
(procfs_remove_hw_breakpoint): Update.
doc/ChangeLog:
* gdbint.texi (Examples of Use of @code{ui_out} functions):
Update example code extrated from breakpoint.c.
2009-07-02 17:12:28 +00:00
|
|
|
#include "arch-utils.h"
|
2000-02-23 00:25:43 +00:00
|
|
|
#include "mi-cmds.h"
|
|
|
|
#include "ui-out.h"
|
|
|
|
#include "mi-out.h"
|
|
|
|
#include "breakpoint.h"
|
|
|
|
#include "mi-getopt.h"
|
2001-07-28 19:48:15 +00:00
|
|
|
#include "gdb.h"
|
gdb:
* tui/tui-hooks.c: Include observer.h.
(tui_event_default, tui_old_event_hooks, tui_event_hooks):
Remove.
(tui_bp_created_observer, tui_bp_deleted_observer,
tui_bp_modified_observer): New globals.
(tui_install_hooks): Use observers, not events.
(tui_remove_hooks): Likewise.
* mi/mi-cmd-break.c: Include observer.h, not gdb-events.h.
(mi_breakpoint_observers_installed, mi_can_breakpoint_notify): New
globals.
(breakpoint_notify): Check mi_can_breakpoint_notify.
(breakpoint_hooks): Remove.
(mi_cmd_break_insert): Attach observers. Don't use events.
* tracepoint.c: Include observer.h, not gdb-events.h.
(tracepoint_operation, trace_pass_command): Notify observer.
* interps.c: Don't include gdb-events.h.
(clear_interpreter_hooks): Don't call clear_gdb_event_hooks.
* gdbarch.c: Rebuild.
* gdbarch.sh: Emit include for observer.h, not gdb-events.h.
(deprecated_current_gdbarch_select_hack): Notify observer.
* breakpoint.h: Don't include gdb-events.h.
* breakpoint.c: Don't include gdb-events.h.
(condition_command): Notify observer.
(commands_command): Likewise.
(commands_from_control_command): Likewise.
(mention, delete_breakpoint, set_ignore_count): Likewise.
(disable_breakpoint, do_enable_breakpoint): Likewise.
* Makefile.in (gdb_events_h): Remove.
(breakpoint_h): Update.
(COMMON_OBS): Remove gdb-events.o.
(gdb-events.o): Remove.
(breakpoint.o, gdbarch.o, interps.o, tracepoint.o, gdbtk-bp.o,
gdbtk-hooks.o, mi-cmd-break.o, tui-hooks.o): Update.
* gdb-events.c: Remove.
* gdb-events.h: Remove.
* gdb-events.sh: Remove.
gdb/doc:
* observer.texi (GDB Observers): Document new observers:
breakpoint_created, breakpoint_deleted, breakpoint_modified,
tracepoint_created, tracepoint_deleted, tracepoint_modified,
architecture_changed.
gdb/gdbtk:
* generic/gdbtk-hooks.c: Include observer.h, not gdb-events.h.
(gdbtk_add_hooks): Use observers, not events.
(gdbtk_architecture_changed): Add argument, for observer.
* generic/gdbtk-bp.c: Include observer.h.
(gdb_set_bp): Notify observer.
(gdb_set_bp_addr): Likewise.
2008-07-25 16:12:03 +00:00
|
|
|
#include "observer.h"
|
MI breakpoint notifications.
* annotate.c (breakpoint_changed): Adjust parameter type.
* breakpoint.c (set_breakpoint_condition): Adjust to change
in breakpoint_modified type.
(breakpoint_set_commands): Likewise.
(do_map_commands_command): Likewise.
(bpstat_check_breakpoint_conditions): Notify that breakpoint has
changed after bumping hit count.
(bpstat_stop_status): Likewise.
(print_one_breakpoint_location): Don't wrap in tuple here.
(print_one_breakpoint): Always print individual locations.
For locations, use unnamed tuple.
(disable_breakpoints_in_unloaded_shlib): Notify that breakpoint
has changed.
(create_catchpoint, create_syscall_event_catchpoint): Call
breakpoint_created obsever.
(mention): Don't call breakpoint_created observer.
(create_breakpoint_sal): Call breakpoint_created observer.
(create_breakpoint, watch_command_1): Likewise.
(create_ada_exception_breakpoint): Likewise.
(delete_breakpoint): Call breakpoint_deleted breakpoint.
(locations_are_equal): New.
(update_breakpoint_locations): If locations were changed, notify.
(set_ignore_count, disable_breakpoint, do_enable_breakpoint):
Call breakpoint_modified observer.
* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
(mi_cmd_break_insert): Don't set observers for modify and delete.
* mi/mi-interp.c (mi_suppress_breakpoint_notifications): New.
(mi_breakpoint_created, mi_breakpoint_deleted)
(mi_breakpoint_modified): New.
(mi_interpreter_init): Hook the above.
* mi/mi-main.c (mi_cmd_execute): Disable breakpoint notifications
while -break-* commands are executing.
* mi/mi-main.h (mi_suppress_breakpoint_notifications): New.
* mi/mi-out.c (struct ui_out_data): New field original_buffer.
(mi_redirect): New.
(mi_ui_out_impl): Hook in mi_redirect.
(mi_field_skip): True to the name, skip the field, don't output
a field with an empty value.
* python/py-breakpoint.c (gdbpy_breakpoint_created)
(gdbpy_breakpoint_deleted): Adjust.
* tui/tui-hooks.c (tui_event_create_breakpoint)
(tui_event_delete_breakpoint, tui_event_modify_breakpoint): Adjust.
2011-04-27 10:17:39 +00:00
|
|
|
#include "mi-main.h"
|
2012-12-12 21:20:13 +00:00
|
|
|
#include "mi-cmd-break.h"
|
2013-05-21 04:18:55 +00:00
|
|
|
#include "gdb_obstack.h"
|
|
|
|
#include <ctype.h>
|
2000-02-23 00:25:43 +00:00
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
FROM_TTY = 0
|
|
|
|
};
|
|
|
|
|
gdb:
* tui/tui-hooks.c: Include observer.h.
(tui_event_default, tui_old_event_hooks, tui_event_hooks):
Remove.
(tui_bp_created_observer, tui_bp_deleted_observer,
tui_bp_modified_observer): New globals.
(tui_install_hooks): Use observers, not events.
(tui_remove_hooks): Likewise.
* mi/mi-cmd-break.c: Include observer.h, not gdb-events.h.
(mi_breakpoint_observers_installed, mi_can_breakpoint_notify): New
globals.
(breakpoint_notify): Check mi_can_breakpoint_notify.
(breakpoint_hooks): Remove.
(mi_cmd_break_insert): Attach observers. Don't use events.
* tracepoint.c: Include observer.h, not gdb-events.h.
(tracepoint_operation, trace_pass_command): Notify observer.
* interps.c: Don't include gdb-events.h.
(clear_interpreter_hooks): Don't call clear_gdb_event_hooks.
* gdbarch.c: Rebuild.
* gdbarch.sh: Emit include for observer.h, not gdb-events.h.
(deprecated_current_gdbarch_select_hack): Notify observer.
* breakpoint.h: Don't include gdb-events.h.
* breakpoint.c: Don't include gdb-events.h.
(condition_command): Notify observer.
(commands_command): Likewise.
(commands_from_control_command): Likewise.
(mention, delete_breakpoint, set_ignore_count): Likewise.
(disable_breakpoint, do_enable_breakpoint): Likewise.
* Makefile.in (gdb_events_h): Remove.
(breakpoint_h): Update.
(COMMON_OBS): Remove gdb-events.o.
(gdb-events.o): Remove.
(breakpoint.o, gdbarch.o, interps.o, tracepoint.o, gdbtk-bp.o,
gdbtk-hooks.o, mi-cmd-break.o, tui-hooks.o): Update.
* gdb-events.c: Remove.
* gdb-events.h: Remove.
* gdb-events.sh: Remove.
gdb/doc:
* observer.texi (GDB Observers): Document new observers:
breakpoint_created, breakpoint_deleted, breakpoint_modified,
tracepoint_created, tracepoint_deleted, tracepoint_modified,
architecture_changed.
gdb/gdbtk:
* generic/gdbtk-hooks.c: Include observer.h, not gdb-events.h.
(gdbtk_add_hooks): Use observers, not events.
(gdbtk_architecture_changed): Add argument, for observer.
* generic/gdbtk-bp.c: Include observer.h.
(gdb_set_bp): Notify observer.
(gdb_set_bp_addr): Likewise.
2008-07-25 16:12:03 +00:00
|
|
|
/* True if MI breakpoint observers have been registered. */
|
|
|
|
|
|
|
|
static int mi_breakpoint_observers_installed;
|
|
|
|
|
|
|
|
/* Control whether breakpoint_notify may act. */
|
|
|
|
|
|
|
|
static int mi_can_breakpoint_notify;
|
|
|
|
|
2012-03-06 22:48:53 +00:00
|
|
|
/* Output a single breakpoint, when allowed. */
|
2000-02-23 00:25:43 +00:00
|
|
|
|
|
|
|
static void
|
MI breakpoint notifications.
* annotate.c (breakpoint_changed): Adjust parameter type.
* breakpoint.c (set_breakpoint_condition): Adjust to change
in breakpoint_modified type.
(breakpoint_set_commands): Likewise.
(do_map_commands_command): Likewise.
(bpstat_check_breakpoint_conditions): Notify that breakpoint has
changed after bumping hit count.
(bpstat_stop_status): Likewise.
(print_one_breakpoint_location): Don't wrap in tuple here.
(print_one_breakpoint): Always print individual locations.
For locations, use unnamed tuple.
(disable_breakpoints_in_unloaded_shlib): Notify that breakpoint
has changed.
(create_catchpoint, create_syscall_event_catchpoint): Call
breakpoint_created obsever.
(mention): Don't call breakpoint_created observer.
(create_breakpoint_sal): Call breakpoint_created observer.
(create_breakpoint, watch_command_1): Likewise.
(create_ada_exception_breakpoint): Likewise.
(delete_breakpoint): Call breakpoint_deleted breakpoint.
(locations_are_equal): New.
(update_breakpoint_locations): If locations were changed, notify.
(set_ignore_count, disable_breakpoint, do_enable_breakpoint):
Call breakpoint_modified observer.
* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
(mi_cmd_break_insert): Don't set observers for modify and delete.
* mi/mi-interp.c (mi_suppress_breakpoint_notifications): New.
(mi_breakpoint_created, mi_breakpoint_deleted)
(mi_breakpoint_modified): New.
(mi_interpreter_init): Hook the above.
* mi/mi-main.c (mi_cmd_execute): Disable breakpoint notifications
while -break-* commands are executing.
* mi/mi-main.h (mi_suppress_breakpoint_notifications): New.
* mi/mi-out.c (struct ui_out_data): New field original_buffer.
(mi_redirect): New.
(mi_ui_out_impl): Hook in mi_redirect.
(mi_field_skip): True to the name, skip the field, don't output
a field with an empty value.
* python/py-breakpoint.c (gdbpy_breakpoint_created)
(gdbpy_breakpoint_deleted): Adjust.
* tui/tui-hooks.c (tui_event_create_breakpoint)
(tui_event_delete_breakpoint, tui_event_modify_breakpoint): Adjust.
2011-04-27 10:17:39 +00:00
|
|
|
breakpoint_notify (struct breakpoint *b)
|
2000-02-23 00:25:43 +00:00
|
|
|
{
|
gdb:
* tui/tui-hooks.c: Include observer.h.
(tui_event_default, tui_old_event_hooks, tui_event_hooks):
Remove.
(tui_bp_created_observer, tui_bp_deleted_observer,
tui_bp_modified_observer): New globals.
(tui_install_hooks): Use observers, not events.
(tui_remove_hooks): Likewise.
* mi/mi-cmd-break.c: Include observer.h, not gdb-events.h.
(mi_breakpoint_observers_installed, mi_can_breakpoint_notify): New
globals.
(breakpoint_notify): Check mi_can_breakpoint_notify.
(breakpoint_hooks): Remove.
(mi_cmd_break_insert): Attach observers. Don't use events.
* tracepoint.c: Include observer.h, not gdb-events.h.
(tracepoint_operation, trace_pass_command): Notify observer.
* interps.c: Don't include gdb-events.h.
(clear_interpreter_hooks): Don't call clear_gdb_event_hooks.
* gdbarch.c: Rebuild.
* gdbarch.sh: Emit include for observer.h, not gdb-events.h.
(deprecated_current_gdbarch_select_hack): Notify observer.
* breakpoint.h: Don't include gdb-events.h.
* breakpoint.c: Don't include gdb-events.h.
(condition_command): Notify observer.
(commands_command): Likewise.
(commands_from_control_command): Likewise.
(mention, delete_breakpoint, set_ignore_count): Likewise.
(disable_breakpoint, do_enable_breakpoint): Likewise.
* Makefile.in (gdb_events_h): Remove.
(breakpoint_h): Update.
(COMMON_OBS): Remove gdb-events.o.
(gdb-events.o): Remove.
(breakpoint.o, gdbarch.o, interps.o, tracepoint.o, gdbtk-bp.o,
gdbtk-hooks.o, mi-cmd-break.o, tui-hooks.o): Update.
* gdb-events.c: Remove.
* gdb-events.h: Remove.
* gdb-events.sh: Remove.
gdb/doc:
* observer.texi (GDB Observers): Document new observers:
breakpoint_created, breakpoint_deleted, breakpoint_modified,
tracepoint_created, tracepoint_deleted, tracepoint_modified,
architecture_changed.
gdb/gdbtk:
* generic/gdbtk-hooks.c: Include observer.h, not gdb-events.h.
(gdbtk_add_hooks): Use observers, not events.
(gdbtk_architecture_changed): Add argument, for observer.
* generic/gdbtk-bp.c: Include observer.h.
(gdb_set_bp): Notify observer.
(gdb_set_bp_addr): Likewise.
2008-07-25 16:12:03 +00:00
|
|
|
if (mi_can_breakpoint_notify)
|
2011-08-04 Pedro Alves <pedro@codesourcery.com>
* ui-out.h (uiout): Rename to ...
(current_uiout): ... this.
* ui-out.c (uiout): Rename to ...
(current_uiout): ... this.
* ada-lang.c (print_it_exception, print_one_exception)
(print_mention_exception): Adjust.
* breakpoint.c (watchpoint_check): Adjust.
(print_breakpoint_location, print_one_breakpoint, breakpoint_1)
(default_collect_info, watchpoints_info, print_one_catch_fork)
(print_one_catch_vfork, print_one_catch_syscall)
(print_one_catch_exec, mention, print_it_ranged_breakpoint)
(print_one_ranged_breakpoint, print_mention_ranged_breakpoint)
(print_it_watchpoint, print_mention_watchpoint)
(print_it_masked_watchpoint, print_mention_masked_watchpoint)
(print_it_exception_catchpoint, print_one_exception_catchpoint)
(print_mention_exception_catchpoint, say_where, bkpt_print_it)
(bkpt_print_mention, momentary_bkpt_print_it)
(tracepoint_print_mention, update_static_tracepoint)
(tracepoints_info, save_breakpoints): Adjust.
* cli-out.c (field_separator): Adjust.
* cp-abi.c (list_cp_abis, show_cp_abi_cmd): Adjust.
* exceptions.c (catch_exceptions_with_msg, catch_errors): Adjust.
* frame.c (get_current_frame): Adjust.
* infcmd.c (run_command_1, print_return_value): Adjust.
* inferior.c (inferior_command, info_inferiors_command): Adjust.
* infrun.c (print_end_stepping_range_reason): Adjust.
(print_signal_exited_reason, print_exited_reason): Adjust.
(print_signal_received_reason, print_no_history_reason): Adjust.
* interps.c (interp_set): Adjust.
* osdata.c (info_osdata_command): Adjust.
* progspace.c (maintenance_info_program_spaces_command): Adjust.
* remote-fileio.c (remote_fileio_request): Adjust.
* remote.c (show_remote_cmd): Adjust.
* solib.c (info_sharedlibrary_command): Adjust.
* source.c (print_source_lines_base): Adjust.
* stack.c (print_stack_frame): Adjust.
(do_gdb_disassembly, print_frame_info, print_frame): Adjust.
* symfile-mem.c (add_vsyscall_page): Adjust.
* symfile.c (load_progress, generic_load)
(print_transfer_performance): Adjust.
* thread.c (info_threads_command, restore_selected_frame)
(thread_command): Adjust.
* top.c (make_cleanup_restore_ui_file): Adjust.
* tracepoint.c (tvariables_info_1, trace_status_mi, tfind_1)
(print_one_static_tracepoint_marker): Adjust.
* cli/cli-cmds.c (print_disassembly): Adjust.
* cli/cli-decode.c (print_doc_line): Adjust.
* cli/cli-interp.c (safe_execute_command): Adjust.
* cli/cli-logging.c (set_logging_redirect, pop_output_files)
(handle_redirections): Adjust.
* cli/cli-script.c (show_user_1): Adjust.
* cli/cli-setshow.c (do_setshow_command, cmd_show_list): Adjust.
* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
* mi/mi-cmd-disas.c (mi_cmd_disassemble): Adjust.
* mi/mi-cmd-env.c (mi_cmd_env_pwd, mi_cmd_env_path)
(mi_cmd_env_dir): Adjust.
* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
(print_partial_file_name, mi_cmd_file_list_exec_source_files): Adjust.
* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
(mi_cmd_stack_info_depth, mi_cmd_stack_list_args)
(list_args_or_locals): Adjust.
* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
(mi_cmd_var_delete, mi_cmd_var_set_format, mi_cmd_var_set_frozen)
(mi_cmd_var_show_format, mi_cmd_var_info_num_children)
(mi_cmd_var_list_children, mi_cmd_var_info_type)
(mi_cmd_var_info_path_expression, mi_cmd_var_info_expression)
(mi_cmd_var_show_attributes, mi_cmd_var_evaluate_expression)
(mi_cmd_var_assign, mi_cmd_var_update, varobj_update_one): Adjust.
* mi/mi-interp.c (mi_on_normal_stop): Adjust.
* mi/mi-main.c (mi_cmd_gdb_exit, mi_cmd_thread_select)
(mi_cmd_thread_list_ids, mi_cmd_thread_info, print_one_inferior)
(list_available_thread_groups, mi_cmd_list_thread_groups)
(mi_cmd_data_list_register_names)
(mi_cmd_data_list_changed_registers)
(mi_cmd_data_list_register_values, get_register)
(mi_cmd_data_evaluate_expression, mi_cmd_data_read_memory)
(mi_cmd_data_read_memory_bytes, mi_cmd_list_features)
(mi_cmd_list_target_features, mi_cmd_add_inferior)
(mi_execute_command, mi_load_progress): Adjust.
* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Adjust.
* python/py-auto-load.c (print_script, info_auto_load_scripts):
Adjust.
* python/py-breakpoint.c (bppy_get_commands): Adjust.
* tui/tui-interp.c (tui_command_loop): Adjust.
* tui/tui-io.c (tui_setup_io, tui_initialize_io): Adjust.
2011-08-04 19:10:14 +00:00
|
|
|
gdb_breakpoint_query (current_uiout, b->number, NULL);
|
2000-02-23 00:25:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum bp_type
|
|
|
|
{
|
|
|
|
REG_BP,
|
|
|
|
HW_BP,
|
|
|
|
REGEXP_BP
|
|
|
|
};
|
|
|
|
|
2012-12-12 21:20:13 +00:00
|
|
|
/* Arrange for all new breakpoints and catchpoints to be reported to
|
|
|
|
CURRENT_UIOUT until the cleanup returned by this function is run.
|
|
|
|
|
|
|
|
Note that MI output will be probably invalid if more than one
|
|
|
|
breakpoint is created inside one MI command. */
|
|
|
|
|
|
|
|
struct cleanup *
|
|
|
|
setup_breakpoint_reporting (void)
|
|
|
|
{
|
|
|
|
struct cleanup *rev_flag;
|
|
|
|
|
|
|
|
if (! mi_breakpoint_observers_installed)
|
|
|
|
{
|
|
|
|
observer_attach_breakpoint_created (breakpoint_notify);
|
|
|
|
mi_breakpoint_observers_installed = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
rev_flag = make_cleanup_restore_integer (&mi_can_breakpoint_notify);
|
|
|
|
mi_can_breakpoint_notify = 1;
|
|
|
|
|
|
|
|
return rev_flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-05-21 04:18:55 +00:00
|
|
|
/* Convert arguments in ARGV to the string in "format",argv,argv...
|
|
|
|
and return it. */
|
2000-02-23 00:25:43 +00:00
|
|
|
|
2013-05-21 04:18:55 +00:00
|
|
|
static char *
|
|
|
|
mi_argv_to_format (char **argv, int argc)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
struct obstack obstack;
|
|
|
|
char *ret;
|
|
|
|
|
|
|
|
obstack_init (&obstack);
|
|
|
|
|
|
|
|
/* Convert ARGV[OIND + 1] to format string and save to FORMAT. */
|
|
|
|
obstack_1grow (&obstack, '\"');
|
|
|
|
for (i = 0; i < strlen (argv[0]); i++)
|
|
|
|
{
|
|
|
|
switch (argv[0][i])
|
|
|
|
{
|
|
|
|
case '\\':
|
|
|
|
obstack_grow (&obstack, "\\\\", 2);
|
|
|
|
break;
|
|
|
|
case '\a':
|
|
|
|
obstack_grow (&obstack, "\\a", 2);
|
|
|
|
break;
|
|
|
|
case '\b':
|
|
|
|
obstack_grow (&obstack, "\\b", 2);
|
|
|
|
break;
|
|
|
|
case '\f':
|
|
|
|
obstack_grow (&obstack, "\\f", 2);
|
|
|
|
break;
|
|
|
|
case '\n':
|
|
|
|
obstack_grow (&obstack, "\\n", 2);
|
|
|
|
break;
|
|
|
|
case '\r':
|
|
|
|
obstack_grow (&obstack, "\\r", 2);
|
|
|
|
break;
|
|
|
|
case '\t':
|
|
|
|
obstack_grow (&obstack, "\\t", 2);
|
|
|
|
break;
|
|
|
|
case '\v':
|
|
|
|
obstack_grow (&obstack, "\\v", 2);
|
|
|
|
break;
|
2013-07-19 07:26:46 +00:00
|
|
|
case '"':
|
|
|
|
obstack_grow (&obstack, "\\\"", 2);
|
|
|
|
break;
|
2013-05-21 04:18:55 +00:00
|
|
|
default:
|
|
|
|
if (isprint (argv[0][i]))
|
|
|
|
obstack_grow (&obstack, argv[0] + i, 1);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
char tmp[5];
|
|
|
|
|
2013-05-23 06:39:42 +00:00
|
|
|
xsnprintf (tmp, sizeof (tmp), "\\%o",
|
|
|
|
(unsigned char) argv[0][i]);
|
2013-05-21 04:18:55 +00:00
|
|
|
obstack_grow (&obstack, tmp, strlen (tmp));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
obstack_1grow (&obstack, '\"');
|
|
|
|
|
|
|
|
/* Apply other argv to FORMAT. */
|
|
|
|
for (i = 1; i < argc; i++)
|
|
|
|
{
|
|
|
|
obstack_1grow (&obstack, ',');
|
|
|
|
obstack_grow (&obstack, argv[i], strlen (argv[i]));
|
|
|
|
}
|
|
|
|
obstack_1grow (&obstack, '\0');
|
|
|
|
|
|
|
|
ret = xstrdup (obstack_finish (&obstack));
|
|
|
|
obstack_free (&obstack, NULL);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Insert breakpoint.
|
|
|
|
If dprintf is true, it will insert dprintf.
|
|
|
|
If not, it will insert other type breakpoint. */
|
|
|
|
|
|
|
|
static void
|
|
|
|
mi_cmd_break_insert_1 (int dprintf, char *command, char **argv, int argc)
|
2000-02-23 00:25:43 +00:00
|
|
|
{
|
|
|
|
char *address = NULL;
|
2010-03-16 08:42:20 +00:00
|
|
|
int hardware = 0;
|
2000-02-23 00:25:43 +00:00
|
|
|
int temp_p = 0;
|
|
|
|
int thread = -1;
|
|
|
|
int ignore_count = 0;
|
|
|
|
char *condition = NULL;
|
2007-12-14 18:15:47 +00:00
|
|
|
int pending = 0;
|
2009-01-30 18:28:01 +00:00
|
|
|
int enabled = 1;
|
2010-03-23 21:41:55 +00:00
|
|
|
int tracepoint = 0;
|
2013-05-21 04:18:55 +00:00
|
|
|
struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
|
Static tracepoints support, and UST integration.
gdb/gdbserver/
* configure.ac: Handle --with-ust. substitute ustlibs and ustinc.
* mem-break.c (uninsert_all_breakpoints)
(reinsert_all_breakpoints): New.
* mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints):
* tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New.
(gdb_agent_ust_loaded, helper_thread_id)
(gdb_agent_helper_thread_id): New macros.
(struct ipa_sym_addresses): Add addr_ust_loaded,
addr_helper_thread_id, addr_cmd_buf.
(symbol_list): Add ust_loaded, helper_thread_id, cmd_buf.
(in_process_agent_loaded_ust): New.
(write_e_ust_not_loaded): New.
(maybe_write_ipa_ust_not_loaded): New.
(struct collect_static_trace_data_action): New.
(enum tracepoint_type) <static_tracepoint>: New.
(struct tracepoint) <handle>: Mention static tracepoints.
(struct static_tracepoint_ctx): New.
(CMD_BUF_SIZE): New.
(add_tracepoint_action): Handle static tracepoint actions.
(unprobe_marker_at): New.
(clear_installed_tracepoints): Handle static tracepoints.
(cmd_qtdp): Handle static tracepoints.
(probe_marker_at): New.
(cmd_qtstart): Handle static tracepoints.
(response_tracepoint): Handle static tracepoints.
(cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New.
(handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat.
(get_context_regcache): Handle static tracepoints.
(do_action_at_tracepoint): Handle static tracepoint actions.
(traceframe_find_block_type): Handle static trace data blocks.
(traceframe_read_sdata): New.
(download_tracepoints): Download static tracepoint actions.
[HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h.
(GDB_PROBE_NAME): New.
(ust_ops): New.
(GET_UST_SYM): New.
(USTF): New.
(dlsym_ust): New.
(ust_marker_to_static_tracepoint): New.
(gdb_probe): New.
(collect_ust_data_at_tracepoint): New.
(gdb_ust_probe): New.
(UNIX_PATH_MAX, SOCK_DIR): New.
(gdb_ust_connect_sync_socket): New.
(resume_thread, stop_thread): New.
(run_inferior_command): New.
(init_named_socket): New.
(gdb_ust_socket_init): New.
(cstr_to_hexstr): New.
(next_st): New.
(first_marker, next_marker): New.
(response_ust_marker): New.
(cmd_qtfstm, cmd_qtsstm): New.
(unprobe_marker_at, probe_marker_at): New.
(cmd_qtstmat, gdb_ust_thread): New.
(gdb_ust_init): New.
(initialize_tracepoint_ftlib): Call gdb_ust_init.
* linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(x86_64_st_collect_regmap): New.
(X86_64_NUM_ST_COLLECT_GREGS): New.
(AMD64_RIP_REGNUM): New.
(supply_static_tracepoint_registers): New.
* linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(i386_st_collect_regmap): New.
(i386_NUM_ST_COLLECT_GREGS): New.
(supply_static_tracepoint_registers): New.
* server.c (handle_query): Handle qXfer:statictrace:read.
<qSupported>: Report support for StaticTracepoints, and
qXfer:statictrace:read features.
* server.h (traceframe_read_sdata)
(supply_static_tracepoint_registers): Declare.
* remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex)
(unpack_varlen_hex): Include in IPA build.
* Makefile.in (ustlibs, ustinc): New.
(IPA_OBJS): Add remote-utils-ipa.o.
($(IPA_LIB)): Link -ldl and -lpthread.
(UST_CFLAGS): New.
(IPAGENT_CFLAGS): Add UST_CFLAGS.
* config.in, configure: Regenerate.
gdb/
* NEWS: Mention new support for static tracepoints.
(New packets): Mention qTfSTM, qTsSTM, qTSTMat and
qXfer:statictrace:read.
(New features in the GDB remote stub, GDBserver): Mention static
tracepoints support using an UST based backend.
(New commands): Mention "info static-tracepoint-markers" and
"strace".
* breakpoint.c (is_marker_spec): New.
(is_tracepoint): Handle static tracepoints.
(validate_commands_for_breakpoint): Static tracepoints can't do
while-stepping.
(static_tracepoints_here): New.
(bpstat_what): Handle static tracepoints.
(print_one_breakpoint_location, allocate_bp_location, mention):
Ditto.
(create_breakpoint_sal): Ditto.
(decode_static_tracepoint_spec): New.
(create_breakpoint): Replace `hardwareflag', and `traceflag' with
`type_wanted'. Adjust. Handle static tracepoint marker
locations.
(break_command_1): Adjust.
(update_static_tracepoint): New.
(update_breakpoint_locations): Handle static tracepoints.
(breakpoint_re_set_one): Handle static tracepoint marker
locations.
(disable_command, enable_command): Handle static tracepoints.
(trace_command, ftrace_command): Adjust.
(strace_command): New.
(create_tracepoint_from_upload): Adjust.
(save_breakpoints): Handle static tracepoints.
(_initialize_breakpoint): Install the "strace" command.
* breakpoint.h (enum bptype): New bp_static_tracepoint type.
(struct breakpoint): New fields static_trace_marker_id and
static_trace_marker_id_idx.
(breakpoints_here_p): Declare.
(create_breakpoint): Adjust.
(static_tracepoints_here): Declare.
* remote.c (struct remote_state) <static_tracepoints>: New field.
(PACKET_qXfer_statictrace_read, PACKET_StaticTracepoints): New.
(remote_static_tracepoint_marker_at): New.
(remote_static_tracepoint_markers_by_strid): New.
(remote_static_tracepoint_feature): New.
(remote_disconnected_tracing_feature): Handle "StaticTracepoints".
(remote_xfer_partial): Handle TARGET_OBJECT_STATIC_TRACE_DATA.
(remote_supports_static_tracepoints): New.
(remote_download_tracepoint): Download static tracepoints.
(init_remote_ops): Install remote_static_tracepoint_marker_at and
remote_static_tracepoint_markers_by_strid.
(_initialize_remote): Install set|show remote static-tracepoints,
and set|show remote read-sdata-object commands.
* target.c (update_current_target): Inherit and default
to_static_tracepoint_marker_at, and
to_static_tracepoint_markers_by_strid.
* target.h (static_tracepoint_marker): Forward declare.
(enum target_object): New object TARGET_OBJECT_STATIC_TRACE_DATA.
(static_tracepoint_marker_p): New typedef.
(DEF_VEC_P(static_tracepoint_marker_p)): New VEC type.
(struct target_ops): New fields to_static_tracepoint_marker_at and
to_static_tracepoint_markers_by_strid.
(target_static_tracepoint_marker_at)
(target_static_tracepoint_markers_by_strid): New.
* tracepoint.c: Include source.h.
(validate_actionline): Handle $_sdata.
(struct collection_list): New field strace_data.
(add_static_trace_data): New.
(clear_collection_list): Clear strace_data.
(stringify_collection_list): Account for a possible static trace
data collection.
(encode_actions_1): Encode an $_sdata collection.
(parse_tracepoint_definition): Handle static tracepoints.
(parse_static_tracepoint_marker_definition): New.
(release_static_tracepoint_marker): New.
(print_one_static_tracepoint_marker): New.
(info_static_tracepoint_markers_command): New.
(sdata_make_value): New.
(_initialize_tracepoint): Create the $_sdata convenience variable.
Add the "info static-tracepoint-markers" command.
Mention $_sdata in the "collect" command's help output.
* tracepoint.h (struct static_tracepoint_marker): New.
(parse_static_tracepoint_marker_definition)
(release_static_tracepoint_marker): Declare.
* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust.
* python/py-breakpoint.c (bppy_new): Adjust.
doc/
* gdb.texinfo (Convenience Variables): Document $_sdata.
(Commands to Set Tracepoints): Describe static tracepoints. Add
`Listing Static Tracepoint Markers' menu entry. Document
"strace".
(Tracepoint Action Lists): Document collecting $_sdata.
(Listing Static Tracepoint Markers): New subsection.
(Tracepoints support in gdbserver): Mention static tracepoints.
(remote packets, enabling and disabling): Mention
read-sdata-object.
(General Query Packets) <qSupported>: Document qXfer:sdata:read
and StaticTracepoint.
Mention qTfSTM, qTsSTM and qTSTMat as tracepoint packets.
Document qXfer:sdata:read.
(Tracepoint packets): Document qTfSTM, qTsSTM and qTSTMat.
2010-07-01 10:36:12 +00:00
|
|
|
enum bptype type_wanted;
|
2012-09-26 23:53:53 +00:00
|
|
|
struct breakpoint_ops *ops;
|
2013-05-21 04:18:55 +00:00
|
|
|
char *extra_string = NULL;
|
2009-01-30 18:28:01 +00:00
|
|
|
|
2000-02-23 00:25:43 +00:00
|
|
|
enum opt
|
|
|
|
{
|
2010-03-16 08:42:20 +00:00
|
|
|
HARDWARE_OPT, TEMP_OPT, CONDITION_OPT,
|
2010-03-23 21:41:55 +00:00
|
|
|
IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT, DISABLE_OPT,
|
|
|
|
TRACEPOINT_OPT,
|
2000-02-23 00:25:43 +00:00
|
|
|
};
|
2011-08-28 20:39:29 +00:00
|
|
|
static const struct mi_opt opts[] =
|
2000-02-23 00:25:43 +00:00
|
|
|
{
|
|
|
|
{"h", HARDWARE_OPT, 0},
|
|
|
|
{"t", TEMP_OPT, 0},
|
|
|
|
{"c", CONDITION_OPT, 1},
|
|
|
|
{"i", IGNORE_COUNT_OPT, 1},
|
|
|
|
{"p", THREAD_OPT, 1},
|
2007-12-14 18:15:47 +00:00
|
|
|
{"f", PENDING_OPT, 0},
|
2009-01-30 18:28:01 +00:00
|
|
|
{"d", DISABLE_OPT, 0},
|
2010-03-23 21:41:55 +00:00
|
|
|
{"a", TRACEPOINT_OPT, 0},
|
2007-01-03 19:01:25 +00:00
|
|
|
{ 0, 0, 0 }
|
2000-02-23 00:25:43 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Parse arguments. It could be -r or -h or -t, <location> or ``--''
|
|
|
|
to denote the end of the option list. */
|
2011-12-17 05:49:34 +00:00
|
|
|
int oind = 0;
|
|
|
|
char *oarg;
|
2010-05-17 20:49:39 +00:00
|
|
|
|
2000-02-23 00:25:43 +00:00
|
|
|
while (1)
|
|
|
|
{
|
2011-01-12 21:09:39 +00:00
|
|
|
int opt = mi_getopt ("-break-insert", argc, argv,
|
2011-12-17 05:49:34 +00:00
|
|
|
opts, &oind, &oarg);
|
2000-02-23 00:25:43 +00:00
|
|
|
if (opt < 0)
|
|
|
|
break;
|
|
|
|
switch ((enum opt) opt)
|
|
|
|
{
|
|
|
|
case TEMP_OPT:
|
|
|
|
temp_p = 1;
|
|
|
|
break;
|
|
|
|
case HARDWARE_OPT:
|
2010-03-16 08:42:20 +00:00
|
|
|
hardware = 1;
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
case CONDITION_OPT:
|
2011-12-17 05:49:34 +00:00
|
|
|
condition = oarg;
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
case IGNORE_COUNT_OPT:
|
2011-12-17 05:49:34 +00:00
|
|
|
ignore_count = atol (oarg);
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
case THREAD_OPT:
|
2011-12-17 05:49:34 +00:00
|
|
|
thread = atol (oarg);
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
2007-12-14 18:15:47 +00:00
|
|
|
case PENDING_OPT:
|
|
|
|
pending = 1;
|
|
|
|
break;
|
2009-01-30 18:28:01 +00:00
|
|
|
case DISABLE_OPT:
|
|
|
|
enabled = 0;
|
2010-03-23 21:41:55 +00:00
|
|
|
break;
|
|
|
|
case TRACEPOINT_OPT:
|
|
|
|
tracepoint = 1;
|
|
|
|
break;
|
2000-02-23 00:25:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-12-17 05:49:34 +00:00
|
|
|
if (oind >= argc)
|
2013-05-21 04:18:55 +00:00
|
|
|
error (_("-%s-insert: Missing <location>"),
|
|
|
|
dprintf ? "dprintf" : "break");
|
2011-12-17 05:49:34 +00:00
|
|
|
address = argv[oind];
|
2013-05-21 04:18:55 +00:00
|
|
|
if (dprintf)
|
|
|
|
{
|
|
|
|
int format_num = oind + 1;
|
|
|
|
|
|
|
|
if (hardware || tracepoint)
|
|
|
|
error (_("-dprintf-insert: does not support -h or -a"));
|
|
|
|
if (format_num >= argc)
|
|
|
|
error (_("-dprintf-insert: Missing <format>"));
|
|
|
|
|
|
|
|
extra_string = mi_argv_to_format (argv + format_num, argc - format_num);
|
|
|
|
make_cleanup (xfree, extra_string);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (oind < argc - 1)
|
|
|
|
error (_("-break-insert: Garbage following <location>"));
|
|
|
|
}
|
2000-02-23 00:25:43 +00:00
|
|
|
|
2012-03-06 22:48:53 +00:00
|
|
|
/* Now we have what we need, let's insert the breakpoint! */
|
2013-05-21 04:18:55 +00:00
|
|
|
setup_breakpoint_reporting ();
|
|
|
|
|
|
|
|
if (tracepoint)
|
|
|
|
{
|
|
|
|
/* Note that to request a fast tracepoint, the client uses the
|
|
|
|
"hardware" flag, although there's nothing of hardware related to
|
|
|
|
fast tracepoints -- one can implement slow tracepoints with
|
|
|
|
hardware breakpoints, but fast tracepoints are always software.
|
|
|
|
"fast" is a misnomer, actually, "jump" would be more appropriate.
|
|
|
|
A simulator or an emulator could conceivably implement fast
|
|
|
|
regular non-jump based tracepoints. */
|
|
|
|
type_wanted = hardware ? bp_fast_tracepoint : bp_tracepoint;
|
|
|
|
ops = &tracepoint_breakpoint_ops;
|
|
|
|
}
|
|
|
|
else if (dprintf)
|
|
|
|
{
|
|
|
|
type_wanted = bp_dprintf;
|
|
|
|
ops = &dprintf_breakpoint_ops;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
type_wanted = hardware ? bp_hardware_breakpoint : bp_breakpoint;
|
|
|
|
ops = &bkpt_breakpoint_ops;
|
|
|
|
}
|
Static tracepoints support, and UST integration.
gdb/gdbserver/
* configure.ac: Handle --with-ust. substitute ustlibs and ustinc.
* mem-break.c (uninsert_all_breakpoints)
(reinsert_all_breakpoints): New.
* mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints):
* tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New.
(gdb_agent_ust_loaded, helper_thread_id)
(gdb_agent_helper_thread_id): New macros.
(struct ipa_sym_addresses): Add addr_ust_loaded,
addr_helper_thread_id, addr_cmd_buf.
(symbol_list): Add ust_loaded, helper_thread_id, cmd_buf.
(in_process_agent_loaded_ust): New.
(write_e_ust_not_loaded): New.
(maybe_write_ipa_ust_not_loaded): New.
(struct collect_static_trace_data_action): New.
(enum tracepoint_type) <static_tracepoint>: New.
(struct tracepoint) <handle>: Mention static tracepoints.
(struct static_tracepoint_ctx): New.
(CMD_BUF_SIZE): New.
(add_tracepoint_action): Handle static tracepoint actions.
(unprobe_marker_at): New.
(clear_installed_tracepoints): Handle static tracepoints.
(cmd_qtdp): Handle static tracepoints.
(probe_marker_at): New.
(cmd_qtstart): Handle static tracepoints.
(response_tracepoint): Handle static tracepoints.
(cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New.
(handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat.
(get_context_regcache): Handle static tracepoints.
(do_action_at_tracepoint): Handle static tracepoint actions.
(traceframe_find_block_type): Handle static trace data blocks.
(traceframe_read_sdata): New.
(download_tracepoints): Download static tracepoint actions.
[HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h.
(GDB_PROBE_NAME): New.
(ust_ops): New.
(GET_UST_SYM): New.
(USTF): New.
(dlsym_ust): New.
(ust_marker_to_static_tracepoint): New.
(gdb_probe): New.
(collect_ust_data_at_tracepoint): New.
(gdb_ust_probe): New.
(UNIX_PATH_MAX, SOCK_DIR): New.
(gdb_ust_connect_sync_socket): New.
(resume_thread, stop_thread): New.
(run_inferior_command): New.
(init_named_socket): New.
(gdb_ust_socket_init): New.
(cstr_to_hexstr): New.
(next_st): New.
(first_marker, next_marker): New.
(response_ust_marker): New.
(cmd_qtfstm, cmd_qtsstm): New.
(unprobe_marker_at, probe_marker_at): New.
(cmd_qtstmat, gdb_ust_thread): New.
(gdb_ust_init): New.
(initialize_tracepoint_ftlib): Call gdb_ust_init.
* linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(x86_64_st_collect_regmap): New.
(X86_64_NUM_ST_COLLECT_GREGS): New.
(AMD64_RIP_REGNUM): New.
(supply_static_tracepoint_registers): New.
* linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(i386_st_collect_regmap): New.
(i386_NUM_ST_COLLECT_GREGS): New.
(supply_static_tracepoint_registers): New.
* server.c (handle_query): Handle qXfer:statictrace:read.
<qSupported>: Report support for StaticTracepoints, and
qXfer:statictrace:read features.
* server.h (traceframe_read_sdata)
(supply_static_tracepoint_registers): Declare.
* remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex)
(unpack_varlen_hex): Include in IPA build.
* Makefile.in (ustlibs, ustinc): New.
(IPA_OBJS): Add remote-utils-ipa.o.
($(IPA_LIB)): Link -ldl and -lpthread.
(UST_CFLAGS): New.
(IPAGENT_CFLAGS): Add UST_CFLAGS.
* config.in, configure: Regenerate.
gdb/
* NEWS: Mention new support for static tracepoints.
(New packets): Mention qTfSTM, qTsSTM, qTSTMat and
qXfer:statictrace:read.
(New features in the GDB remote stub, GDBserver): Mention static
tracepoints support using an UST based backend.
(New commands): Mention "info static-tracepoint-markers" and
"strace".
* breakpoint.c (is_marker_spec): New.
(is_tracepoint): Handle static tracepoints.
(validate_commands_for_breakpoint): Static tracepoints can't do
while-stepping.
(static_tracepoints_here): New.
(bpstat_what): Handle static tracepoints.
(print_one_breakpoint_location, allocate_bp_location, mention):
Ditto.
(create_breakpoint_sal): Ditto.
(decode_static_tracepoint_spec): New.
(create_breakpoint): Replace `hardwareflag', and `traceflag' with
`type_wanted'. Adjust. Handle static tracepoint marker
locations.
(break_command_1): Adjust.
(update_static_tracepoint): New.
(update_breakpoint_locations): Handle static tracepoints.
(breakpoint_re_set_one): Handle static tracepoint marker
locations.
(disable_command, enable_command): Handle static tracepoints.
(trace_command, ftrace_command): Adjust.
(strace_command): New.
(create_tracepoint_from_upload): Adjust.
(save_breakpoints): Handle static tracepoints.
(_initialize_breakpoint): Install the "strace" command.
* breakpoint.h (enum bptype): New bp_static_tracepoint type.
(struct breakpoint): New fields static_trace_marker_id and
static_trace_marker_id_idx.
(breakpoints_here_p): Declare.
(create_breakpoint): Adjust.
(static_tracepoints_here): Declare.
* remote.c (struct remote_state) <static_tracepoints>: New field.
(PACKET_qXfer_statictrace_read, PACKET_StaticTracepoints): New.
(remote_static_tracepoint_marker_at): New.
(remote_static_tracepoint_markers_by_strid): New.
(remote_static_tracepoint_feature): New.
(remote_disconnected_tracing_feature): Handle "StaticTracepoints".
(remote_xfer_partial): Handle TARGET_OBJECT_STATIC_TRACE_DATA.
(remote_supports_static_tracepoints): New.
(remote_download_tracepoint): Download static tracepoints.
(init_remote_ops): Install remote_static_tracepoint_marker_at and
remote_static_tracepoint_markers_by_strid.
(_initialize_remote): Install set|show remote static-tracepoints,
and set|show remote read-sdata-object commands.
* target.c (update_current_target): Inherit and default
to_static_tracepoint_marker_at, and
to_static_tracepoint_markers_by_strid.
* target.h (static_tracepoint_marker): Forward declare.
(enum target_object): New object TARGET_OBJECT_STATIC_TRACE_DATA.
(static_tracepoint_marker_p): New typedef.
(DEF_VEC_P(static_tracepoint_marker_p)): New VEC type.
(struct target_ops): New fields to_static_tracepoint_marker_at and
to_static_tracepoint_markers_by_strid.
(target_static_tracepoint_marker_at)
(target_static_tracepoint_markers_by_strid): New.
* tracepoint.c: Include source.h.
(validate_actionline): Handle $_sdata.
(struct collection_list): New field strace_data.
(add_static_trace_data): New.
(clear_collection_list): Clear strace_data.
(stringify_collection_list): Account for a possible static trace
data collection.
(encode_actions_1): Encode an $_sdata collection.
(parse_tracepoint_definition): Handle static tracepoints.
(parse_static_tracepoint_marker_definition): New.
(release_static_tracepoint_marker): New.
(print_one_static_tracepoint_marker): New.
(info_static_tracepoint_markers_command): New.
(sdata_make_value): New.
(_initialize_tracepoint): Create the $_sdata convenience variable.
Add the "info static-tracepoint-markers" command.
Mention $_sdata in the "collect" command's help output.
* tracepoint.h (struct static_tracepoint_marker): New.
(parse_static_tracepoint_marker_definition)
(release_static_tracepoint_marker): Declare.
* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust.
* python/py-breakpoint.c (bppy_new): Adjust.
doc/
* gdb.texinfo (Convenience Variables): Document $_sdata.
(Commands to Set Tracepoints): Describe static tracepoints. Add
`Listing Static Tracepoint Markers' menu entry. Document
"strace".
(Tracepoint Action Lists): Document collecting $_sdata.
(Listing Static Tracepoint Markers): New subsection.
(Tracepoints support in gdbserver): Mention static tracepoints.
(remote packets, enabling and disabling): Mention
read-sdata-object.
(General Query Packets) <qSupported>: Document qXfer:sdata:read
and StaticTracepoint.
Mention qTfSTM, qTsSTM and qTSTMat as tracepoint packets.
Document qXfer:sdata:read.
(Tracepoint packets): Document qTfSTM, qTsSTM and qTSTMat.
2010-07-01 10:36:12 +00:00
|
|
|
|
2010-03-16 08:42:20 +00:00
|
|
|
create_breakpoint (get_current_arch (), address, condition, thread,
|
2013-05-21 04:18:55 +00:00
|
|
|
extra_string,
|
2010-03-16 08:42:20 +00:00
|
|
|
0 /* condition and thread are valid. */,
|
Static tracepoints support, and UST integration.
gdb/gdbserver/
* configure.ac: Handle --with-ust. substitute ustlibs and ustinc.
* mem-break.c (uninsert_all_breakpoints)
(reinsert_all_breakpoints): New.
* mem-break.h (reinsert_all_breakpoints, uninsert_all_breakpoints):
* tracepoint.c (ust_loaded, helper_thread_id, cmd_buf): New.
(gdb_agent_ust_loaded, helper_thread_id)
(gdb_agent_helper_thread_id): New macros.
(struct ipa_sym_addresses): Add addr_ust_loaded,
addr_helper_thread_id, addr_cmd_buf.
(symbol_list): Add ust_loaded, helper_thread_id, cmd_buf.
(in_process_agent_loaded_ust): New.
(write_e_ust_not_loaded): New.
(maybe_write_ipa_ust_not_loaded): New.
(struct collect_static_trace_data_action): New.
(enum tracepoint_type) <static_tracepoint>: New.
(struct tracepoint) <handle>: Mention static tracepoints.
(struct static_tracepoint_ctx): New.
(CMD_BUF_SIZE): New.
(add_tracepoint_action): Handle static tracepoint actions.
(unprobe_marker_at): New.
(clear_installed_tracepoints): Handle static tracepoints.
(cmd_qtdp): Handle static tracepoints.
(probe_marker_at): New.
(cmd_qtstart): Handle static tracepoints.
(response_tracepoint): Handle static tracepoints.
(cmd_qtfstm, cmd_qtsstm, cmd_qtstmat): New.
(handle_tracepoint_query): Handle qTfSTM, qTsSTM and qTSTMat.
(get_context_regcache): Handle static tracepoints.
(do_action_at_tracepoint): Handle static tracepoint actions.
(traceframe_find_block_type): Handle static trace data blocks.
(traceframe_read_sdata): New.
(download_tracepoints): Download static tracepoint actions.
[HAVE_UST] Include ust/ust.h, dlfcn.h, sys/socket.h, and sys/un.h.
(GDB_PROBE_NAME): New.
(ust_ops): New.
(GET_UST_SYM): New.
(USTF): New.
(dlsym_ust): New.
(ust_marker_to_static_tracepoint): New.
(gdb_probe): New.
(collect_ust_data_at_tracepoint): New.
(gdb_ust_probe): New.
(UNIX_PATH_MAX, SOCK_DIR): New.
(gdb_ust_connect_sync_socket): New.
(resume_thread, stop_thread): New.
(run_inferior_command): New.
(init_named_socket): New.
(gdb_ust_socket_init): New.
(cstr_to_hexstr): New.
(next_st): New.
(first_marker, next_marker): New.
(response_ust_marker): New.
(cmd_qtfstm, cmd_qtsstm): New.
(unprobe_marker_at, probe_marker_at): New.
(cmd_qtstmat, gdb_ust_thread): New.
(gdb_ust_init): New.
(initialize_tracepoint_ftlib): Call gdb_ust_init.
* linux-amd64-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(x86_64_st_collect_regmap): New.
(X86_64_NUM_ST_COLLECT_GREGS): New.
(AMD64_RIP_REGNUM): New.
(supply_static_tracepoint_registers): New.
* linux-i386-ipa.c [HAVE_UST]: Include ust/processor.h
(ST_REGENTRY): New.
(i386_st_collect_regmap): New.
(i386_NUM_ST_COLLECT_GREGS): New.
(supply_static_tracepoint_registers): New.
* server.c (handle_query): Handle qXfer:statictrace:read.
<qSupported>: Report support for StaticTracepoints, and
qXfer:statictrace:read features.
* server.h (traceframe_read_sdata)
(supply_static_tracepoint_registers): Declare.
* remote-utils.c (convert_int_to_ascii, hexchars, ishex, tohex)
(unpack_varlen_hex): Include in IPA build.
* Makefile.in (ustlibs, ustinc): New.
(IPA_OBJS): Add remote-utils-ipa.o.
($(IPA_LIB)): Link -ldl and -lpthread.
(UST_CFLAGS): New.
(IPAGENT_CFLAGS): Add UST_CFLAGS.
* config.in, configure: Regenerate.
gdb/
* NEWS: Mention new support for static tracepoints.
(New packets): Mention qTfSTM, qTsSTM, qTSTMat and
qXfer:statictrace:read.
(New features in the GDB remote stub, GDBserver): Mention static
tracepoints support using an UST based backend.
(New commands): Mention "info static-tracepoint-markers" and
"strace".
* breakpoint.c (is_marker_spec): New.
(is_tracepoint): Handle static tracepoints.
(validate_commands_for_breakpoint): Static tracepoints can't do
while-stepping.
(static_tracepoints_here): New.
(bpstat_what): Handle static tracepoints.
(print_one_breakpoint_location, allocate_bp_location, mention):
Ditto.
(create_breakpoint_sal): Ditto.
(decode_static_tracepoint_spec): New.
(create_breakpoint): Replace `hardwareflag', and `traceflag' with
`type_wanted'. Adjust. Handle static tracepoint marker
locations.
(break_command_1): Adjust.
(update_static_tracepoint): New.
(update_breakpoint_locations): Handle static tracepoints.
(breakpoint_re_set_one): Handle static tracepoint marker
locations.
(disable_command, enable_command): Handle static tracepoints.
(trace_command, ftrace_command): Adjust.
(strace_command): New.
(create_tracepoint_from_upload): Adjust.
(save_breakpoints): Handle static tracepoints.
(_initialize_breakpoint): Install the "strace" command.
* breakpoint.h (enum bptype): New bp_static_tracepoint type.
(struct breakpoint): New fields static_trace_marker_id and
static_trace_marker_id_idx.
(breakpoints_here_p): Declare.
(create_breakpoint): Adjust.
(static_tracepoints_here): Declare.
* remote.c (struct remote_state) <static_tracepoints>: New field.
(PACKET_qXfer_statictrace_read, PACKET_StaticTracepoints): New.
(remote_static_tracepoint_marker_at): New.
(remote_static_tracepoint_markers_by_strid): New.
(remote_static_tracepoint_feature): New.
(remote_disconnected_tracing_feature): Handle "StaticTracepoints".
(remote_xfer_partial): Handle TARGET_OBJECT_STATIC_TRACE_DATA.
(remote_supports_static_tracepoints): New.
(remote_download_tracepoint): Download static tracepoints.
(init_remote_ops): Install remote_static_tracepoint_marker_at and
remote_static_tracepoint_markers_by_strid.
(_initialize_remote): Install set|show remote static-tracepoints,
and set|show remote read-sdata-object commands.
* target.c (update_current_target): Inherit and default
to_static_tracepoint_marker_at, and
to_static_tracepoint_markers_by_strid.
* target.h (static_tracepoint_marker): Forward declare.
(enum target_object): New object TARGET_OBJECT_STATIC_TRACE_DATA.
(static_tracepoint_marker_p): New typedef.
(DEF_VEC_P(static_tracepoint_marker_p)): New VEC type.
(struct target_ops): New fields to_static_tracepoint_marker_at and
to_static_tracepoint_markers_by_strid.
(target_static_tracepoint_marker_at)
(target_static_tracepoint_markers_by_strid): New.
* tracepoint.c: Include source.h.
(validate_actionline): Handle $_sdata.
(struct collection_list): New field strace_data.
(add_static_trace_data): New.
(clear_collection_list): Clear strace_data.
(stringify_collection_list): Account for a possible static trace
data collection.
(encode_actions_1): Encode an $_sdata collection.
(parse_tracepoint_definition): Handle static tracepoints.
(parse_static_tracepoint_marker_definition): New.
(release_static_tracepoint_marker): New.
(print_one_static_tracepoint_marker): New.
(info_static_tracepoint_markers_command): New.
(sdata_make_value): New.
(_initialize_tracepoint): Create the $_sdata convenience variable.
Add the "info static-tracepoint-markers" command.
Mention $_sdata in the "collect" command's help output.
* tracepoint.h (struct static_tracepoint_marker): New.
(parse_static_tracepoint_marker_definition)
(release_static_tracepoint_marker): Declare.
* mi/mi-cmd-break.c (mi_cmd_break_insert): Adjust.
* python/py-breakpoint.c (bppy_new): Adjust.
doc/
* gdb.texinfo (Convenience Variables): Document $_sdata.
(Commands to Set Tracepoints): Describe static tracepoints. Add
`Listing Static Tracepoint Markers' menu entry. Document
"strace".
(Tracepoint Action Lists): Document collecting $_sdata.
(Listing Static Tracepoint Markers): New subsection.
(Tracepoints support in gdbserver): Mention static tracepoints.
(remote packets, enabling and disabling): Mention
read-sdata-object.
(General Query Packets) <qSupported>: Document qXfer:sdata:read
and StaticTracepoint.
Mention qTfSTM, qTsSTM and qTSTMat as tracepoint packets.
Document qXfer:sdata:read.
(Tracepoint packets): Document qTfSTM, qTsSTM and qTSTMat.
2010-07-01 10:36:12 +00:00
|
|
|
temp_p, type_wanted,
|
2010-03-16 08:42:20 +00:00
|
|
|
ignore_count,
|
|
|
|
pending ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE,
|
2012-09-26 23:53:53 +00:00
|
|
|
ops, 0, enabled, 0, 0);
|
2010-03-16 08:42:20 +00:00
|
|
|
do_cleanups (back_to);
|
2013-05-21 04:18:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Implements the -break-insert command.
|
|
|
|
See the MI manual for the list of possible options. */
|
2010-03-16 08:42:20 +00:00
|
|
|
|
2013-05-21 04:18:55 +00:00
|
|
|
void
|
|
|
|
mi_cmd_break_insert (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
mi_cmd_break_insert_1 (0, command, argv, argc);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Implements the -dprintf-insert command.
|
|
|
|
See the MI manual for the list of possible options. */
|
|
|
|
|
|
|
|
void
|
|
|
|
mi_cmd_dprintf_insert (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
mi_cmd_break_insert_1 (1, command, argv, argc);
|
2000-02-23 00:25:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
enum wp_type
|
|
|
|
{
|
|
|
|
REG_WP,
|
|
|
|
READ_WP,
|
|
|
|
ACCESS_WP
|
|
|
|
};
|
|
|
|
|
2010-03-23 21:48:14 +00:00
|
|
|
void
|
|
|
|
mi_cmd_break_passcount (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
int n;
|
|
|
|
int p;
|
2011-07-25 Pedro Alves <pedro@codesourcery.com>
gdb/
* breakpoint.h (print_recreate_thread): Declare.
(struct breakpoint): Move step_count, pass_count,
number_on_target, static_trace_marker_id,
static_trace_marker_id_idx ...
(struct tracepoint): ... to this new struct.
(get_tracepoint, get_tracepoint_by_number_on_target)
(get_tracepoint_by_number): Change return type to struct
tracepoint pointer.
* breakpoint.c (is_tracepoint_type): New, factored out from
is_tracepoint.
(is_tracepoint): Adjust.
(print_one_breakpoint_location): Cast to struct tracepoint as
necessary, and adjust.
(print_recreate_catch_fork, print_recreate_catch_vfork)
(print_recreate_catch_syscall, print_recreate_catch_exec): Call
print_recreate_thread.
(init_breakpoint_sal): New, factored out from
create_breakpoint_sal.
(create_breakpoint_sal): Reimplement.
(create_breakpoint): Allocate a struct tracecepoint if the caller
wanted a tracepoint. Use init_breakpoint_sal and
install_breakpoint.
(print_recreate_ranged_breakpoint, print_recreate_watchpoint)
(print_recreate_masked_watchpoint)
(print_recreate_exception_catchpoint): Call print_recreate_thread.
(tracepoint_print_one_detail): Adjust.
(tracepoint_print_recreate): Adjust. Call print_recreate_thread.
Dump the pass count here.
(update_static_tracepoint): Adjust.
(addr_string_to_sals): Adjust.
(create_tracepoint_from_upload): Adjust. Change return type to
struct tracepoint pointer.
(trace_pass_set_count): Change parameter type to struct tracepoint
pointer, and adjust.
(trace_pass_command): Adjust.
(get_tracepoint, get_tracepoint_by_number_on_target)
(get_tracepoint_by_number): Change return type to struct
tracepoint pointer, and adjust.
(print_recreate_thread): New, factored out from save_breakpoints.
(save_breakpoints): Don't print thread and task and passcount
recreation here.
* remote.c (remote_download_tracepoint): Adjust.
* tracepoint.c (trace_actions_command, validate_actionline)
(start_tracing, tfind_1, trace_find_tracepoint_command)
(trace_dump_command): Adjust.
(find_matching_tracepoint): Change return type to struct
tracepoint pointer, and adjust.
(merge_uploaded_tracepoints, tfile_get_traceframe_address)
(tfile_trace_find, tfile_fetch_registers): Adjust.
* tracepoint.h (create_tracepoint_from_upload): Change return type
to struct tracepoint pointer.
* ada-lang.c (print_recreate_exception): Call
print_recreate_thread.
* mi/mi-cmd-break.c (mi_cmd_break_passcount): Adjust.
2011-07-25 11:24:44 +00:00
|
|
|
struct tracepoint *t;
|
2010-03-23 21:48:14 +00:00
|
|
|
|
|
|
|
if (argc != 2)
|
|
|
|
error (_("Usage: tracepoint-number passcount"));
|
|
|
|
|
|
|
|
n = atoi (argv[0]);
|
|
|
|
p = atoi (argv[1]);
|
|
|
|
t = get_tracepoint (n);
|
|
|
|
|
|
|
|
if (t)
|
|
|
|
{
|
|
|
|
t->pass_count = p;
|
2012-11-03 12:14:47 +00:00
|
|
|
observer_notify_breakpoint_modified (&t->base);
|
2010-03-23 21:48:14 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-08-09 14:09:09 +00:00
|
|
|
error (_("Could not find tracepoint %d"), n);
|
2010-03-23 21:48:14 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-02-23 00:25:43 +00:00
|
|
|
/* Insert a watchpoint. The type of watchpoint is specified by the
|
|
|
|
first argument:
|
|
|
|
-break-watch <expr> --> insert a regular wp.
|
|
|
|
-break-watch -r <expr> --> insert a read watchpoint.
|
2012-03-06 22:48:53 +00:00
|
|
|
-break-watch -a <expr> --> insert an access wp. */
|
2000-02-23 00:25:43 +00:00
|
|
|
|
2008-06-25 15:15:42 +00:00
|
|
|
void
|
2000-02-23 00:25:43 +00:00
|
|
|
mi_cmd_break_watch (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
char *expr = NULL;
|
|
|
|
enum wp_type type = REG_WP;
|
|
|
|
enum opt
|
|
|
|
{
|
|
|
|
READ_OPT, ACCESS_OPT
|
|
|
|
};
|
2011-08-28 20:39:29 +00:00
|
|
|
static const struct mi_opt opts[] =
|
2000-02-23 00:25:43 +00:00
|
|
|
{
|
|
|
|
{"r", READ_OPT, 0},
|
|
|
|
{"a", ACCESS_OPT, 0},
|
2007-01-03 19:01:25 +00:00
|
|
|
{ 0, 0, 0 }
|
2000-02-23 00:25:43 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Parse arguments. */
|
2011-12-17 05:49:34 +00:00
|
|
|
int oind = 0;
|
|
|
|
char *oarg;
|
2010-05-17 20:49:39 +00:00
|
|
|
|
2000-02-23 00:25:43 +00:00
|
|
|
while (1)
|
|
|
|
{
|
2011-01-12 21:09:39 +00:00
|
|
|
int opt = mi_getopt ("-break-watch", argc, argv,
|
2011-12-17 05:49:34 +00:00
|
|
|
opts, &oind, &oarg);
|
2010-05-17 20:49:39 +00:00
|
|
|
|
2000-02-23 00:25:43 +00:00
|
|
|
if (opt < 0)
|
|
|
|
break;
|
|
|
|
switch ((enum opt) opt)
|
|
|
|
{
|
|
|
|
case READ_OPT:
|
|
|
|
type = READ_WP;
|
|
|
|
break;
|
|
|
|
case ACCESS_OPT:
|
|
|
|
type = ACCESS_WP;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2011-12-17 05:49:34 +00:00
|
|
|
if (oind >= argc)
|
2011-01-12 21:09:39 +00:00
|
|
|
error (_("-break-watch: Missing <expression>"));
|
2011-12-17 05:49:34 +00:00
|
|
|
if (oind < argc - 1)
|
2011-01-12 21:09:39 +00:00
|
|
|
error (_("-break-watch: Garbage following <expression>"));
|
2011-12-17 05:49:34 +00:00
|
|
|
expr = argv[oind];
|
2000-02-23 00:25:43 +00:00
|
|
|
|
2012-03-06 22:48:53 +00:00
|
|
|
/* Now we have what we need, let's insert the watchpoint! */
|
2000-02-23 00:25:43 +00:00
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case REG_WP:
|
2010-11-11 14:11:56 +00:00
|
|
|
watch_command_wrapper (expr, FROM_TTY, 0);
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
case READ_WP:
|
2010-11-11 14:11:56 +00:00
|
|
|
rwatch_command_wrapper (expr, FROM_TTY, 0);
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
case ACCESS_WP:
|
2010-11-11 14:11:56 +00:00
|
|
|
awatch_command_wrapper (expr, FROM_TTY, 0);
|
2000-02-23 00:25:43 +00:00
|
|
|
break;
|
|
|
|
default:
|
2011-01-12 21:09:39 +00:00
|
|
|
error (_("-break-watch: Unknown watchpoint type."));
|
2000-02-23 00:25:43 +00:00
|
|
|
}
|
|
|
|
}
|
2009-08-03 12:39:01 +00:00
|
|
|
|
|
|
|
/* The mi_read_next_line consults these variable to return successive
|
|
|
|
command lines. While it would be clearer to use a closure pointer,
|
|
|
|
it is not expected that any future code will use read_command_lines_1,
|
|
|
|
therefore no point of overengineering. */
|
|
|
|
|
|
|
|
static char **mi_command_line_array;
|
|
|
|
static int mi_command_line_array_cnt;
|
|
|
|
static int mi_command_line_array_ptr;
|
|
|
|
|
|
|
|
static char *
|
2010-03-02 21:46:28 +00:00
|
|
|
mi_read_next_line (void)
|
2009-08-03 12:39:01 +00:00
|
|
|
{
|
|
|
|
if (mi_command_line_array_ptr == mi_command_line_array_cnt)
|
|
|
|
return NULL;
|
|
|
|
else
|
|
|
|
return mi_command_line_array[mi_command_line_array_ptr++];
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
mi_cmd_break_commands (char *command, char **argv, int argc)
|
|
|
|
{
|
|
|
|
struct command_line *break_command;
|
|
|
|
char *endptr;
|
|
|
|
int bnum;
|
|
|
|
struct breakpoint *b;
|
|
|
|
|
|
|
|
if (argc < 1)
|
2011-01-11 15:10:03 +00:00
|
|
|
error (_("USAGE: %s <BKPT> [<COMMAND> [<COMMAND>...]]"), command);
|
2009-08-03 12:39:01 +00:00
|
|
|
|
|
|
|
bnum = strtol (argv[0], &endptr, 0);
|
|
|
|
if (endptr == argv[0])
|
2011-01-11 15:10:03 +00:00
|
|
|
error (_("breakpoint number argument \"%s\" is not a number."),
|
2009-08-03 12:39:01 +00:00
|
|
|
argv[0]);
|
|
|
|
else if (*endptr != '\0')
|
2011-01-11 15:10:03 +00:00
|
|
|
error (_("junk at the end of breakpoint number argument \"%s\"."),
|
2009-08-03 12:39:01 +00:00
|
|
|
argv[0]);
|
|
|
|
|
|
|
|
b = get_breakpoint (bnum);
|
|
|
|
if (b == NULL)
|
2011-01-11 15:10:03 +00:00
|
|
|
error (_("breakpoint %d not found."), bnum);
|
2009-08-03 12:39:01 +00:00
|
|
|
|
|
|
|
mi_command_line_array = argv;
|
|
|
|
mi_command_line_array_ptr = 1;
|
|
|
|
mi_command_line_array_cnt = argc;
|
|
|
|
|
2010-04-04 23:47:16 +00:00
|
|
|
if (is_tracepoint (b))
|
2010-03-23 21:32:28 +00:00
|
|
|
break_command = read_command_lines_1 (mi_read_next_line, 1,
|
|
|
|
check_tracepoint_command, b);
|
|
|
|
else
|
|
|
|
break_command = read_command_lines_1 (mi_read_next_line, 1, 0, 0);
|
|
|
|
|
2009-08-03 12:39:01 +00:00
|
|
|
breakpoint_set_commands (b, break_command);
|
|
|
|
}
|
|
|
|
|