[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/35] x86: Unbreak TCG support for hardware breakpo
From: |
Marcelo Tosatti |
Subject: |
[Qemu-devel] [PATCH 19/35] x86: Unbreak TCG support for hardware breakpoints |
Date: |
Tue, 15 Mar 2011 18:50:33 -0300 |
From: Jan Kiszka <address@hidden>
Commit 83f338f73e broke x86 hardware breakpoint emulation by moving the
debug exception handling out of cpu_exec. Fix this by moving all TCG
related bits back, only leaving the generic guest debugging parts in
cpus.c.
Signed-off-by: Jan Kiszka <address@hidden>
CC: TeLeMan <address@hidden>
Signed-off-by: Marcelo Tosatti <address@hidden>
---
cpu-exec.c | 27 +++++++++++++++++++++++++++
cpus.c | 27 +++------------------------
2 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/cpu-exec.c b/cpu-exec.c
index 34eaedc..5cc9379 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -196,6 +196,30 @@ static inline TranslationBlock *tb_find_fast(void)
return tb;
}
+static CPUDebugExcpHandler *debug_excp_handler;
+
+CPUDebugExcpHandler *cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler)
+{
+ CPUDebugExcpHandler *old_handler = debug_excp_handler;
+
+ debug_excp_handler = handler;
+ return old_handler;
+}
+
+static void cpu_handle_debug_exception(CPUState *env)
+{
+ CPUWatchpoint *wp;
+
+ if (!env->watchpoint_hit) {
+ QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
+ wp->flags &= ~BP_WATCHPOINT_HIT;
+ }
+ }
+ if (debug_excp_handler) {
+ debug_excp_handler(env);
+ }
+}
+
/* main execution loop */
volatile sig_atomic_t exit_request;
@@ -269,6 +293,9 @@ int cpu_exec(CPUState *env1)
if (env->exception_index >= EXCP_INTERRUPT) {
/* exit request from the cpu execution loop */
ret = env->exception_index;
+ if (ret == EXCP_DEBUG) {
+ cpu_handle_debug_exception(env);
+ }
break;
} else {
#if defined(CONFIG_USER_ONLY)
diff --git a/cpus.c b/cpus.c
index 26e5bba..975a6ce 100644
--- a/cpus.c
+++ b/cpus.c
@@ -166,29 +166,8 @@ static bool all_cpu_threads_idle(void)
return true;
}
-static CPUDebugExcpHandler *debug_excp_handler;
-
-CPUDebugExcpHandler *cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler)
-{
- CPUDebugExcpHandler *old_handler = debug_excp_handler;
-
- debug_excp_handler = handler;
- return old_handler;
-}
-
-static void cpu_handle_debug_exception(CPUState *env)
+static void cpu_handle_guest_debug(CPUState *env)
{
- CPUWatchpoint *wp;
-
- if (!env->watchpoint_hit) {
- QTAILQ_FOREACH(wp, &env->watchpoints, entry) {
- wp->flags &= ~BP_WATCHPOINT_HIT;
- }
- }
- if (debug_excp_handler) {
- debug_excp_handler(env);
- }
-
gdb_set_stop_cpu(env);
qemu_system_debug_request();
#ifdef CONFIG_IOTHREAD
@@ -818,7 +797,7 @@ static void *qemu_kvm_cpu_thread_fn(void *arg)
if (cpu_can_run(env)) {
r = kvm_cpu_exec(env);
if (r == EXCP_DEBUG) {
- cpu_handle_debug_exception(env);
+ cpu_handle_guest_debug(env);
}
}
qemu_kvm_wait_io_event(env);
@@ -1110,7 +1089,7 @@ bool cpu_exec_all(void)
r = tcg_cpu_exec(env);
}
if (r == EXCP_DEBUG) {
- cpu_handle_debug_exception(env);
+ cpu_handle_guest_debug(env);
break;
}
} else if (env->stop || env->stopped) {
--
1.7.4
- [Qemu-devel] [PATCH 08/35] Synchronize VCPU states before reset, (continued)
- [Qemu-devel] [PATCH 08/35] Synchronize VCPU states before reset, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 07/35] x86: Optionally avoid injecting AO MCEs while others are pending, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 22/35] kvm: Add in-kernel irqchip awareness to cpu_thread_is_idle, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 03/35] x86: Account for MCE in cpu_has_work, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 06/35] x86: Refine error reporting of MCE injection services, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 24/35] kvm: Mark VCPU state dirty on creation, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 16/35] Add qemu_ram_remap, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 15/35] kvm: x86: Fail kvm_arch_init_vcpu if MCE initialization fails, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 01/35] kvm: ppc: Fix breakage of kvm_arch_pre_run/process_irqchip_events, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 10/35] kvm: Rename kvm_arch_process_irqchip_events to async_events, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 19/35] x86: Unbreak TCG support for hardware breakpoints,
Marcelo Tosatti <=
- [Qemu-devel] [PATCH 17/35] KVM, MCE, unpoison memory address across reboot, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 25/35] x86: Properly reset PAT MSR, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 09/35] kvm: x86: Move MCE functions together, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 21/35] Break up user and system cpu_interrupt implementations, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 11/35] kvm: x86: Inject pending MCE events on state writeback, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 05/35] x86: Small cleanups of MCE helpers, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 13/35] kvm: x86: Consolidate TCG and KVM MCE injection code, Marcelo Tosatti, 2011/03/15
- [Qemu-devel] [PATCH 26/35] x86: Save/restore PAT MSR, Marcelo Tosatti, 2011/03/15