Commit d977e1c2 authored by Alex Bennée's avatar Alex Bennée Committed by Paolo Bonzini
Browse files

qemu-log: dfilter-ise exec, out_asm, op and opt_op



This ensures the code generation debug code will honour -dfilter if set.
For the "exec" tracing I've added a new inline macro for efficiency's
sake.

Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: default avatarAurelien Jarno <aurelien@aureL32.net>
Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
Message-Id: <1458052224-9316-8-git-send-email-alex.bennee@linaro.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 3514552e
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -139,7 +139,8 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
    uintptr_t next_tb;
    uint8_t *tb_ptr = itb->tc_ptr;

    qemu_log_mask(CPU_LOG_EXEC, "Trace %p [" TARGET_FMT_lx "] %s\n",
    qemu_log_mask_and_addr(CPU_LOG_EXEC, itb->pc,
                           "Trace %p [" TARGET_FMT_lx "] %s\n",
                           itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));

#if defined(DEBUG_DISAS)
@@ -171,7 +172,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
         */
        CPUClass *cc = CPU_GET_CLASS(cpu);
        TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK);
        qemu_log_mask(CPU_LOG_EXEC,
        qemu_log_mask_and_addr(CPU_LOG_EXEC, itb->pc,
                               "Stopped execution of TB chain before %p ["
                               TARGET_FMT_lx "] %s\n",
                               itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
+5 −3
Original line number Diff line number Diff line
@@ -379,9 +379,11 @@ static inline void tb_add_jump(TranslationBlock *tb, int n,
{
    /* NOTE: this test is only needed for thread safety */
    if (!tb->jmp_next[n]) {
        qemu_log_mask(CPU_LOG_EXEC, "Linking TBs %p [" TARGET_FMT_lx
        qemu_log_mask_and_addr(CPU_LOG_EXEC, tb->pc,
                               "Linking TBs %p [" TARGET_FMT_lx
                               "] index %d -> %p [" TARGET_FMT_lx "]\n",
                      tb->tc_ptr, tb->pc, n, tb_next->tc_ptr, tb_next->pc);
                               tb->tc_ptr, tb->pc, n,
                               tb_next->tc_ptr, tb_next->pc);
        /* patch the native jump address */
        tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr);

+15 −0
Original line number Diff line number Diff line
@@ -78,6 +78,21 @@ qemu_log_vprintf(const char *fmt, va_list va)
        }                                               \
    } while (0)

/* log only if a bit is set on the current loglevel mask
 * and we are in the address range we care about:
 * @mask: bit to check in the mask
 * @addr: address to check in dfilter
 * @fmt: printf-style format string
 * @args: optional arguments for format string
 */
#define qemu_log_mask_and_addr(MASK, ADDR, FMT, ...)    \
    do {                                                \
        if (unlikely(qemu_loglevel_mask(MASK)) &&       \
                     qemu_log_in_addr_range(ADDR)) {    \
            qemu_log(FMT, ## __VA_ARGS__);              \
        }                                               \
    } while (0)

/* Maintenance: */

/* fflush() the log file */
+4 −2
Original line number Diff line number Diff line
@@ -2351,7 +2351,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
#endif

#ifdef DEBUG_DISAS
    if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP))) {
    if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP)
                 && qemu_log_in_addr_range(tb->pc))) {
        qemu_log("OP:\n");
        tcg_dump_ops(s);
        qemu_log("\n");
@@ -2378,7 +2379,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
#endif

#ifdef DEBUG_DISAS
    if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_OPT))) {
    if (unlikely(qemu_loglevel_mask(CPU_LOG_TB_OP_OPT)
                 && qemu_log_in_addr_range(tb->pc))) {
        qemu_log("OP after optimization and liveness analysis:\n");
        tcg_dump_ops(s);
        qemu_log("\n");
+2 −1
Original line number Diff line number Diff line
@@ -1137,7 +1137,8 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
#endif

#ifdef DEBUG_DISAS
    if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM)) {
    if (qemu_loglevel_mask(CPU_LOG_TB_OUT_ASM) &&
        qemu_log_in_addr_range(tb->pc)) {
        qemu_log("OUT: [size=%d]\n", gen_code_size);
        log_disas(tb->tc_ptr, gen_code_size);
        qemu_log("\n");