@@ -1164,17 +1164,14 @@ aarch64_dr_state_remove_one_point (struct aarch64_debug_reg_state *state,
static int
aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert)
+ int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state;
-
/* The hardware breakpoint on AArch64 should always be 4-byte
aligned. */
if (!aarch64_point_is_aligned (0 /* is_watchpoint */ , addr, len))
return -1;
- state = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
if (is_insert)
return aarch64_dr_state_insert_one_point (state, type, addr, len);
else
@@ -1193,6 +1190,8 @@ aarch64_linux_insert_hw_breakpoint (struct target_ops *self,
CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
const int len = 4;
const enum target_hw_bp_type type = hw_execute;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
if (show_debug_regs)
fprintf_unfiltered
@@ -1200,13 +1199,10 @@ aarch64_linux_insert_hw_breakpoint (struct target_ops *self,
"insert_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
(unsigned long) addr, len);
- ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */);
+ ret = aarch64_handle_breakpoint (type, addr, len, 1 /* is_insert */, state);
if (show_debug_regs)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
aarch64_show_debug_reg_state (state,
"insert_hw_breakpoint", addr, len, type);
}
@@ -1226,19 +1222,18 @@ aarch64_linux_remove_hw_breakpoint (struct target_ops *self,
CORE_ADDR addr = bp_tgt->placed_address;
const int len = 4;
const enum target_hw_bp_type type = hw_execute;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
if (show_debug_regs)
fprintf_unfiltered
(gdb_stdlog, "remove_hw_breakpoint on entry (addr=0x%08lx, len=%d))\n",
(unsigned long) addr, len);
- ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */);
+ ret = aarch64_handle_breakpoint (type, addr, len, 0 /* is_insert */, state);
if (show_debug_regs)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
aarch64_show_debug_reg_state (state,
"remove_hw_watchpoint", addr, len, type);
}
@@ -1251,11 +1246,9 @@ aarch64_linux_remove_hw_breakpoint (struct target_ops *self,
static int
aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert)
+ int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
if (is_insert)
return aarch64_dr_state_insert_one_point (state, type, addr, len);
else
@@ -1271,11 +1264,9 @@ aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
static int
aarch64_handle_unaligned_watchpoint (int type, CORE_ADDR addr, int len,
- int is_insert)
+ int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
while (len > 0)
{
CORE_ADDR aligned_addr;
@@ -1308,12 +1299,15 @@ aarch64_handle_unaligned_watchpoint (int type, CORE_ADDR addr, int len,
/* Implements insertion and removal of a single watchpoint. */
static int
-aarch64_handle_watchpoint (int type, CORE_ADDR addr, int len, int is_insert)
+aarch64_handle_watchpoint (int type, CORE_ADDR addr, int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
if (aarch64_point_is_aligned (1 /* is_watchpoint */ , addr, len))
- return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert);
+ return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert,
+ state);
else
- return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert);
+ return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert,
+ state);
}
/* Implement the "to_insert_watchpoint" target_ops method.
@@ -1328,6 +1322,8 @@ aarch64_linux_insert_watchpoint (struct target_ops *self,
struct expression *cond)
{
int ret;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog,
@@ -1336,13 +1332,10 @@ aarch64_linux_insert_watchpoint (struct target_ops *self,
gdb_assert (type != hw_execute);
- ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */);
+ ret = aarch64_handle_watchpoint (type, addr, len, 1 /* is_insert */, state);
if (show_debug_regs)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
aarch64_show_debug_reg_state (state,
"insert_watchpoint", addr, len, type);
}
@@ -1361,6 +1354,8 @@ aarch64_linux_remove_watchpoint (struct target_ops *self,
struct expression *cond)
{
int ret;
+ struct aarch64_debug_reg_state *state
+ = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
if (show_debug_regs)
fprintf_unfiltered (gdb_stdlog,
@@ -1369,13 +1364,10 @@ aarch64_linux_remove_watchpoint (struct target_ops *self,
gdb_assert (type != hw_execute);
- ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */);
+ ret = aarch64_handle_watchpoint (type, addr, len, 0 /* is_insert */, state);
if (show_debug_regs)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state (ptid_get_pid (inferior_ptid));
-
aarch64_show_debug_reg_state (state,
"remove_watchpoint", addr, len, type);
}
@@ -859,17 +859,14 @@ aarch64_dr_state_remove_one_point (struct aarch64_debug_reg_state *state,
static int
aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert)
+ int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state;
-
/* The hardware breakpoint on AArch64 should always be 4-byte
aligned. */
if (!aarch64_point_is_aligned (0 /* is_watchpoint */ , addr, len))
return -1;
- state = aarch64_get_debug_reg_state ();
-
if (is_insert)
return aarch64_dr_state_insert_one_point (state, type, addr, len);
else
@@ -881,12 +878,9 @@ aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
static int
aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type,
- CORE_ADDR addr, int len, int is_insert)
+ CORE_ADDR addr, int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state;
-
- state = aarch64_get_debug_reg_state ();
-
if (is_insert)
return aarch64_dr_state_insert_one_point (state, type, addr, len);
else
@@ -902,11 +896,9 @@ aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type,
static int
aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
- CORE_ADDR addr, int len, int is_insert)
+ CORE_ADDR addr, int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
- struct aarch64_debug_reg_state *state
- = aarch64_get_debug_reg_state ();
-
while (len > 0)
{
CORE_ADDR aligned_addr;
@@ -939,12 +931,15 @@ aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
static int
aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
- int len, int is_insert)
+ int len, int is_insert,
+ struct aarch64_debug_reg_state *state)
{
if (aarch64_point_is_aligned (1 /* is_watchpoint */ , addr, len))
- return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert);
+ return aarch64_handle_aligned_watchpoint (type, addr, len, is_insert,
+ state);
else
- return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert);
+ return aarch64_handle_unaligned_watchpoint (type, addr, len, is_insert,
+ state);
}
static int
@@ -977,6 +972,7 @@ aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
{
int ret;
enum target_hw_bp_type targ_type;
+ struct aarch64_debug_reg_state *state = aarch64_get_debug_reg_state ();
if (show_debug_regs)
fprintf (stderr, "insert_point on entry (addr=0x%08lx, len=%d)\n",
@@ -987,10 +983,12 @@ aarch64_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
if (targ_type != hw_execute)
ret =
- aarch64_handle_watchpoint (targ_type, addr, len, 1 /* is_insert */);
+ aarch64_handle_watchpoint (targ_type, addr, len, 1 /* is_insert */,
+ state);
else
ret =
- aarch64_handle_breakpoint (targ_type, addr, len, 1 /* is_insert */);
+ aarch64_handle_breakpoint (targ_type, addr, len, 1 /* is_insert */,
+ state);
if (show_debug_regs)
aarch64_show_debug_reg_state (aarch64_get_debug_reg_state (),
@@ -1013,6 +1011,7 @@ aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
{
int ret;
enum target_hw_bp_type targ_type;
+ struct aarch64_debug_reg_state *state = aarch64_get_debug_reg_state ();
if (show_debug_regs)
fprintf (stderr, "remove_point on entry (addr=0x%08lx, len=%d)\n",
@@ -1024,10 +1023,12 @@ aarch64_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
/* Set up state pointers. */
if (targ_type != hw_execute)
ret =
- aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */);
+ aarch64_handle_watchpoint (targ_type, addr, len, 0 /* is_insert */,
+ state);
else
ret =
- aarch64_handle_breakpoint (targ_type, addr, len, 0 /* is_insert */);
+ aarch64_handle_breakpoint (targ_type, addr, len, 0 /* is_insert */,
+ state);
if (show_debug_regs)
aarch64_show_debug_reg_state (aarch64_get_debug_reg_state (),