log.h (1969B)
1#ifndef QEMU_EXEC_LOG_H 2#define QEMU_EXEC_LOG_H 3 4#include "qemu/log.h" 5#include "hw/core/cpu.h" 6#include "disas/disas.h" 7 8/* cpu_dump_state() logging functions: */ 9/** 10 * log_cpu_state: 11 * @cpu: The CPU whose state is to be logged. 12 * @flags: Flags what to log. 13 * 14 * Logs the output of cpu_dump_state(). 15 */ 16static inline void log_cpu_state(CPUState *cpu, int flags) 17{ 18 QemuLogFile *logfile; 19 20 if (qemu_log_enabled()) { 21 rcu_read_lock(); 22 logfile = qatomic_rcu_read(&qemu_logfile); 23 if (logfile) { 24 cpu_dump_state(cpu, logfile->fd, flags); 25 } 26 rcu_read_unlock(); 27 } 28} 29 30/** 31 * log_cpu_state_mask: 32 * @mask: Mask when to log. 33 * @cpu: The CPU whose state is to be logged. 34 * @flags: Flags what to log. 35 * 36 * Logs the output of cpu_dump_state() if loglevel includes @mask. 37 */ 38static inline void log_cpu_state_mask(int mask, CPUState *cpu, int flags) 39{ 40 if (qemu_loglevel & mask) { 41 log_cpu_state(cpu, flags); 42 } 43} 44 45#ifdef NEED_CPU_H 46/* disas() and target_disas() to qemu_logfile: */ 47static inline void log_target_disas(CPUState *cpu, target_ulong start, 48 target_ulong len) 49{ 50 QemuLogFile *logfile; 51 rcu_read_lock(); 52 logfile = qatomic_rcu_read(&qemu_logfile); 53 if (logfile) { 54 target_disas(logfile->fd, cpu, start, len); 55 } 56 rcu_read_unlock(); 57} 58 59static inline void log_disas(const void *code, unsigned long size) 60{ 61 QemuLogFile *logfile; 62 rcu_read_lock(); 63 logfile = qatomic_rcu_read(&qemu_logfile); 64 if (logfile) { 65 disas(logfile->fd, code, size); 66 } 67 rcu_read_unlock(); 68} 69 70#if defined(CONFIG_USER_ONLY) 71/* page_dump() output to the log file: */ 72static inline void log_page_dump(const char *operation) 73{ 74 FILE *logfile = qemu_log_lock(); 75 if (logfile) { 76 qemu_log("page layout changed following %s\n", operation); 77 page_dump(logfile); 78 } 79 qemu_log_unlock(logfile); 80} 81#endif 82#endif 83 84#endif