Message ID | 20100103120926.29681.1917.stgit@skyserv |
---|---|
State | New |
Headers | show |
Thanks, applied. On Sun, Jan 3, 2010 at 12:09 PM, Igor V. Kovalenko <igor.v.kovalenko@gmail.com> wrote: > From: Igor V. Kovalenko <igor.v.kovalenko@gmail.com> > > - this fixes stepping with gdb, where do_unassigned_access > may be called from gdb handler, outside of generated code > > Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com> > --- > target-sparc/op_helper.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c > index 4e0a0e3..bd01a5e 100644 > --- a/target-sparc/op_helper.c > +++ b/target-sparc/op_helper.c > @@ -3686,21 +3686,24 @@ void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, > void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, > int is_asi, int size) > { > -#ifdef DEBUG_UNASSIGNED > CPUState *saved_env; > > /* XXX: hack to restore env in all cases, even if not called from > generated code */ > saved_env = env; > env = cpu_single_env; > + > +#ifdef DEBUG_UNASSIGNED > printf("Unassigned mem access to " TARGET_FMT_plx " from " TARGET_FMT_lx > "\n", addr, env->pc); > - env = saved_env; > #endif > + > if (is_exec) > raise_exception(TT_CODE_ACCESS); > else > raise_exception(TT_DATA_ACCESS); > + > + env = saved_env; > } > #endif > > > > >
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 4e0a0e3..bd01a5e 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -3686,21 +3686,24 @@ void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, int is_asi, int size) { -#ifdef DEBUG_UNASSIGNED CPUState *saved_env; /* XXX: hack to restore env in all cases, even if not called from generated code */ saved_env = env; env = cpu_single_env; + +#ifdef DEBUG_UNASSIGNED printf("Unassigned mem access to " TARGET_FMT_plx " from " TARGET_FMT_lx "\n", addr, env->pc); - env = saved_env; #endif + if (is_exec) raise_exception(TT_CODE_ACCESS); else raise_exception(TT_DATA_ACCESS); + + env = saved_env; } #endif