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: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Aurelien Jarno <aurelien@aureL32.net> Reviewed-by: Richard Henderson <rth@twiddle.net> Message-Id: <1458052224-9316-8-git-send-email-alex.bennee@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3514552e04
commit
d977e1c2db
13
cpu-exec.c
13
cpu-exec.c
@ -139,8 +139,9 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
|
|||||||
uintptr_t next_tb;
|
uintptr_t next_tb;
|
||||||
uint8_t *tb_ptr = itb->tc_ptr;
|
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,
|
||||||
itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
|
"Trace %p [" TARGET_FMT_lx "] %s\n",
|
||||||
|
itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
|
||||||
|
|
||||||
#if defined(DEBUG_DISAS)
|
#if defined(DEBUG_DISAS)
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_CPU)) {
|
||||||
@ -171,10 +172,10 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
|
|||||||
*/
|
*/
|
||||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
CPUClass *cc = CPU_GET_CLASS(cpu);
|
||||||
TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK);
|
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 ["
|
"Stopped execution of TB chain before %p ["
|
||||||
TARGET_FMT_lx "] %s\n",
|
TARGET_FMT_lx "] %s\n",
|
||||||
itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
|
itb->tc_ptr, itb->pc, lookup_symbol(itb->pc));
|
||||||
if (cc->synchronize_from_tb) {
|
if (cc->synchronize_from_tb) {
|
||||||
cc->synchronize_from_tb(cpu, tb);
|
cc->synchronize_from_tb(cpu, tb);
|
||||||
} else {
|
} else {
|
||||||
|
@ -379,9 +379,11 @@ static inline void tb_add_jump(TranslationBlock *tb, int n,
|
|||||||
{
|
{
|
||||||
/* NOTE: this test is only needed for thread safety */
|
/* NOTE: this test is only needed for thread safety */
|
||||||
if (!tb->jmp_next[n]) {
|
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,
|
||||||
"] index %d -> %p [" TARGET_FMT_lx "]\n",
|
"Linking TBs %p [" TARGET_FMT_lx
|
||||||
tb->tc_ptr, tb->pc, n, tb_next->tc_ptr, tb_next->pc);
|
"] index %d -> %p [" TARGET_FMT_lx "]\n",
|
||||||
|
tb->tc_ptr, tb->pc, n,
|
||||||
|
tb_next->tc_ptr, tb_next->pc);
|
||||||
/* patch the native jump address */
|
/* patch the native jump address */
|
||||||
tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr);
|
tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr);
|
||||||
|
|
||||||
|
@ -78,6 +78,21 @@ qemu_log_vprintf(const char *fmt, va_list va)
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} 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: */
|
/* Maintenance: */
|
||||||
|
|
||||||
/* fflush() the log file */
|
/* fflush() the log file */
|
||||||
|
@ -2351,7 +2351,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#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");
|
qemu_log("OP:\n");
|
||||||
tcg_dump_ops(s);
|
tcg_dump_ops(s);
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
@ -2378,7 +2379,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#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");
|
qemu_log("OP after optimization and liveness analysis:\n");
|
||||||
tcg_dump_ops(s);
|
tcg_dump_ops(s);
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
|
@ -1137,7 +1137,8 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#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);
|
qemu_log("OUT: [size=%d]\n", gen_code_size);
|
||||||
log_disas(tb->tc_ptr, gen_code_size);
|
log_disas(tb->tc_ptr, gen_code_size);
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user