mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-03 13:23:00 +08:00
* target.h: Add to_insert_hw_breakpoint, to_remove_hw_breakpoint,
to_insert_watchpoint, to_remove_watchpoint, to_stopped_by_watchpoint, to_stopped_data_address, to_region_size_ok_for_hw_watchpoint, to_can_use_hw_breakpoint to target vecctor. Define their corresponding macros so they call them. * target.c: Add default and debug versions of for to_insert_hw_breakpoint, to_remove_hw_breakpoint, to_insert_watchpoint, to_remove_watchpoint, to_stopped_by_watchpoint, to_stopped_data_address, to_region_size_ok_for_hw_watchpoint, to_can_use_hw_breakpoint.
This commit is contained in:
181
gdb/target.c
181
gdb/target.c
@ -52,6 +52,8 @@ static void kill_or_be_killed (int);
|
||||
|
||||
static void default_terminal_info (char *, int);
|
||||
|
||||
static int default_region_size_ok_for_hw_watchpoint (int);
|
||||
|
||||
static int nosymbol (char *, CORE_ADDR *);
|
||||
|
||||
static void tcomplain (void);
|
||||
@ -62,6 +64,8 @@ static int return_zero (void);
|
||||
|
||||
static int return_one (void);
|
||||
|
||||
static int return_minus_one (void);
|
||||
|
||||
void target_ignore (void);
|
||||
|
||||
static void target_command (char *, int);
|
||||
@ -112,6 +116,22 @@ static int debug_to_insert_breakpoint (CORE_ADDR, char *);
|
||||
|
||||
static int debug_to_remove_breakpoint (CORE_ADDR, char *);
|
||||
|
||||
static int debug_to_can_use_hw_breakpoint (int, int, int);
|
||||
|
||||
static int debug_to_insert_hw_breakpoint (CORE_ADDR, char *);
|
||||
|
||||
static int debug_to_remove_hw_breakpoint (CORE_ADDR, char *);
|
||||
|
||||
static int debug_to_insert_watchpoint (CORE_ADDR, int, int);
|
||||
|
||||
static int debug_to_remove_watchpoint (CORE_ADDR, int, int);
|
||||
|
||||
static int debug_to_stopped_by_watchpoint (void);
|
||||
|
||||
static CORE_ADDR debug_to_stopped_data_address (void);
|
||||
|
||||
static int debug_to_region_size_ok_for_hw_watchpoint (int);
|
||||
|
||||
static void debug_to_terminal_init (void);
|
||||
|
||||
static void debug_to_terminal_inferior (void);
|
||||
@ -390,6 +410,29 @@ cleanup_target (struct target_ops *t)
|
||||
memory_insert_breakpoint);
|
||||
de_fault (to_remove_breakpoint,
|
||||
memory_remove_breakpoint);
|
||||
de_fault (to_can_use_hw_breakpoint,
|
||||
(int (*) (int, int, int))
|
||||
return_zero);
|
||||
de_fault (to_insert_hw_breakpoint,
|
||||
(int (*) (CORE_ADDR, char *))
|
||||
return_minus_one);
|
||||
de_fault (to_remove_hw_breakpoint,
|
||||
(int (*) (CORE_ADDR, char *))
|
||||
return_minus_one);
|
||||
de_fault (to_insert_watchpoint,
|
||||
(int (*) (CORE_ADDR, int, int))
|
||||
return_minus_one);
|
||||
de_fault (to_remove_watchpoint,
|
||||
(int (*) (CORE_ADDR, int, int))
|
||||
return_minus_one);
|
||||
de_fault (to_stopped_by_watchpoint,
|
||||
(int (*) (void))
|
||||
return_zero);
|
||||
de_fault (to_stopped_data_address,
|
||||
(CORE_ADDR (*) (void))
|
||||
return_zero);
|
||||
de_fault (to_region_size_ok_for_hw_watchpoint,
|
||||
default_region_size_ok_for_hw_watchpoint);
|
||||
de_fault (to_terminal_init,
|
||||
(void (*) (void))
|
||||
target_ignore);
|
||||
@ -553,6 +596,14 @@ update_current_target (void)
|
||||
INHERIT (to_files_info, t);
|
||||
INHERIT (to_insert_breakpoint, t);
|
||||
INHERIT (to_remove_breakpoint, t);
|
||||
INHERIT (to_can_use_hw_breakpoint, t);
|
||||
INHERIT (to_insert_hw_breakpoint, t);
|
||||
INHERIT (to_remove_hw_breakpoint, t);
|
||||
INHERIT (to_insert_watchpoint, t);
|
||||
INHERIT (to_remove_watchpoint, t);
|
||||
INHERIT (to_stopped_data_address, t);
|
||||
INHERIT (to_stopped_by_watchpoint, t);
|
||||
INHERIT (to_region_size_ok_for_hw_watchpoint, t);
|
||||
INHERIT (to_terminal_init, t);
|
||||
INHERIT (to_terminal_inferior, t);
|
||||
INHERIT (to_terminal_ours_for_output, t);
|
||||
@ -1226,6 +1277,12 @@ find_default_clone_and_follow_inferior (int child_pid, int *followed_child)
|
||||
return;
|
||||
}
|
||||
|
||||
static int
|
||||
default_region_size_ok_for_hw_watchpoint (int byte_count)
|
||||
{
|
||||
return (byte_count <= REGISTER_SIZE);
|
||||
}
|
||||
|
||||
static int
|
||||
return_zero (void)
|
||||
{
|
||||
@ -1238,6 +1295,12 @@ return_one (void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
return_minus_one (void)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Resize the to_sections pointer. Also make sure that anyone that
|
||||
* was holding on to an old value of it gets updated.
|
||||
@ -1774,6 +1837,116 @@ debug_to_remove_breakpoint (CORE_ADDR addr, char *save)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
|
||||
(unsigned long) type,
|
||||
(unsigned long) cnt,
|
||||
(unsigned long) from_tty,
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_region_size_ok_for_hw_watchpoint (int byte_count)
|
||||
{
|
||||
CORE_ADDR retval;
|
||||
|
||||
retval = debug_target.to_region_size_ok_for_hw_watchpoint (byte_count);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (%ld) = 0x%lx\n",
|
||||
(unsigned long) byte_count,
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_stopped_by_watchpoint (void)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_stopped_by_watchpoint ();
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"STOPPED_BY_WATCHPOINT () = %ld\n",
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
debug_to_stopped_data_address (void)
|
||||
{
|
||||
CORE_ADDR retval;
|
||||
|
||||
retval = debug_target.to_stopped_data_address ();
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_stopped_data_address () = 0x%lx\n",
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_insert_hw_breakpoint (CORE_ADDR addr, char *save)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_insert_hw_breakpoint (addr, save);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
|
||||
(unsigned long) addr,
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_remove_hw_breakpoint (CORE_ADDR addr, char *save)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_remove_hw_breakpoint (addr, save);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
|
||||
(unsigned long) addr,
|
||||
(unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_insert_watchpoint (addr, len, type);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
|
||||
(unsigned long) addr, len, type, (unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = debug_target.to_insert_watchpoint (addr, len, type);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
|
||||
(unsigned long) addr, len, type, (unsigned long) retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
debug_to_terminal_init (void)
|
||||
{
|
||||
@ -2220,6 +2393,14 @@ setup_target_debug (void)
|
||||
current_target.to_files_info = debug_to_files_info;
|
||||
current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
|
||||
current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
|
||||
current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
|
||||
current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
|
||||
current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
|
||||
current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
|
||||
current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
|
||||
current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
|
||||
current_target.to_stopped_data_address = debug_to_stopped_data_address;
|
||||
current_target.to_region_size_ok_for_hw_watchpoint = debug_to_region_size_ok_for_hw_watchpoint;
|
||||
current_target.to_terminal_init = debug_to_terminal_init;
|
||||
current_target.to_terminal_inferior = debug_to_terminal_inferior;
|
||||
current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
|
||||
|
Reference in New Issue
Block a user