From: Laurent Vivier <laurent@vivier.eu>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH 10/11] linux-user: avoid "naked" qemu_log
Date: Sat, 12 Dec 2015 16:04:47 +0100 [thread overview]
Message-ID: <566C378F.4050308@vivier.eu> (raw)
In-Reply-To: <1449916587-18312-11-git-send-email-pbonzini@redhat.com>
Le 12/12/2015 11:36, Paolo Bonzini a écrit :
> Ensure that all log writes are protected by qemu_loglevel_mask or,
> in serious cases, go to both the log and stderr.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> linux-user/main.c | 71 ++++++++++++++++++++++++-------------------------------
> 1 file changed, 31 insertions(+), 40 deletions(-)
>
> diff --git a/linux-user/main.c b/linux-user/main.c
> index 6783722..ee12035 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -45,6 +45,18 @@ static const char *cpu_model;
> unsigned long mmap_min_addr;
> unsigned long guest_base;
> int have_guest_base;
> +
> +#define EXCP_DUMP(env, fmt, ...) \
> +do { \
> + CPUState *cs = ENV_GET_CPU(env); \
> + fprintf(stderr, fmt , ## __VA_ARGS__); \
> + cpu_dump_state(cs, stderr, fprintf, 0); \
> + if (qemu_log_separate()) { \
> + qemu_log(fmt, ## __VA_ARGS__); \
> + log_cpu_state(cs, 0); \
> + } \
> +} while (0)
> +
> #if (TARGET_LONG_BITS == 32) && (HOST_LONG_BITS == 64)
> /*
> * When running 32-on-64 we should make sure we can fit all of the possible
> @@ -416,8 +428,8 @@ void cpu_loop(CPUX86State *env)
> break;
> default:
> pc = env->segs[R_CS].base + env->eip;
> - fprintf(stderr, "qemu: 0x%08lx: unhandled CPU exception 0x%x - aborting\n",
> - (long)pc, trapnr);
> + EXCP_DUMP(env, "qemu: 0x%08lx: unhandled CPU exception 0x%x - aborting\n",
> + (long)pc, trapnr);
> abort();
> }
> process_pending_signals(env);
> @@ -865,9 +877,7 @@ void cpu_loop(CPUARMState *env)
> break;
> default:
> error:
> - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
> - trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> abort();
> }
> process_pending_signals(env);
> @@ -1056,9 +1066,7 @@ void cpu_loop(CPUARMState *env)
> env->xregs[0] = do_arm_semihosting(env);
> break;
> default:
> - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
> - trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> abort();
> }
> process_pending_signals(env);
> @@ -1148,8 +1156,7 @@ void cpu_loop(CPUUniCore32State *env)
> }
>
> error:
> - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> abort();
> }
> #endif
> @@ -1467,17 +1474,6 @@ int ppc_dcr_write (ppc_dcr_t *dcr_env, int dcrn, uint32_t val)
> return -1;
> }
>
> -#define EXCP_DUMP(env, fmt, ...) \
> -do { \
> - CPUState *cs = ENV_GET_CPU(env); \
> - fprintf(stderr, fmt , ## __VA_ARGS__); \
> - cpu_dump_state(cs, stderr, fprintf, 0); \
> - if (qemu_log_separate()) { \
> - qemu_log(fmt, ## __VA_ARGS__); \
> - log_cpu_state(cs, 0); \
> - } \
> -} while (0)
> -
> static int do_store_exclusive(CPUPPCState *env)
> {
> target_ulong addr;
> @@ -2636,9 +2632,7 @@ done_syscall:
> break;
> default:
> error:
> - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
> - trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> abort();
> }
> process_pending_signals(env);
> @@ -2661,11 +2655,11 @@ void cpu_loop(CPUOpenRISCState *env)
>
> switch (trapnr) {
> case EXCP_RESET:
> - qemu_log("\nReset request, exit, pc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nReset request, exit, pc is %#x\n", env->pc);
> exit(EXIT_FAILURE);
> break;
> case EXCP_BUSERR:
> - qemu_log("\nBus error, exit, pc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nBus error, exit, pc is %#x\n", env->pc);
> gdbsig = TARGET_SIGBUS;
> break;
> case EXCP_DPF:
> @@ -2674,25 +2668,25 @@ void cpu_loop(CPUOpenRISCState *env)
> gdbsig = TARGET_SIGSEGV;
> break;
> case EXCP_TICK:
> - qemu_log("\nTick time interrupt pc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nTick time interrupt pc is %#x\n", env->pc);
> break;
> case EXCP_ALIGN:
> - qemu_log("\nAlignment pc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nAlignment pc is %#x\n", env->pc);
> gdbsig = TARGET_SIGBUS;
> break;
> case EXCP_ILLEGAL:
> - qemu_log("\nIllegal instructionpc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nIllegal instructionpc is %#x\n", env->pc);
> gdbsig = TARGET_SIGILL;
> break;
> case EXCP_INT:
> - qemu_log("\nExternal interruptpc is %#x\n", env->pc);
> + qemu_log_mask(CPU_LOG_INT, "\nExternal interruptpc is %#x\n", env->pc);
> break;
> case EXCP_DTLBMISS:
> case EXCP_ITLBMISS:
> - qemu_log("\nTLB miss\n");
> + qemu_log_mask(CPU_LOG_INT, "\nTLB miss\n");
> break;
> case EXCP_RANGE:
> - qemu_log("\nRange\n");
> + qemu_log_mask(CPU_LOG_INT, "\nRange\n");
> gdbsig = TARGET_SIGSEGV;
> break;
> case EXCP_SYSCALL:
> @@ -2707,19 +2701,18 @@ void cpu_loop(CPUOpenRISCState *env)
> env->gpr[8], 0, 0);
> break;
> case EXCP_FPE:
> - qemu_log("\nFloating point error\n");
> + qemu_log_mask(CPU_LOG_INT, "\nFloating point error\n");
> break;
> case EXCP_TRAP:
> - qemu_log("\nTrap\n");
> + qemu_log_mask(CPU_LOG_INT, "\nTrap\n");
> gdbsig = TARGET_SIGTRAP;
> break;
> case EXCP_NR:
> - qemu_log("\nNR\n");
> + qemu_log_mask(CPU_LOG_INT, "\nNR\n");
> break;
> default:
> - qemu_log("\nqemu: unhandled CPU exception %#x - aborting\n",
> + EXCP_DUMP(env, "\nqemu: unhandled CPU exception %#x - aborting\n",
> trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> gdbsig = TARGET_SIGILL;
> break;
> }
> @@ -3047,9 +3040,7 @@ void cpu_loop(CPUM68KState *env)
> }
> break;
> default:
> - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
> - trapnr);
> - cpu_dump_state(cs, stderr, fprintf, 0);
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n", trapnr);
> abort();
> }
> process_pending_signals(env);
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
next prev parent reply other threads:[~2015-12-12 15:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-12 10:36 [Qemu-devel] [PATCH 00/11] Avoid always-active qemu_log calls Paolo Bonzini
2015-12-12 10:36 ` [Qemu-devel] [PATCH 01/11] qemu-log: introduce qemu_log_separate Paolo Bonzini
2015-12-12 10:36 ` [Qemu-devel] [PATCH 02/11] alpha: convert "naked" qemu_log to tracepoint Paolo Bonzini
2015-12-16 16:59 ` Richard Henderson
2015-12-12 10:36 ` [Qemu-devel] [PATCH 03/11] cris: avoid "naked" qemu_log Paolo Bonzini
2015-12-17 13:32 ` Edgar E. Iglesias
2015-12-12 10:36 ` [Qemu-devel] [PATCH 04/11] microblaze: " Paolo Bonzini
2015-12-17 13:34 ` Edgar E. Iglesias
2015-12-12 10:36 ` [Qemu-devel] [PATCH 05/11] s390x: " Paolo Bonzini
2015-12-12 10:36 ` [Qemu-devel] [PATCH 06/11] ppc: cleanup logging Paolo Bonzini
2015-12-14 0:24 ` David Gibson
2015-12-12 10:36 ` [Qemu-devel] [PATCH 07/11] tricore: avoid "naked" qemu_log Paolo Bonzini
2015-12-12 19:47 ` Bastian Koppelmann
2015-12-12 20:15 ` Peter Maydell
2015-12-12 10:36 ` [Qemu-devel] [PATCH 08/11] xtensa: " Paolo Bonzini
2015-12-12 10:36 ` [Qemu-devel] [PATCH 09/11] user: introduce "-d page" Paolo Bonzini
2015-12-12 10:36 ` [Qemu-devel] [PATCH 10/11] linux-user: avoid "naked" qemu_log Paolo Bonzini
2015-12-12 15:04 ` Laurent Vivier [this message]
2015-12-12 10:39 ` [Qemu-devel] [PATCH 11/11] linux-user: convert DEBUG_SIGNAL logging to tracepoints Paolo Bonzini
2015-12-12 15:08 ` Laurent Vivier
2015-12-15 6:59 ` Thomas Huth
2015-12-15 13:19 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=566C378F.4050308@vivier.eu \
--to=laurent@vivier.eu \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.