18#include "gdbsupport/common-defs.h"
35 internal_error (_(
"Unrecognized watch register style"));
52 internal_error (_(
"Unrecognized watch register style"));
68 internal_error (_(
"Unrecognized watch register style"));
85 internal_error (_(
"Unrecognized watch register style"));
107 internal_error (_(
"Unrecognized watch register style"));
124 internal_error (_(
"Unrecognized watch register style"));
144 internal_error (_(
"Unrecognized watch register style"));
216 while (
f &&
f < mask)
230 CORE_ADDR
addr,
int len, uint32_t irw)
232 CORE_ADDR base_addr, last_byte, break_addr, segment_len;
233 CORE_ADDR mask_bits, t_low;
241 last_byte = addr + len - 1;
243 base_addr = addr & ~mask_bits;
249 if (t_low != 0 && irw == ((uint32_t) t_low & irw))
252 t_low &= ~(CORE_ADDR) t_hi;
253 if (addr >= t_low && last_byte <= (t_low + t_hi))
279 if (free_watches > 1)
287 if (t_low == 0 && irw == (t_hi & irw))
289 t_low = addr & ~(CORE_ADDR) t_hi;
290 break_addr = t_low + t_hi + 1;
291 if (break_addr >= addr + len)
294 segment_len = break_addr - addr;
295 mask_bits =
fill_mask (addr ^ (addr + segment_len - 1));
297 (addr & ~mask_bits) | irw);
300 if (break_addr >= addr + len)
305 len = addr + len - break_addr;
#define ptrace(request, pid, addr, data)
static struct mips_watchpoint * current_watches
static int watch_readback_valid
static struct pt_watch_regs watch_readback
CORE_ADDR mips_linux_watch_get_watchlo(struct pt_watch_regs *regs, int n)
static CORE_ADDR fill_mask(CORE_ADDR mask)
void mips_linux_watch_set_watchlo(struct pt_watch_regs *regs, int n, CORE_ADDR value)
uint32_t mips_linux_watch_get_irw_mask(struct pt_watch_regs *regs, int n)
void mips_linux_watch_set_watchhi(struct pt_watch_regs *regs, int n, uint16_t value)
static uint32_t get_reg_mask(struct pt_watch_regs *regs, int n)
uint32_t mips_linux_watch_get_num_valid(struct pt_watch_regs *regs)
uint32_t mips_linux_watch_type_to_irw(enum target_hw_bp_type type)
int mips_linux_watch_try_one_watch(struct pt_watch_regs *regs, CORE_ADDR addr, int len, uint32_t irw)
void mips_linux_watch_populate_regs(struct mips_watchpoint *current_watches, struct pt_watch_regs *regs)
int mips_linux_read_watch_registers(long lwpid, struct pt_watch_regs *watch_readback, int *watch_readback_valid, int force)
uint32_t mips_linux_watch_get_watchhi(struct pt_watch_regs *regs, int n)
#define PTRACE_GET_WATCH_REGS
uint32_t watchlo[MAX_DEBUG_REGISTER]
uint16_t watchhi[MAX_DEBUG_REGISTER]
uint16_t watch_masks[MAX_DEBUG_REGISTER]
uint16_t watchhi[MAX_DEBUG_REGISTER]
uint64_t watchlo[MAX_DEBUG_REGISTER]
uint16_t watch_masks[MAX_DEBUG_REGISTER]
enum target_hw_bp_type type
struct mips_watchpoint * next
struct mips32_watch_regs mips32
enum pt_watch_style style
struct mips64_watch_regs mips64