qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH qom-next 01/12] store prev_debug_excp_handler gl


From: Igor Mammedov
Subject: Re: [Qemu-devel] [PATCH qom-next 01/12] store prev_debug_excp_handler globaly and not per target
Date: Wed, 30 May 2012 15:35:31 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1

On 05/30/2012 12:51 PM, Jan Kiszka wrote:
On 2012-05-30 00:10, Igor Mammedov wrote:
current callers all do the same thing, storing in prev_debug_excp_handler
previous handler and then calling it in breakpoint_handler.
Move prev_debug_excp_handler from local scope to global and make
cpu_set_debug_excp_handler() always to store previous handler.

NAK, this is not a beautiful interface, exposing the previous handler
via global variable. And it prevents chaining of handlers.

Is there a technical reason for this refactoring?

current 2 users use prev_debug_excp_handler in the same manner i.e. doing
        prev_debug_excp_handler =
            cpu_set_debug_excp_handler(breakpoint_handler);
so consolidating it in one place looks better than writing the same code 
per-target.
In addition when chaining more then current and previous handlers would be 
needed,
the global var prev_debug_excp_handler could be replaced by global call
prev_debug_excp_handler() without affecting per-target code and it could be
implemented in cpu-exec.c or even doing chaining completely internally in 
cpu-exec.c
without breakpoint_handler() being aware of it.

PS:
For moving tcg initialization from helper.c into cpu.c I would need to make
prev_debug_excp_handler global per target any way for above assignment to
compile and it would be the same ugliness but without possible future.

PS2:
alternative with defining tcg_x86_init() call inside helper.c and calling
from cpu.c is acceptable too, so if you still don't like idea of this patch
I can go this way.



Jan


Signed-off-by: Igor Mammedov<address@hidden>
---
  cpu-exec.c |    7 +++----
  exec-all.h |    3 ++-
  2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/cpu-exec.c b/cpu-exec.c
index 83cac93..44c83d9 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -155,13 +155,12 @@ static inline TranslationBlock *tb_find_fast(CPUArchState 
*env)
  }

  static CPUDebugExcpHandler *debug_excp_handler;
+CPUDebugExcpHandler *prev_debug_excp_handler;

-CPUDebugExcpHandler *cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler)
+void cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler)
  {
-    CPUDebugExcpHandler *old_handler = debug_excp_handler;
-
+    prev_debug_excp_handler = debug_excp_handler;
      debug_excp_handler = handler;
-    return old_handler;
  }

  static void cpu_handle_debug_exception(CPUArchState *env)
diff --git a/exec-all.h b/exec-all.h
index 9bda7f7..f3c3a8a 100644
--- a/exec-all.h
+++ b/exec-all.h
@@ -357,7 +357,8 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env1, 
target_ulong addr);

  typedef void (CPUDebugExcpHandler)(CPUArchState *env);

-CPUDebugExcpHandler *cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler);
+extern CPUDebugExcpHandler *prev_debug_excp_handler;
+void cpu_set_debug_excp_handler(CPUDebugExcpHandler *handler);

  /* vl.c */
  extern int singlestep;


--
-----
 Igor



reply via email to

[Prev in Thread] Current Thread [Next in Thread]