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; | ||||
|     uint8_t *tb_ptr = itb->tc_ptr; | ||||
| 
 | ||||
|     qemu_log_mask(CPU_LOG_EXEC, "Trace %p [" TARGET_FMT_lx "] %s\n", | ||||
|                   itb->tc_ptr, itb->pc, lookup_symbol(itb->pc)); | ||||
|     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) | ||||
|     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); | ||||
|         TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK); | ||||
|         qemu_log_mask(CPU_LOG_EXEC, | ||||
|                       "Stopped execution of TB chain before %p [" | ||||
|                       TARGET_FMT_lx "] %s\n", | ||||
|                       itb->tc_ptr, itb->pc, lookup_symbol(itb->pc)); | ||||
|         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)); | ||||
|         if (cc->synchronize_from_tb) { | ||||
|             cc->synchronize_from_tb(cpu, tb); | ||||
|         } else { | ||||
|  | ||||
| @ -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 | ||||
|                       "] index %d -> %p [" TARGET_FMT_lx "]\n", | ||||
|                       tb->tc_ptr, tb->pc, n, tb_next->tc_ptr, tb_next->pc); | ||||
|         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); | ||||
|         /* patch the native jump address */ | ||||
|         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) | ||||
| 
 | ||||
| /* 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 */ | ||||
|  | ||||
| @ -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"); | ||||
|  | ||||
| @ -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"); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Alex Bennée
						Alex Bennée