25 #define MAX_BREAKPOINT_LEN 8 34 #define APPEND_TO_LIST(listpp, itemp, tailp) \ 37 if ((tailp) == NULL) \ 38 *(listpp) = (itemp); \ 40 (tailp)->next = (itemp); \ 257 "bad raw breakpoint type %d", (
int) raw_type);
377 " breakpoint at 0x%s (%s).\n",
389 debug_printf (
"Failed to insert breakpoint at 0x%s (%s).\n",
393 return err != 0 ? -1 : 0;
418 "at 0x%s (%s) while deleting it.\n",
421 return err != 0 ? -1 : 0;
439 if (bp != NULL && bp->
kind != kind)
444 debug_printf (
"Inconsistent breakpoint kind? Was %d, now %d.\n",
468 debug_printf (
"Failed to insert breakpoint at 0x%s (%d).\n",
527 #define fast_tracepoint_jump_insn(fp) \ 528 ((fp)->insn_and_shadow + 0) 531 #define fast_tracepoint_jump_shadow(fp) \ 532 ((fp)->insn_and_shadow + (fp)->length) 595 *bp_link = prev_bp_link;
598 debug_printf (
"Failed to uninsert fast tracepoint jump " 599 "at 0x%s (%s) while deleting it.\n",
616 warning (
"Could not find fast tracepoint jump in list.");
662 " fast tracepoint at 0x%s (%s).\n",
686 debug_printf (
"Failed to insert fast tracepoint jump at 0x%s (%s).\n",
711 debug_printf (
"Could not find fast tracepoint jump at 0x%s " 712 "in list (uninserting).\n",
740 debug_printf (
"Failed to uninsert fast tracepoint jump at" 760 debug_printf (
"Could not find fast tracepoint jump at 0x%s " 761 "in list (reinserting).\n",
767 error (
"Jump already inserted at reinsert time.");
787 debug_printf (
"Failed to reinsert fast tracepoint jump at" 861 placed_address, breakpoint_kind, handler,
898 *bp_link = prev_bp_link;
902 "at 0x%s while deleting it.\n",
920 warning (
"Could not find raw breakpoint in list.");
931 if (newrefcount == 0)
974 warning (
"Could not find breakpoint in list.");
998 && (kind == -1 || bp->
raw->
kind == kind))
1007 return (z_type >=
'0' && z_type <=
'4' 1207 while (
cond != NULL)
1211 cond_next =
cond->next;
1236 cmd_next =
cmd->next;
1262 new_cond->
cond = condition;
1274 const char *actparm = *condition;
1277 if (condition == NULL)
1287 warning (
"Condition evaluation failed. Assuming unconditional.");
1293 *condition = actparm;
1329 cl && !value && !err; cl = cl->
next)
1338 return (value != 0);
1359 new_cmd->
cmd = commands;
1373 const char *actparm = *command;
1376 if (command == NULL)
1386 warning (
"Command evaluation failed. Disabling.");
1409 debug_printf (
"at 0x%s, type Z%c, bp command_list is 0x%s\n",
1447 cl && !value && !err; cl = cl->
next)
1509 *bp_link = bp->next;
1516 bp_link = &bp->next;
1528 debug_printf (
"Breakpoint at %s is marked insert-disabled.\n",
1543 debug_printf (
"Failed to uninsert raw breakpoint at 0x%s.\n",
1573 "in list (uninserting).\n",
1607 if (bp->raw->refcount == 1)
1631 debug_printf (
"Failed to reinsert breakpoint at 0x%s (%d).\n",
1658 "in list (reinserting).\n",
1680 bp_link = &bp->next;
1715 if (bp->raw->refcount == 1)
1742 && raw->
pc == stop_pc)
1746 warning (
"Hit a removed breakpoint?");
1757 *bp_link = bp->
next;
1767 bp_link = &bp->
next;
1847 && bp->
raw->
pc == addr
1925 int disabled_one = 0;
1927 for (; jp != NULL; jp = jp->
next)
1931 int copy_offset, copy_len, buf_offset;
1936 if (mem_addr >= bp_end)
1938 if (jp->
pc >= mem_end)
1942 if (mem_addr > start)
1949 copy_len = end - start;
1950 copy_offset = start - jp->
pc;
1951 buf_offset = start - mem_addr;
1954 memcpy (buf + buf_offset,
1959 for (; bp != NULL; bp = bp->
next)
1963 int copy_offset, copy_len, buf_offset;
1971 if (mem_addr >= bp_end)
1973 if (bp->
pc >= mem_end)
1977 if (mem_addr > start)
1984 copy_len = end - start;
1985 copy_offset = start - bp->
pc;
1986 buf_offset = start - mem_addr;
1991 memcpy (buf + buf_offset, bp->
old_data + copy_offset, copy_len);
2003 const unsigned char *myaddr,
int mem_len)
2009 int disabled_one = 0;
2013 for (; jp != NULL; jp = jp->
next)
2017 int copy_offset, copy_len, buf_offset;
2024 if (mem_addr >= jp_end)
2026 if (jp->
pc >= mem_end)
2030 if (mem_addr > start)
2037 copy_len = end - start;
2038 copy_offset = start - jp->
pc;
2039 buf_offset = start - mem_addr;
2042 myaddr + buf_offset, copy_len);
2044 memcpy (buf + buf_offset,
2048 for (; bp != NULL; bp = bp->
next)
2052 int copy_offset, copy_len, buf_offset;
2060 if (mem_addr >= bp_end)
2062 if (bp->
pc >= mem_end)
2066 if (mem_addr > start)
2073 copy_len = end - start;
2074 copy_offset = start - bp->
pc;
2075 buf_offset = start - mem_addr;
2077 memcpy (bp->
old_data + copy_offset, myaddr + buf_offset, copy_len);
2081 memcpy (buf + buf_offset,
bp_opcode (bp) + copy_offset, copy_len);
2173 current_cond != NULL;
2174 current_cond = current_cond->
next)
2182 for (current_cmd = ((
struct gdb_breakpoint *) src)->command_list;
2183 current_cmd != NULL;
2184 current_cmd = current_cmd->
next)
2209 ss_dest->
ptid = ptid;
2215 dest->
raw = dest_raw;
enum target_hw_bp_type raw_bkpt_type_to_target_hw_bp_type(enum raw_bkpt_type raw_type)
void check_mem_read(CORE_ADDR mem_addr, unsigned char *buf, int mem_len)
struct thread_info * current_thread
static void xfree(T *ptr)
static int delete_breakpoint_1(struct process_info *proc, struct breakpoint *todel)
int gdb_condition_true_at_breakpoint(CORE_ADDR where)
static struct fast_tracepoint_jump * find_fast_tracepoint_jump_at(CORE_ADDR where)
int add_breakpoint_condition(struct gdb_breakpoint *bp, const char **condition)
static int gdb_no_commands_at_breakpoint_z_type(char z_type, CORE_ADDR addr)
#define APPEND_TO_LIST(listpp, itemp, tailp)
static enum bkpt_type Z_packet_to_bkpt_type(char z_type)
static int bp_size(struct raw_breakpoint *bp)
int ptid_get_pid(const ptid_t &ptid)
unsigned char insn_and_shadow[0]
static struct breakpoint * clone_one_breakpoint(const struct breakpoint *src, ptid_t ptid)
static int delete_raw_breakpoint(struct process_info *proc, struct raw_breakpoint *todel)
#define target_breakpoint_kind_from_pc(pcptr)
int add_breakpoint_commands(struct gdb_breakpoint *bp, const char **command, int persist)
void warning(const char *fmt,...)
int has_single_step_breakpoints(struct thread_info *thread)
static ptid_t ptid_of(const thread_info *thread)
struct agent_expr * gdb_parse_agent_expr(const char **actparm)
static int release_breakpoint(struct process_info *proc, struct breakpoint *bp)
void internal_error(const char *file, int line, const char *fmt,...)
struct raw_breakpoint * raw_breakpoints
static struct gdb_breakpoint * find_gdb_breakpoint(char z_type, CORE_ADDR addr, int kind)
int(* insert_point)(enum raw_bkpt_type type, CORE_ADDR addr, int size, struct raw_breakpoint *bp)
static struct breakpoint * set_breakpoint(enum bkpt_type type, enum raw_bkpt_type raw_type, CORE_ADDR where, int kind, int(*handler)(CORE_ADDR), int *err)
struct point_cond_list * next
char * paddress(CORE_ADDR addr)
static struct raw_breakpoint * find_enabled_raw_code_breakpoint_at(CORE_ADDR addr, enum raw_bkpt_type type)
void uninsert_single_step_breakpoints(struct thread_info *thread)
static void reinsert_raw_breakpoint(struct raw_breakpoint *bp)
int(* remove_point)(enum raw_bkpt_type type, CORE_ADDR addr, int size, struct raw_breakpoint *bp)
void free_all_breakpoints(struct process_info *proc)
void uninsert_all_breakpoints(void)
struct target_ops * the_target
int single_step_breakpoint_inserted_here(CORE_ADDR addr)
struct raw_breakpoint * raw
void reinsert_all_breakpoints(void)
int fast_tracepoint_jump_here(CORE_ADDR where)
static struct breakpoint * set_breakpoint_type_at(enum bkpt_type type, CORE_ADDR where, int(*handler)(CORE_ADDR))
void set_single_step_breakpoint(CORE_ADDR stop_at, ptid_t ptid)
void null_cleanup(void *arg)
int hardware_breakpoint_inserted_here(CORE_ADDR addr)
static const gdb_byte * bp_opcode(struct raw_breakpoint *bp)
static int is_gdb_breakpoint(enum bkpt_type type)
struct point_cond_list * cond_list
void uninsert_breakpoints_at(CORE_ADDR pc)
struct point_command_list * next
struct fast_tracepoint_jump * fast_tracepoint_jumps
int(* write_memory)(CORE_ADDR memaddr, const unsigned char *myaddr, int len)
static void clear_breakpoint_conditions(struct gdb_breakpoint *bp)
void uninsert_fast_tracepoint_jumps_at(CORE_ADDR pc)
static void delete_disabled_breakpoints(void)
static void add_condition_to_breakpoint(struct gdb_breakpoint *bp, struct agent_expr *condition)
enum raw_bkpt_type raw_type
int any_persistent_commands(void)
int read_inferior_memory(CORE_ADDR memaddr, unsigned char *myaddr, int len)
#define gdb_assert_not_reached(message)
static int check_gdb_bp_preconditions(char z_type, int *err)
struct tracepoint * tpoint
int software_breakpoint_inserted_here(CORE_ADDR addr)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
int breakpoint_here(CORE_ADDR addr)
int delete_gdb_breakpoint(char z_type, CORE_ADDR addr, int kind)
enum eval_result_type gdb_eval_agent_expr(struct eval_agent_expr_context *ctx, struct agent_expr *aexpr, ULONGEST *rslt)
void check_breakpoints(CORE_ADDR stop_pc)
void delete_all_breakpoints(void)
int gdb_no_commands_at_breakpoint(CORE_ADDR where)
void check_mem_write(CORE_ADDR mem_addr, unsigned char *buf, const unsigned char *myaddr, int mem_len)
struct process_info * current_process(void)
static int run_breakpoint_commands_z_type(char z_type, CORE_ADDR addr)
struct traceframe * tframe
unsigned char old_data[MAX_BREAKPOINT_LEN]
static struct raw_breakpoint * set_raw_breakpoint_at(enum raw_bkpt_type type, CORE_ADDR where, int kind, int *err)
static int validate_inserted_breakpoint(struct raw_breakpoint *bp)
static void uninsert_raw_breakpoint(struct raw_breakpoint *bp)
struct fast_tracepoint_jump * set_fast_tracepoint_jump(CORE_ADDR where, unsigned char *insn, ULONGEST length)
void reinsert_fast_tracepoint_jumps_at(CORE_ADDR where)
static struct gdb_breakpoint * set_gdb_breakpoint_1(char z_type, CORE_ADDR addr, int kind, int *err)
struct point_command_list * command_list
void run_breakpoint_commands(CORE_ADDR where)
int write_inferior_memory(CORE_ADDR memaddr, const unsigned char *myaddr, int len)
struct raw_breakpoint * next
static void clear_breakpoint_commands(struct gdb_breakpoint *bp)
const gdb_byte *(* sw_breakpoint_from_kind)(int kind, int *size)
void discard_cleanups(struct cleanup *old_chain)
static int z_type_supported(char z_type)
char * phex_nz(ULONGEST l, int sizeof_l)
struct fast_tracepoint_jump * next
void reinsert_breakpoints_at(CORE_ADDR pc)
void gdb_free_agent_expr(struct agent_expr *aexpr)
void delete_single_step_breakpoints(struct thread_info *thread)
int prepare_to_access_memory(void)
int(* read_memory)(CORE_ADDR memaddr, unsigned char *myaddr, int len)
void reinsert_single_step_breakpoints(struct thread_info *thread)
void clear_breakpoint_conditions_and_commands(struct gdb_breakpoint *bp)
struct regcache * get_thread_regcache(struct thread_info *thread, int fetch)
#define fast_tracepoint_jump_shadow(fp)
#define Z_PACKET_ACCESS_WP
int delete_fast_tracepoint_jump(struct fast_tracepoint_jump *todel)
enum raw_bkpt_type Z_packet_to_raw_bkpt_type(char z_type)
int insert_memory_breakpoint(struct raw_breakpoint *bp)
int ptid_equal(const ptid_t &ptid1, const ptid_t &ptid2)
int breakpoint_inserted_here(CORE_ADDR addr)
int(* supports_z_point_type)(char z_type)
#define fast_tracepoint_jump_insn(fp)
unsigned long long ULONGEST
struct breakpoint * set_breakpoint_at(CORE_ADDR where, int(*handler)(CORE_ADDR))
void inc_ref_fast_tracepoint_jump(struct fast_tracepoint_jump *jp)
struct gdb_breakpoint * set_gdb_breakpoint(char z_type, CORE_ADDR addr, int kind, int *err)
struct breakpoint * breakpoints
static int delete_gdb_breakpoint_1(char z_type, CORE_ADDR addr, int kind)
static int gdb_condition_true_at_breakpoint_z_type(char z_type, CORE_ADDR addr)
static struct agent_expr * clone_agent_expr(const struct agent_expr *src_ax)
void debug_printf(const char *fmt,...)
#define MAX_BREAKPOINT_LEN
int remove_memory_breakpoint(struct raw_breakpoint *bp)
PTR xcalloc(size_t number, size_t size)
void clone_all_breakpoints(struct thread_info *child_thread, const struct thread_info *parent_thread)
void validate_breakpoints(void)
void mark_breakpoints_out(struct process_info *proc)
struct regcache * regcache
static struct raw_breakpoint * find_raw_breakpoint_at(CORE_ADDR addr, enum raw_bkpt_type type, int kind)
void error(const char *fmt,...)
struct process_info * get_thread_process(const struct thread_info *thread)
int delete_breakpoint(struct breakpoint *todel)
static void add_commands_to_breakpoint(struct gdb_breakpoint *bp, struct agent_expr *commands, int persist)
void done_accessing_memory(void)
void do_cleanups(struct cleanup *old_chain)
int gdb_breakpoint_here(CORE_ADDR where)
#define Z_PACKET_WRITE_WP
int(* handler)(CORE_ADDR)