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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).