mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
cpu: Move breakpoints field from CPU_COMMON to CPUState
Most targets were using offsetof(CPUFooState, breakpoints) to determine how much of CPUFooState to clear on reset. Use the next field after CPU_COMMON instead, if any, or sizeof(CPUFooState) otherwise. Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
ff4700b05c
commit
f0c3c505a8
43 changed files with 94 additions and 73 deletions
|
@ -125,7 +125,7 @@ static void lm32_cpu_reset(CPUState *s)
|
|||
lcc->parent_reset(s);
|
||||
|
||||
/* reset cpu state */
|
||||
memset(env, 0, offsetof(CPULM32State, breakpoints));
|
||||
memset(env, 0, offsetof(CPULM32State, eba));
|
||||
|
||||
lm32_cpu_init_cfg_reg(cpu);
|
||||
tlb_flush(env, 1);
|
||||
|
|
|
@ -166,11 +166,12 @@ struct CPULM32State {
|
|||
uint32_t bp[4]; /* breakpoints */
|
||||
uint32_t wp[4]; /* watchpoints */
|
||||
|
||||
CPUBreakpoint * cpu_breakpoint[4];
|
||||
struct CPUBreakpoint *cpu_breakpoint[4];
|
||||
struct CPUWatchpoint *cpu_watchpoint[4];
|
||||
|
||||
CPU_COMMON
|
||||
|
||||
/* Fields from here on are preserved across CPU reset. */
|
||||
uint32_t eba; /* exception base address */
|
||||
uint32_t deba; /* debug exception base address */
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ void lm32_debug_excp_handler(CPULM32State *env)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
|
||||
QTAILQ_FOREACH(bp, &cs->breakpoints, entry) {
|
||||
if (bp->pc == env->pc) {
|
||||
if (bp->flags & BP_CPU) {
|
||||
raise_exception(env, EXCP_BREAKPOINT);
|
||||
|
|
|
@ -1037,10 +1037,11 @@ static inline void decode(DisasContext *dc, uint32_t ir)
|
|||
|
||||
static void check_breakpoint(CPULM32State *env, DisasContext *dc)
|
||||
{
|
||||
CPUState *cs = CPU(lm32_env_get_cpu(env));
|
||||
CPUBreakpoint *bp;
|
||||
|
||||
if (unlikely(!QTAILQ_EMPTY(&env->breakpoints))) {
|
||||
QTAILQ_FOREACH(bp, &env->breakpoints, entry) {
|
||||
if (unlikely(!QTAILQ_EMPTY(&cs->breakpoints))) {
|
||||
QTAILQ_FOREACH(bp, &cs->breakpoints, entry) {
|
||||
if (bp->pc == dc->pc) {
|
||||
tcg_gen_movi_tl(cpu_pc, dc->pc);
|
||||
t_gen_raise_exception(dc, EXCP_DEBUG);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue