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.
Signed-off-by: Igor Mammedov <imamm...@redhat.com> --- 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; -- 1.7.7.6