diff options
| author | Helge Deller <deller@gmx.de> | 2022-10-24 22:18:09 +0200 |
|---|---|---|
| committer | Laurent Vivier <laurent@vivier.eu> | 2022-10-25 09:20:40 +0200 |
| commit | bd5ccd61080abf976a6a6cc2d09d31299bea0cee (patch) | |
| tree | 3fce456ccb09b725ad1b32d7bfd7ab99a3529f0a /linux-user/cpu_loop-common.h | |
| parent | 35a2c85f7d691db7aa2c47181902ac87478eef7a (diff) | |
| download | focaccia-qemu-bd5ccd61080abf976a6a6cc2d09d31299bea0cee.tar.gz focaccia-qemu-bd5ccd61080abf976a6a6cc2d09d31299bea0cee.zip | |
linux-user: Add guest memory layout to exception dump
When the emulation stops with a hard exception it's very useful for debugging purposes to dump the current guest memory layout (for an example see /proc/self/maps) beside the CPU registers. The open_self_maps() function provides such a memory dump, but since it's located in the syscall.c file, various changes (add #includes, make this function externally visible, ...) are needed to be able to call it from the existing EXCP_DUMP() macro. This patch takes another approach by re-defining EXCP_DUMP() to call target_exception_dump(), which is in syscall.c, consolidates the log print functions and allows to add the call to dump the memory layout. Beside a reduced code footprint, this approach keeps the changes across the various callers minimal, and keeps EXCP_DUMP() highlighted as important macro/function. Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <Y1bzAWbw07WBKPxw@p100> [lv: remove pc declaration and setting] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'linux-user/cpu_loop-common.h')
| -rw-r--r-- | linux-user/cpu_loop-common.h | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/linux-user/cpu_loop-common.h b/linux-user/cpu_loop-common.h index 36ff5b14f2..e644d2ef90 100644 --- a/linux-user/cpu_loop-common.h +++ b/linux-user/cpu_loop-common.h @@ -23,18 +23,9 @@ #include "exec/log.h" #include "special-errno.h" -#define EXCP_DUMP(env, fmt, ...) \ -do { \ - CPUState *cs = env_cpu(env); \ - fprintf(stderr, fmt , ## __VA_ARGS__); \ - fprintf(stderr, "Failing executable: %s\n", exec_path); \ - cpu_dump_state(cs, stderr, 0); \ - if (qemu_log_separate()) { \ - qemu_log(fmt, ## __VA_ARGS__); \ - qemu_log("Failing executable: %s\n", exec_path); \ - log_cpu_state(cs, 0); \ - } \ -} while (0) +void target_exception_dump(CPUArchState *env, const char *fmt, int code); +#define EXCP_DUMP(env, fmt, code) \ + target_exception_dump(env, fmt, code) void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *regs); #endif |