| #ifndef QEMU_LOG_H |
| #define QEMU_LOG_H |
| |
| /* The deprecated global variables: */ |
| extern FILE *logfile; |
| extern int loglevel; |
| |
| |
| /* |
| * The new API: |
| * |
| */ |
| |
| /* Log settings checking macros: */ |
| |
| /* Returns true if qemu_log() will really write somewhere |
| */ |
| #define qemu_log_enabled() (logfile != NULL) |
| |
| /* Returns true if a bit is set in the current loglevel mask |
| */ |
| #define qemu_loglevel_mask(b) ((loglevel & (b)) != 0) |
| |
| |
| /* Logging functions: */ |
| |
| /* main logging function |
| */ |
| #define qemu_log(...) do { \ |
| if (logfile) \ |
| fprintf(logfile, ## __VA_ARGS__); \ |
| } while (0) |
| |
| /* vfprintf-like logging function |
| */ |
| #define qemu_log_vprintf(fmt, va) do { \ |
| if (logfile) \ |
| vfprintf(logfile, fmt, va); \ |
| } while (0) |
| |
| /* log only if a bit is set on the current loglevel mask |
| */ |
| #define qemu_log_mask(b, ...) do { \ |
| if (loglevel & (b)) \ |
| fprintf(logfile, ## __VA_ARGS__); \ |
| } while (0) |
| |
| |
| |
| |
| /* Special cases: */ |
| |
| /* cpu_dump_state() logging functions: */ |
| #define log_cpu_state(env, f) cpu_dump_state((env), logfile, fprintf, (f)); |
| #define log_cpu_state_mask(b, env, f) do { \ |
| if (loglevel & (b)) log_cpu_state((env), (f)); \ |
| } while (0) |
| |
| /* disas() and target_disas() to logfile: */ |
| #define log_target_disas(start, len, flags) \ |
| target_disas(logfile, (start), (len), (flags)) |
| #define log_disas(start, len) \ |
| disas(logfile, (start), (len)) |
| |
| /* page_dump() output to the log file: */ |
| #define log_page_dump() page_dump(logfile) |
| |
| |
| |
| /* Maintenance: */ |
| |
| /* fflush() the log file */ |
| #define qemu_log_flush() fflush(logfile) |
| |
| /* Close the log file */ |
| #define qemu_log_close() do { \ |
| fclose(logfile); \ |
| logfile = NULL; \ |
| } while (0) |
| |
| /* Set up a new log file */ |
| #define qemu_log_set_file(f) do { \ |
| logfile = (f); \ |
| } while (0) |
| |
| /* Set up a new log file, only if none is set */ |
| #define qemu_log_try_set_file(f) do { \ |
| if (!logfile) \ |
| logfile = (f); \ |
| } while (0) |
| |
| |
| #endif |