summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorIgor V. Kovalenko <igor.v.kovalenko@gmail.com>2010-01-03 15:09:27 +0300
committerBlue Swirl <blauwirbel@gmail.com>2010-01-03 12:19:20 +0000
commitdffbe21746fc7a8b66fbbdf15f74eefccd8edafd (patch)
tree911765f4f97c646bf0784122dc9caf39e98603c5
parent87f6d3f630e944586f5795e414cfedcd31e4c498 (diff)
downloadfocaccia-qemu-dffbe21746fc7a8b66fbbdf15f74eefccd8edafd.tar.gz
focaccia-qemu-dffbe21746fc7a8b66fbbdf15f74eefccd8edafd.zip
pass env to raise_exception if called outside of op_helper code
- 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>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r--target-sparc/op_helper.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
index c849343ee2..dab2c25a2b 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