60ba692c78
Use per-CPU structure to store HW watchpoints registers state for each CPU present in the system. Those registers will be restored upon wake up from the STOP state if requested by the debug_monitor code. The method is similar to the one introduced to AMD64. We store all possible 16 registers for HW watchpoints (maximum allowed by the architecture). HW breakpoints are not maintained since they are used for single stepping only. Pointed out by: kib Reviewed by: wma No strong objections from: kib Submitted by: Zbigniew Bodek <zbb@semihalf.com> Obtained from: Semihalf Sponsored by: Juniper Networks Inc. Differential Revision: https://reviews.freebsd.org/D4338
37 lines
916 B
C
37 lines
916 B
C
/* $NetBSD: reg.h,v 1.2 2001/02/23 21:23:52 reinoud Exp $ */
|
|
/* $FreeBSD$ */
|
|
#ifndef MACHINE_REG_H
|
|
#define MACHINE_REG_H
|
|
|
|
#include <machine/fp.h>
|
|
|
|
struct reg {
|
|
unsigned int r[13];
|
|
unsigned int r_sp;
|
|
unsigned int r_lr;
|
|
unsigned int r_pc;
|
|
unsigned int r_cpsr;
|
|
};
|
|
|
|
struct fpreg {
|
|
unsigned int fpr_fpsr;
|
|
fp_reg_t fpr[8];
|
|
};
|
|
|
|
struct dbreg {
|
|
#define ARM_WR_MAX 16 /* Maximum number of watchpoint registers */
|
|
unsigned int dbg_wcr[ARM_WR_MAX]; /* Watchpoint Control Registers */
|
|
unsigned int dbg_wvr[ARM_WR_MAX]; /* Watchpoint Value Registers */
|
|
};
|
|
|
|
#ifdef _KERNEL
|
|
int fill_regs(struct thread *, struct reg *);
|
|
int set_regs(struct thread *, struct reg *);
|
|
int fill_fpregs(struct thread *, struct fpreg *);
|
|
int set_fpregs(struct thread *, struct fpreg *);
|
|
int fill_dbregs(struct thread *, struct dbreg *);
|
|
int set_dbregs(struct thread *, struct dbreg *);
|
|
#endif
|
|
|
|
#endif /* !MACHINE_REG_H */
|