root / qemu-log.h @ bfb811ad
History | View | Annotate | Download (2.1 kB)
1 |
#ifndef QEMU_LOG_H
|
---|---|
2 |
#define QEMU_LOG_H
|
3 |
|
4 |
/* The deprecated global variables: */
|
5 |
extern FILE *logfile;
|
6 |
extern int loglevel; |
7 |
|
8 |
|
9 |
/*
|
10 |
* The new API:
|
11 |
*
|
12 |
*/
|
13 |
|
14 |
/* Log settings checking macros: */
|
15 |
|
16 |
/* Returns true if qemu_log() will really write somewhere
|
17 |
*/
|
18 |
#define qemu_log_enabled() (logfile != NULL) |
19 |
|
20 |
/* Returns true if a bit is set in the current loglevel mask
|
21 |
*/
|
22 |
#define qemu_loglevel_mask(b) ((loglevel & (b)) != 0) |
23 |
|
24 |
|
25 |
/* Logging functions: */
|
26 |
|
27 |
/* main logging function
|
28 |
*/
|
29 |
#define qemu_log(...) do { \ |
30 |
if (logfile) \
|
31 |
fprintf(logfile, ## __VA_ARGS__); \ |
32 |
} while (0) |
33 |
|
34 |
/* vfprintf-like logging function
|
35 |
*/
|
36 |
#define qemu_log_vprintf(fmt, va) do { \ |
37 |
if (logfile) \
|
38 |
vfprintf(logfile, fmt, va); \ |
39 |
} while (0) |
40 |
|
41 |
/* log only if a bit is set on the current loglevel mask
|
42 |
*/
|
43 |
#define qemu_log_mask(b, ...) do { \ |
44 |
if (loglevel & (b)) \
|
45 |
fprintf(logfile, ## __VA_ARGS__); \ |
46 |
} while (0) |
47 |
|
48 |
|
49 |
|
50 |
|
51 |
/* Special cases: */
|
52 |
|
53 |
/* cpu_dump_state() logging functions: */
|
54 |
#define log_cpu_state(env, f) cpu_dump_state((env), logfile, fprintf, (f));
|
55 |
#define log_cpu_state_mask(b, env, f) do { \ |
56 |
if (loglevel & (b)) log_cpu_state((env), (f)); \
|
57 |
} while (0) |
58 |
|
59 |
/* disas() and target_disas() to logfile: */
|
60 |
#define log_target_disas(start, len, flags) \
|
61 |
target_disas(logfile, (start), (len), (flags)) |
62 |
#define log_disas(start, len) \
|
63 |
disas(logfile, (start), (len)) |
64 |
|
65 |
/* page_dump() output to the log file: */
|
66 |
#define log_page_dump() page_dump(logfile)
|
67 |
|
68 |
|
69 |
|
70 |
/* Maintenance: */
|
71 |
|
72 |
/* fflush() the log file */
|
73 |
#define qemu_log_flush() fflush(logfile)
|
74 |
|
75 |
/* Close the log file */
|
76 |
#define qemu_log_close() do { \ |
77 |
fclose(logfile); \ |
78 |
logfile = NULL; \
|
79 |
} while (0) |
80 |
|
81 |
/* Set up a new log file */
|
82 |
#define qemu_log_set_file(f) do { \ |
83 |
logfile = (f); \ |
84 |
} while (0) |
85 |
|
86 |
/* Set up a new log file, only if none is set */
|
87 |
#define qemu_log_try_set_file(f) do { \ |
88 |
if (!logfile) \
|
89 |
logfile = (f); \ |
90 |
} while (0) |
91 |
|
92 |
|
93 |
#endif
|