* [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm @ 2016-09-23 15:29 Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 2/4] target-microblaze: " Richard Henderson ` (4 more replies) 0 siblings, 5 replies; 8+ messages in thread From: Richard Henderson @ 2016-09-23 15:29 UTC (permalink / raw) To: qemu-devel; +Cc: Edgar E . Iglesias Dumping cpu state is what -d cpu is for. Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> Signed-off-by: Richard Henderson <rth@twiddle.net> --- target-cris/translate.c | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/target-cris/translate.c b/target-cris/translate.c index f4a8d7d..9de26af 100644 --- a/target-cris/translate.c +++ b/target-cris/translate.c @@ -3135,29 +3135,6 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) dc->cpustate_changed = 0; - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { - qemu_log( - "pc=%x %x flg=%" PRIx64 " bt=%x ds=%u ccs=%x\n" - "pid=%x usp=%x\n" - "%x.%x.%x.%x\n" - "%x.%x.%x.%x\n" - "%x.%x.%x.%x\n" - "%x.%x.%x.%x\n", - dc->pc, dc->ppc, - (uint64_t)tb->flags, - env->btarget, (unsigned)tb->flags & 7, - env->pregs[PR_CCS], - env->pregs[PR_PID], env->pregs[PR_USP], - env->regs[0], env->regs[1], env->regs[2], env->regs[3], - env->regs[4], env->regs[5], env->regs[6], env->regs[7], - env->regs[8], env->regs[9], - env->regs[10], env->regs[11], - env->regs[12], env->regs[13], - env->regs[14], env->regs[15]); - qemu_log("--------------\n"); - qemu_log("IN: %s\n", lookup_symbol(pc_start)); - } - next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; num_insns = 0; max_insns = tb->cflags & CF_COUNT_MASK; @@ -3313,6 +3290,8 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) #if !DISAS_CRIS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log("--------------\n"); + qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, env->pregs[PR_VR]); qemu_log("\nisize=%d osize=%d\n", -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 2/4] target-microblaze: Do not dump cpu state with -d in_asm 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson @ 2016-09-23 15:29 ` Richard Henderson 2016-09-23 16:45 ` Edgar E. Iglesias 2016-09-23 15:29 ` [Qemu-devel] [PATCH 3/4] target-openrisc: " Richard Henderson ` (3 subsequent siblings) 4 siblings, 1 reply; 8+ messages in thread From: Richard Henderson @ 2016-09-23 15:29 UTC (permalink / raw) To: qemu-devel; +Cc: Edgar E . Iglesias Dumping cpu state is what -d cpu is for. Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> Signed-off-by: Richard Henderson <rth@twiddle.net> --- target-microblaze/translate.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c index 80098ec..5a4a8b9 100644 --- a/target-microblaze/translate.c +++ b/target-microblaze/translate.c @@ -1670,13 +1670,6 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) cpu_abort(cs, "Microblaze: unaligned PC=%x\n", pc_start); } - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { -#if !SIM_COMPAT - qemu_log("--------------\n"); - log_cpu_state(CPU(cpu), 0); -#endif - } - next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; num_insns = 0; max_insns = tb->cflags & CF_COUNT_MASK; @@ -1820,7 +1813,7 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) #if !SIM_COMPAT if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log("\n"); + qemu_log("--------------\n"); #if DISAS_GNU log_target_disas(cs, pc_start, dc->pc - pc_start, 0); #endif -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 2/4] target-microblaze: Do not dump cpu state with -d in_asm 2016-09-23 15:29 ` [Qemu-devel] [PATCH 2/4] target-microblaze: " Richard Henderson @ 2016-09-23 16:45 ` Edgar E. Iglesias 0 siblings, 0 replies; 8+ messages in thread From: Edgar E. Iglesias @ 2016-09-23 16:45 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel On Fri, Sep 23, 2016 at 08:29:09AM -0700, Richard Henderson wrote: > Dumping cpu state is what -d cpu is for. > Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> > Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> > Signed-off-by: Richard Henderson <rth@twiddle.net> > --- > target-microblaze/translate.c | 9 +-------- > 1 file changed, 1 insertion(+), 8 deletions(-) > > diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c > index 80098ec..5a4a8b9 100644 > --- a/target-microblaze/translate.c > +++ b/target-microblaze/translate.c > @@ -1670,13 +1670,6 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) > cpu_abort(cs, "Microblaze: unaligned PC=%x\n", pc_start); > } > > - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { > -#if !SIM_COMPAT > - qemu_log("--------------\n"); > - log_cpu_state(CPU(cpu), 0); > -#endif > - } > - > next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > @@ -1820,7 +1813,7 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) > #if !SIM_COMPAT > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > - qemu_log("\n"); > + qemu_log("--------------\n"); > #if DISAS_GNU > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > #endif > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 3/4] target-openrisc: Do not dump cpu state with -d in_asm 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 2/4] target-microblaze: " Richard Henderson @ 2016-09-23 15:29 ` Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks Richard Henderson ` (2 subsequent siblings) 4 siblings, 0 replies; 8+ messages in thread From: Richard Henderson @ 2016-09-23 15:29 UTC (permalink / raw) To: qemu-devel; +Cc: Jia Liu Dumping cpu state is what -d cpu is for. Cc: Jia Liu <proljc@gmail.com> Signed-off-by: Richard Henderson <rth@twiddle.net> --- target-openrisc/translate.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c index 28c9446..a4625f9 100644 --- a/target-openrisc/translate.c +++ b/target-openrisc/translate.c @@ -1651,10 +1651,6 @@ void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb) dc->synced_flags = dc->tb_flags = tb->flags; dc->delayed_branch = !!(dc->tb_flags & D_FLAG); dc->singlestep_enabled = cs->singlestep_enabled; - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { - qemu_log("-----------------------------------------\n"); - log_cpu_state(CPU(cpu), 0); - } next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; num_insns = 0; @@ -1754,7 +1750,8 @@ void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { - qemu_log("\n"); + qemu_log("----------------\n"); + qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, 0); qemu_log("\nisize=%d osize=%d\n", dc->pc - pc_start, tcg_op_buf_count()); -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 2/4] target-microblaze: " Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 3/4] target-openrisc: " Richard Henderson @ 2016-09-23 15:29 ` Richard Henderson 2016-09-24 13:12 ` Paolo Bonzini 2016-09-23 16:45 ` [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Edgar E. Iglesias 2016-09-26 8:32 ` Alex Bennée 4 siblings, 1 reply; 8+ messages in thread From: Richard Henderson @ 2016-09-23 15:29 UTC (permalink / raw) To: qemu-devel; +Cc: Paolo Bonzini, Alex Bennee Reuse the existing locking provided by stdio to keep in_asm, cpu, op, op_opt, op_ind, and out_asm as contiguous blocks. While it isn't possible to interleave e.g. in_asm or op_opt logs because of the TB lock protecting all code generation, it is possible to interleave cpu logs, or to interleave a cpu dump with an out_asm dump. Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Alex Bennee <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <rth@twiddle.net> --- cpu-exec.c | 2 ++ exec.c | 2 ++ include/qemu/log.h | 16 ++++++++++++++++ target-alpha/translate.c | 2 ++ target-arm/translate-a64.c | 2 ++ target-arm/translate.c | 2 ++ target-cris/translate.c | 2 ++ target-i386/translate.c | 4 ++++ target-lm32/translate.c | 2 ++ target-m68k/translate.c | 2 ++ target-microblaze/translate.c | 2 ++ target-mips/translate.c | 2 ++ target-openrisc/translate.c | 2 ++ target-ppc/translate.c | 2 ++ target-s390x/translate.c | 2 ++ target-sh4/translate.c | 2 ++ target-sparc/translate.c | 2 ++ target-tilegx/translate.c | 6 +++++- target-tricore/translate.c | 2 ++ target-unicore32/translate.c | 2 ++ target-xtensa/translate.c | 2 ++ tcg/tcg.c | 8 ++++++++ translate-all.c | 2 ++ 23 files changed, 71 insertions(+), 1 deletion(-) diff --git a/cpu-exec.c b/cpu-exec.c index 9f4bd0b..7423049 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -149,6 +149,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) #if defined(DEBUG_DISAS) if (qemu_loglevel_mask(CPU_LOG_TB_CPU) && qemu_log_in_addr_range(itb->pc)) { + qemu_log_lock(); #if defined(TARGET_I386) log_cpu_state(cpu, CPU_DUMP_CCOP); #elif defined(TARGET_M68K) @@ -160,6 +161,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) #else log_cpu_state(cpu, 0); #endif + qemu_log_unlock(); } #endif /* DEBUG_DISAS */ diff --git a/exec.c b/exec.c index c81d5ab..f8ed786 100644 --- a/exec.c +++ b/exec.c @@ -905,11 +905,13 @@ void cpu_abort(CPUState *cpu, const char *fmt, ...) fprintf(stderr, "\n"); cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP); if (qemu_log_separate()) { + qemu_log_lock(); qemu_log("qemu: fatal: "); qemu_log_vprintf(fmt, ap2); qemu_log("\n"); log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP); qemu_log_flush(); + qemu_log_unlock(); qemu_log_close(); } va_end(ap2); diff --git a/include/qemu/log.h b/include/qemu/log.h index 00bf37f..aba3301 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -51,6 +51,22 @@ static inline bool qemu_loglevel_mask(int mask) return (qemu_loglevel & mask) != 0; } +/* Lock output for a series of related logs. Since this is not needed + * for a single qemu_log / qemu_log_mask / qemu_log_mask_and_addr, we + * assume that qemu_loglevel_mask has already been tested, and that + * qemu_loglevel is never set when qemu_logfile is unset. + */ + +static inline void qemu_log_lock(void) +{ + flockfile(qemu_logfile); +} + +static inline void qemu_log_unlock(void) +{ + funlockfile(qemu_logfile); +} + /* Logging functions: */ /* main logging function diff --git a/target-alpha/translate.c b/target-alpha/translate.c index c27c7b9..af717ca 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -3000,9 +3000,11 @@ void gen_intermediate_code(CPUAlphaState *env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, ctx.pc - pc_start, 1); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c index ddf52f5..60e8cf1 100644 --- a/target-arm/translate-a64.c +++ b/target-arm/translate-a64.c @@ -11356,11 +11356,13 @@ done_generating: #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, 4 | (bswap_code(dc->sctlr_b) ? 2 : 0)); qemu_log("\n"); + qemu_log_unlock(); } #endif tb->size = dc->pc - pc_start; diff --git a/target-arm/translate.c b/target-arm/translate.c index 693d4bc..f550b00 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -11998,11 +11998,13 @@ done_generating: #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, dc->thumb | (dc->sctlr_b << 1)); qemu_log("\n"); + qemu_log_unlock(); } #endif tb->size = dc->pc - pc_start; diff --git a/target-cris/translate.c b/target-cris/translate.c index 9de26af..81147bb 100644 --- a/target-cris/translate.c +++ b/target-cris/translate.c @@ -3290,12 +3290,14 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) #if !DISAS_CRIS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("--------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, env->pregs[PR_VR]); qemu_log("\nisize=%d osize=%d\n", dc->pc - pc_start, tcg_op_buf_count()); + qemu_log_unlock(); } #endif #endif diff --git a/target-i386/translate.c b/target-i386/translate.c index 9447557..2f60e9c 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -2391,11 +2391,13 @@ static void gen_unknown_opcode(CPUX86State *env, DisasContext *s) if (qemu_loglevel_mask(LOG_UNIMP)) { target_ulong pc = s->pc_start, end = s->pc; + qemu_log_lock(); qemu_log("ILLOPC: " TARGET_FMT_lx ":", pc); for (; pc < end; ++pc) { qemu_log(" %02x", cpu_ldub_code(env, pc)); } qemu_log("\n"); + qemu_log_unlock(); } } @@ -8362,6 +8364,7 @@ done_generating: if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { int disas_flags; + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); #ifdef TARGET_X86_64 @@ -8372,6 +8375,7 @@ done_generating: disas_flags = !dc->code32; log_target_disas(cs, pc_start, pc_ptr - pc_start, disas_flags); qemu_log("\n"); + qemu_log_unlock(); } #endif diff --git a/target-lm32/translate.c b/target-lm32/translate.c index 2d8caeb..3d2cecb 100644 --- a/target-lm32/translate.c +++ b/target-lm32/translate.c @@ -1149,10 +1149,12 @@ void gen_intermediate_code(CPULM32State *env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("\n"); log_target_disas(cs, pc_start, dc->pc - pc_start, 0); qemu_log("\nisize=%d osize=%d\n", dc->pc - pc_start, tcg_op_buf_count()); + qemu_log_unlock(); } #endif } diff --git a/target-m68k/translate.c b/target-m68k/translate.c index ecd5e5c..43b9ea1 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -3070,10 +3070,12 @@ void gen_intermediate_code(CPUM68KState *env, TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif tb->size = dc->pc - pc_start; diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c index 5a4a8b9..5274191 100644 --- a/target-microblaze/translate.c +++ b/target-microblaze/translate.c @@ -1813,12 +1813,14 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) #if !SIM_COMPAT if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("--------------\n"); #if DISAS_GNU log_target_disas(cs, pc_start, dc->pc - pc_start, 0); #endif qemu_log("\nisize=%d osize=%d\n", dc->pc - pc_start, tcg_op_buf_count()); + qemu_log_unlock(); } #endif #endif diff --git a/target-mips/translate.c b/target-mips/translate.c index bab52cb..3172f12 100644 --- a/target-mips/translate.c +++ b/target-mips/translate.c @@ -20015,9 +20015,11 @@ done_generating: LOG_DISAS("\n"); if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c index a4625f9..229361a 100644 --- a/target-openrisc/translate.c +++ b/target-openrisc/translate.c @@ -1750,11 +1750,13 @@ void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, 0); qemu_log("\nisize=%d osize=%d\n", dc->pc - pc_start, tcg_op_buf_count()); + qemu_log_unlock(); } #endif } diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 618334a..6614094 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -7174,9 +7174,11 @@ void gen_intermediate_code(CPUPPCState *env, struct TranslationBlock *tb) int flags; flags = env->bfd_mach; flags |= ctx.le_mode << 16; + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, ctx.nip - pc_start, flags); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-s390x/translate.c b/target-s390x/translate.c index 1a07d70..02bc705 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -5432,9 +5432,11 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb) #if defined(S390X_DEBUG_DISAS) if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc.pc - pc_start, 1); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-sh4/translate.c b/target-sh4/translate.c index ca80cf7..c89a147 100644 --- a/target-sh4/translate.c +++ b/target-sh4/translate.c @@ -1927,9 +1927,11 @@ void gen_intermediate_code(CPUSH4State * env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("IN:\n"); /* , lookup_symbol(pc_start)); */ log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-sparc/translate.c b/target-sparc/translate.c index e7691e4..dc505f7 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -5672,10 +5672,12 @@ void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("--------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, last_pc + 4 - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c index 11c9732..9c734ee 100644 --- a/target-tilegx/translate.c +++ b/target-tilegx/translate.c @@ -2391,6 +2391,7 @@ void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb) TCGV_UNUSED_I64(dc->zero); if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); } if (!max_insns) { @@ -2429,7 +2430,10 @@ void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb) tb->size = dc->pc - pc_start; tb->icount = num_insns; - qemu_log_mask(CPU_LOG_TB_IN_ASM, "\n"); + if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { + qemu_log("\n"); + qemu_log_unlock(); + } } void restore_state_to_opc(CPUTLGState *env, TranslationBlock *tb, diff --git a/target-tricore/translate.c b/target-tricore/translate.c index 9a50df9..36f734a 100644 --- a/target-tricore/translate.c +++ b/target-tricore/translate.c @@ -8789,9 +8789,11 @@ void gen_intermediate_code(CPUTriCoreState *env, struct TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif } diff --git a/target-unicore32/translate.c b/target-unicore32/translate.c index 09354f9..514d460 100644 --- a/target-unicore32/translate.c +++ b/target-unicore32/translate.c @@ -2024,10 +2024,12 @@ done_generating: #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc->pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif tb->size = dc->pc - pc_start; diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c index 4c1e487..afbfa57 100644 --- a/target-xtensa/translate.c +++ b/target-xtensa/translate.c @@ -3156,10 +3156,12 @@ void gen_intermediate_code(CPUXtensaState *env, TranslationBlock *tb) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(pc_start)) { + qemu_log_lock(); qemu_log("----------------\n"); qemu_log("IN: %s\n", lookup_symbol(pc_start)); log_target_disas(cs, pc_start, dc.pc - pc_start, 0); qemu_log("\n"); + qemu_log_unlock(); } #endif tb->size = dc.pc - pc_start; diff --git a/tcg/tcg.c b/tcg/tcg.c index 2d3e498..aabf94f 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -412,10 +412,12 @@ void tcg_prologue_init(TCGContext *s) #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM)) { + qemu_log_lock(); qemu_log("PROLOGUE: [size=%zu]\n", prologue_size); log_disas(buf0, prologue_size); qemu_log("\n"); qemu_log_flush(); + qemu_log_unlock(); } #endif } @@ -2542,9 +2544,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP) && qemu_log_in_addr_range(tb->pc))) { + qemu_log_lock(); qemu_log("OP:\n"); tcg_dump_ops(s); qemu_log("\n"); + qemu_log_unlock(); } #endif @@ -2570,9 +2574,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_IND) && qemu_log_in_addr_range(tb->pc))) { + qemu_log_lock(); qemu_log("OP before indirect lowering:\n"); tcg_dump_ops(s); qemu_log("\n"); + qemu_log_unlock(); } #endif /* Replace indirect temps with direct temps. */ @@ -2590,9 +2596,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) #ifdef DEBUG_DISAS if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_OPT) && qemu_log_in_addr_range(tb->pc))) { + qemu_log_lock(); qemu_log("OP after optimization and liveness analysis:\n"); tcg_dump_ops(s); qemu_log("\n"); + qemu_log_unlock(); } #endif diff --git a/translate-all.c b/translate-all.c index e9bc90c..68f984d 100644 --- a/translate-all.c +++ b/translate-all.c @@ -1242,10 +1242,12 @@ TranslationBlock *tb_gen_code(CPUState *cpu, #ifdef DEBUG_DISAS if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM) && qemu_log_in_addr_range(tb->pc)) { + qemu_log_lock(); qemu_log("OUT: [size=%d]\n", gen_code_size); log_disas(tb->tc_ptr, gen_code_size); qemu_log("\n"); qemu_log_flush(); + qemu_log_unlock(); } #endif -- 2.7.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks 2016-09-23 15:29 ` [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks Richard Henderson @ 2016-09-24 13:12 ` Paolo Bonzini 0 siblings, 0 replies; 8+ messages in thread From: Paolo Bonzini @ 2016-09-24 13:12 UTC (permalink / raw) To: Richard Henderson, qemu-devel; +Cc: Alex Bennee On 23/09/2016 17:29, Richard Henderson wrote: > Reuse the existing locking provided by stdio to keep in_asm, cpu, > op, op_opt, op_ind, and out_asm as contiguous blocks. > > While it isn't possible to interleave e.g. in_asm or op_opt logs > because of the TB lock protecting all code generation, it is > possible to interleave cpu logs, or to interleave a cpu dump with > an out_asm dump. > > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Alex Bennee <alex.bennee@linaro.org> > Signed-off-by: Richard Henderson <rth@twiddle.net> > --- > cpu-exec.c | 2 ++ > exec.c | 2 ++ > include/qemu/log.h | 16 ++++++++++++++++ > target-alpha/translate.c | 2 ++ > target-arm/translate-a64.c | 2 ++ > target-arm/translate.c | 2 ++ > target-cris/translate.c | 2 ++ > target-i386/translate.c | 4 ++++ > target-lm32/translate.c | 2 ++ > target-m68k/translate.c | 2 ++ > target-microblaze/translate.c | 2 ++ > target-mips/translate.c | 2 ++ > target-openrisc/translate.c | 2 ++ > target-ppc/translate.c | 2 ++ > target-s390x/translate.c | 2 ++ > target-sh4/translate.c | 2 ++ > target-sparc/translate.c | 2 ++ > target-tilegx/translate.c | 6 +++++- > target-tricore/translate.c | 2 ++ > target-unicore32/translate.c | 2 ++ > target-xtensa/translate.c | 2 ++ > tcg/tcg.c | 8 ++++++++ > translate-all.c | 2 ++ > 23 files changed, 71 insertions(+), 1 deletion(-) > > diff --git a/cpu-exec.c b/cpu-exec.c > index 9f4bd0b..7423049 100644 > --- a/cpu-exec.c > +++ b/cpu-exec.c > @@ -149,6 +149,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) > #if defined(DEBUG_DISAS) > if (qemu_loglevel_mask(CPU_LOG_TB_CPU) > && qemu_log_in_addr_range(itb->pc)) { > + qemu_log_lock(); > #if defined(TARGET_I386) > log_cpu_state(cpu, CPU_DUMP_CCOP); > #elif defined(TARGET_M68K) > @@ -160,6 +161,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb) > #else > log_cpu_state(cpu, 0); > #endif > + qemu_log_unlock(); > } > #endif /* DEBUG_DISAS */ > > diff --git a/exec.c b/exec.c > index c81d5ab..f8ed786 100644 > --- a/exec.c > +++ b/exec.c > @@ -905,11 +905,13 @@ void cpu_abort(CPUState *cpu, const char *fmt, ...) > fprintf(stderr, "\n"); > cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_FPU | CPU_DUMP_CCOP); > if (qemu_log_separate()) { > + qemu_log_lock(); > qemu_log("qemu: fatal: "); > qemu_log_vprintf(fmt, ap2); > qemu_log("\n"); > log_cpu_state(cpu, CPU_DUMP_FPU | CPU_DUMP_CCOP); > qemu_log_flush(); > + qemu_log_unlock(); > qemu_log_close(); > } > va_end(ap2); > diff --git a/include/qemu/log.h b/include/qemu/log.h > index 00bf37f..aba3301 100644 > --- a/include/qemu/log.h > +++ b/include/qemu/log.h > @@ -51,6 +51,22 @@ static inline bool qemu_loglevel_mask(int mask) > return (qemu_loglevel & mask) != 0; > } > > +/* Lock output for a series of related logs. Since this is not needed > + * for a single qemu_log / qemu_log_mask / qemu_log_mask_and_addr, we > + * assume that qemu_loglevel_mask has already been tested, and that > + * qemu_loglevel is never set when qemu_logfile is unset. > + */ > + > +static inline void qemu_log_lock(void) > +{ > + flockfile(qemu_logfile); > +} > + > +static inline void qemu_log_unlock(void) > +{ > + funlockfile(qemu_logfile); > +} > + > /* Logging functions: */ > > /* main logging function > diff --git a/target-alpha/translate.c b/target-alpha/translate.c > index c27c7b9..af717ca 100644 > --- a/target-alpha/translate.c > +++ b/target-alpha/translate.c > @@ -3000,9 +3000,11 @@ void gen_intermediate_code(CPUAlphaState *env, struct TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, ctx.pc - pc_start, 1); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c > index ddf52f5..60e8cf1 100644 > --- a/target-arm/translate-a64.c > +++ b/target-arm/translate-a64.c > @@ -11356,11 +11356,13 @@ done_generating: > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && > qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, > 4 | (bswap_code(dc->sctlr_b) ? 2 : 0)); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > tb->size = dc->pc - pc_start; > diff --git a/target-arm/translate.c b/target-arm/translate.c > index 693d4bc..f550b00 100644 > --- a/target-arm/translate.c > +++ b/target-arm/translate.c > @@ -11998,11 +11998,13 @@ done_generating: > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && > qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, > dc->thumb | (dc->sctlr_b << 1)); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > tb->size = dc->pc - pc_start; > diff --git a/target-cris/translate.c b/target-cris/translate.c > index 9de26af..81147bb 100644 > --- a/target-cris/translate.c > +++ b/target-cris/translate.c > @@ -3290,12 +3290,14 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) > #if !DISAS_CRIS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("--------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, > env->pregs[PR_VR]); > qemu_log("\nisize=%d osize=%d\n", > dc->pc - pc_start, tcg_op_buf_count()); > + qemu_log_unlock(); > } > #endif > #endif > diff --git a/target-i386/translate.c b/target-i386/translate.c > index 9447557..2f60e9c 100644 > --- a/target-i386/translate.c > +++ b/target-i386/translate.c > @@ -2391,11 +2391,13 @@ static void gen_unknown_opcode(CPUX86State *env, DisasContext *s) > > if (qemu_loglevel_mask(LOG_UNIMP)) { > target_ulong pc = s->pc_start, end = s->pc; > + qemu_log_lock(); > qemu_log("ILLOPC: " TARGET_FMT_lx ":", pc); > for (; pc < end; ++pc) { > qemu_log(" %02x", cpu_ldub_code(env, pc)); > } > qemu_log("\n"); > + qemu_log_unlock(); > } > } > > @@ -8362,6 +8364,7 @@ done_generating: > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > int disas_flags; > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > #ifdef TARGET_X86_64 > @@ -8372,6 +8375,7 @@ done_generating: > disas_flags = !dc->code32; > log_target_disas(cs, pc_start, pc_ptr - pc_start, disas_flags); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > > diff --git a/target-lm32/translate.c b/target-lm32/translate.c > index 2d8caeb..3d2cecb 100644 > --- a/target-lm32/translate.c > +++ b/target-lm32/translate.c > @@ -1149,10 +1149,12 @@ void gen_intermediate_code(CPULM32State *env, struct TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("\n"); > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > qemu_log("\nisize=%d osize=%d\n", > dc->pc - pc_start, tcg_op_buf_count()); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-m68k/translate.c b/target-m68k/translate.c > index ecd5e5c..43b9ea1 100644 > --- a/target-m68k/translate.c > +++ b/target-m68k/translate.c > @@ -3070,10 +3070,12 @@ void gen_intermediate_code(CPUM68KState *env, TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > tb->size = dc->pc - pc_start; > diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c > index 5a4a8b9..5274191 100644 > --- a/target-microblaze/translate.c > +++ b/target-microblaze/translate.c > @@ -1813,12 +1813,14 @@ void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb) > #if !SIM_COMPAT > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("--------------\n"); > #if DISAS_GNU > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > #endif > qemu_log("\nisize=%d osize=%d\n", > dc->pc - pc_start, tcg_op_buf_count()); > + qemu_log_unlock(); > } > #endif > #endif > diff --git a/target-mips/translate.c b/target-mips/translate.c > index bab52cb..3172f12 100644 > --- a/target-mips/translate.c > +++ b/target-mips/translate.c > @@ -20015,9 +20015,11 @@ done_generating: > LOG_DISAS("\n"); > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c > index a4625f9..229361a 100644 > --- a/target-openrisc/translate.c > +++ b/target-openrisc/translate.c > @@ -1750,11 +1750,13 @@ void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > qemu_log("\nisize=%d osize=%d\n", > dc->pc - pc_start, tcg_op_buf_count()); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-ppc/translate.c b/target-ppc/translate.c > index 618334a..6614094 100644 > --- a/target-ppc/translate.c > +++ b/target-ppc/translate.c > @@ -7174,9 +7174,11 @@ void gen_intermediate_code(CPUPPCState *env, struct TranslationBlock *tb) > int flags; > flags = env->bfd_mach; > flags |= ctx.le_mode << 16; > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, ctx.nip - pc_start, flags); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-s390x/translate.c b/target-s390x/translate.c > index 1a07d70..02bc705 100644 > --- a/target-s390x/translate.c > +++ b/target-s390x/translate.c > @@ -5432,9 +5432,11 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb) > #if defined(S390X_DEBUG_DISAS) > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc.pc - pc_start, 1); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-sh4/translate.c b/target-sh4/translate.c > index ca80cf7..c89a147 100644 > --- a/target-sh4/translate.c > +++ b/target-sh4/translate.c > @@ -1927,9 +1927,11 @@ void gen_intermediate_code(CPUSH4State * env, struct TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("IN:\n"); /* , lookup_symbol(pc_start)); */ > log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-sparc/translate.c b/target-sparc/translate.c > index e7691e4..dc505f7 100644 > --- a/target-sparc/translate.c > +++ b/target-sparc/translate.c > @@ -5672,10 +5672,12 @@ void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("--------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, last_pc + 4 - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c > index 11c9732..9c734ee 100644 > --- a/target-tilegx/translate.c > +++ b/target-tilegx/translate.c > @@ -2391,6 +2391,7 @@ void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb) > TCGV_UNUSED_I64(dc->zero); > > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > } > if (!max_insns) { > @@ -2429,7 +2430,10 @@ void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb) > tb->size = dc->pc - pc_start; > tb->icount = num_insns; > > - qemu_log_mask(CPU_LOG_TB_IN_ASM, "\n"); > + if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { > + qemu_log("\n"); > + qemu_log_unlock(); > + } > } > > void restore_state_to_opc(CPUTLGState *env, TranslationBlock *tb, > diff --git a/target-tricore/translate.c b/target-tricore/translate.c > index 9a50df9..36f734a 100644 > --- a/target-tricore/translate.c > +++ b/target-tricore/translate.c > @@ -8789,9 +8789,11 @@ void gen_intermediate_code(CPUTriCoreState *env, struct TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, ctx.pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > } > diff --git a/target-unicore32/translate.c b/target-unicore32/translate.c > index 09354f9..514d460 100644 > --- a/target-unicore32/translate.c > +++ b/target-unicore32/translate.c > @@ -2024,10 +2024,12 @@ done_generating: > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > tb->size = dc->pc - pc_start; > diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c > index 4c1e487..afbfa57 100644 > --- a/target-xtensa/translate.c > +++ b/target-xtensa/translate.c > @@ -3156,10 +3156,12 @@ void gen_intermediate_code(CPUXtensaState *env, TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log_lock(); > qemu_log("----------------\n"); > qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc.pc - pc_start, 0); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > tb->size = dc.pc - pc_start; > diff --git a/tcg/tcg.c b/tcg/tcg.c > index 2d3e498..aabf94f 100644 > --- a/tcg/tcg.c > +++ b/tcg/tcg.c > @@ -412,10 +412,12 @@ void tcg_prologue_init(TCGContext *s) > > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM)) { > + qemu_log_lock(); > qemu_log("PROLOGUE: [size=%zu]\n", prologue_size); > log_disas(buf0, prologue_size); > qemu_log("\n"); > qemu_log_flush(); > + qemu_log_unlock(); > } > #endif > } > @@ -2542,9 +2544,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP) > && qemu_log_in_addr_range(tb->pc))) { > + qemu_log_lock(); > qemu_log("OP:\n"); > tcg_dump_ops(s); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > > @@ -2570,9 +2574,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_IND) > && qemu_log_in_addr_range(tb->pc))) { > + qemu_log_lock(); > qemu_log("OP before indirect lowering:\n"); > tcg_dump_ops(s); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > /* Replace indirect temps with direct temps. */ > @@ -2590,9 +2596,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) > #ifdef DEBUG_DISAS > if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_OPT) > && qemu_log_in_addr_range(tb->pc))) { > + qemu_log_lock(); > qemu_log("OP after optimization and liveness analysis:\n"); > tcg_dump_ops(s); > qemu_log("\n"); > + qemu_log_unlock(); > } > #endif > > diff --git a/translate-all.c b/translate-all.c > index e9bc90c..68f984d 100644 > --- a/translate-all.c > +++ b/translate-all.c > @@ -1242,10 +1242,12 @@ TranslationBlock *tb_gen_code(CPUState *cpu, > #ifdef DEBUG_DISAS > if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM) && > qemu_log_in_addr_range(tb->pc)) { > + qemu_log_lock(); > qemu_log("OUT: [size=%d]\n", gen_code_size); > log_disas(tb->tc_ptr, gen_code_size); > qemu_log("\n"); > qemu_log_flush(); > + qemu_log_unlock(); > } > #endif > > Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson ` (2 preceding siblings ...) 2016-09-23 15:29 ` [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks Richard Henderson @ 2016-09-23 16:45 ` Edgar E. Iglesias 2016-09-26 8:32 ` Alex Bennée 4 siblings, 0 replies; 8+ messages in thread From: Edgar E. Iglesias @ 2016-09-23 16:45 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel On Fri, Sep 23, 2016 at 08:29:08AM -0700, Richard Henderson wrote: > Dumping cpu state is what -d cpu is for. Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> > > Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> > Signed-off-by: Richard Henderson <rth@twiddle.net> > --- > target-cris/translate.c | 25 ++----------------------- > 1 file changed, 2 insertions(+), 23 deletions(-) > > diff --git a/target-cris/translate.c b/target-cris/translate.c > index f4a8d7d..9de26af 100644 > --- a/target-cris/translate.c > +++ b/target-cris/translate.c > @@ -3135,29 +3135,6 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) > > dc->cpustate_changed = 0; > > - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { > - qemu_log( > - "pc=%x %x flg=%" PRIx64 " bt=%x ds=%u ccs=%x\n" > - "pid=%x usp=%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n", > - dc->pc, dc->ppc, > - (uint64_t)tb->flags, > - env->btarget, (unsigned)tb->flags & 7, > - env->pregs[PR_CCS], > - env->pregs[PR_PID], env->pregs[PR_USP], > - env->regs[0], env->regs[1], env->regs[2], env->regs[3], > - env->regs[4], env->regs[5], env->regs[6], env->regs[7], > - env->regs[8], env->regs[9], > - env->regs[10], env->regs[11], > - env->regs[12], env->regs[13], > - env->regs[14], env->regs[15]); > - qemu_log("--------------\n"); > - qemu_log("IN: %s\n", lookup_symbol(pc_start)); > - } > - > next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > @@ -3313,6 +3290,8 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) > #if !DISAS_CRIS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log("--------------\n"); > + qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, > env->pregs[PR_VR]); > qemu_log("\nisize=%d osize=%d\n", > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson ` (3 preceding siblings ...) 2016-09-23 16:45 ` [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Edgar E. Iglesias @ 2016-09-26 8:32 ` Alex Bennée 4 siblings, 0 replies; 8+ messages in thread From: Alex Bennée @ 2016-09-26 8:32 UTC (permalink / raw) To: Richard Henderson; +Cc: qemu-devel, Edgar E . Iglesias Richard Henderson <rth@twiddle.net> writes: > Dumping cpu state is what -d cpu is for. > > Cc: Edgar E. Iglesias <edgar.iglesias@gmail.com> > Signed-off-by: Richard Henderson <rth@twiddle.net> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > target-cris/translate.c | 25 ++----------------------- > 1 file changed, 2 insertions(+), 23 deletions(-) > > diff --git a/target-cris/translate.c b/target-cris/translate.c > index f4a8d7d..9de26af 100644 > --- a/target-cris/translate.c > +++ b/target-cris/translate.c > @@ -3135,29 +3135,6 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) > > dc->cpustate_changed = 0; > > - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) { > - qemu_log( > - "pc=%x %x flg=%" PRIx64 " bt=%x ds=%u ccs=%x\n" > - "pid=%x usp=%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n" > - "%x.%x.%x.%x\n", > - dc->pc, dc->ppc, > - (uint64_t)tb->flags, > - env->btarget, (unsigned)tb->flags & 7, > - env->pregs[PR_CCS], > - env->pregs[PR_PID], env->pregs[PR_USP], > - env->regs[0], env->regs[1], env->regs[2], env->regs[3], > - env->regs[4], env->regs[5], env->regs[6], env->regs[7], > - env->regs[8], env->regs[9], > - env->regs[10], env->regs[11], > - env->regs[12], env->regs[13], > - env->regs[14], env->regs[15]); > - qemu_log("--------------\n"); > - qemu_log("IN: %s\n", lookup_symbol(pc_start)); > - } > - > next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > num_insns = 0; > max_insns = tb->cflags & CF_COUNT_MASK; > @@ -3313,6 +3290,8 @@ void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb) > #if !DISAS_CRIS > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(pc_start)) { > + qemu_log("--------------\n"); > + qemu_log("IN: %s\n", lookup_symbol(pc_start)); > log_target_disas(cs, pc_start, dc->pc - pc_start, > env->pregs[PR_VR]); > qemu_log("\nisize=%d osize=%d\n", -- Alex Bennée ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-09-26 8:33 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-09-23 15:29 [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 2/4] target-microblaze: " Richard Henderson 2016-09-23 16:45 ` Edgar E. Iglesias 2016-09-23 15:29 ` [Qemu-devel] [PATCH 3/4] target-openrisc: " Richard Henderson 2016-09-23 15:29 ` [Qemu-devel] [PATCH 4/4] log: Add locking to large logging blocks Richard Henderson 2016-09-24 13:12 ` Paolo Bonzini 2016-09-23 16:45 ` [Qemu-devel] [PATCH 1/4] target-cris: Do not dump cpu state with -d in_asm Edgar E. Iglesias 2016-09-26 8:32 ` Alex Bennée
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).