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 | #ifndef VBOX
|
---|
19 | #define qemu_log_enabled() (logfile != NULL)
|
---|
20 | #else
|
---|
21 | # define qemu_log_enabled() LogIsEnabled()
|
---|
22 | #endif
|
---|
23 |
|
---|
24 | /* Returns true if a bit is set in the current loglevel mask
|
---|
25 | */
|
---|
26 | #define qemu_loglevel_mask(b) ((loglevel & (b)) != 0)
|
---|
27 |
|
---|
28 |
|
---|
29 |
|
---|
30 | /* Logging functions: */
|
---|
31 |
|
---|
32 | /* main logging function
|
---|
33 | */
|
---|
34 | #ifndef VBOX
|
---|
35 | #define qemu_log(...) do { \
|
---|
36 | if (logfile) \
|
---|
37 | fprintf(logfile, ## __VA_ARGS__); \
|
---|
38 | } while (0)
|
---|
39 | #else
|
---|
40 | # define qemu_log(...) Log((__VA_ARGS__))
|
---|
41 | #endif
|
---|
42 |
|
---|
43 | /* vfprintf-like logging function
|
---|
44 | */
|
---|
45 | #ifndef VBOX
|
---|
46 | #define qemu_log_vprintf(fmt, va) do { \
|
---|
47 | if (logfile) \
|
---|
48 | vfprintf(logfile, fmt, va); \
|
---|
49 | } while (0)
|
---|
50 | #else
|
---|
51 | # define qemu_log_vprintf(fmt, va) do { \
|
---|
52 | if (LogIsEnabled()) \
|
---|
53 | RTLogLoggerExV(LOG_INSTANCE, RTLOGGRPFLAGS_LEVEL_1, LOG_GROUP, fmt, va); \
|
---|
54 | } while (0)
|
---|
55 | #endif
|
---|
56 |
|
---|
57 | /* log only if a bit is set on the current loglevel mask
|
---|
58 | */
|
---|
59 | #ifndef VBOX
|
---|
60 | #define qemu_log_mask(b, ...) do { \
|
---|
61 | if (loglevel & (b)) \
|
---|
62 | fprintf(logfile, ## __VA_ARGS__); \
|
---|
63 | } while (0)
|
---|
64 | #else
|
---|
65 | # define qemu_log_mask(b, ...) do { \
|
---|
66 | if (loglevel & (b)) \
|
---|
67 | Log((__VA_ARGS__)); \
|
---|
68 | } while (0)
|
---|
69 | #endif
|
---|
70 |
|
---|
71 |
|
---|
72 |
|
---|
73 |
|
---|
74 | /* Special cases: */
|
---|
75 |
|
---|
76 | /* cpu_dump_state() logging functions: */
|
---|
77 | #ifndef VBOX
|
---|
78 | #define log_cpu_state(env, f) cpu_dump_state((env), logfile, fprintf, (f));
|
---|
79 | #else
|
---|
80 | #define log_cpu_state(env, f) cpu_dump_state((env), NULL, NULL, (f));
|
---|
81 | #endif
|
---|
82 | #define log_cpu_state_mask(b, env, f) do { \
|
---|
83 | if (loglevel & (b)) log_cpu_state((env), (f)); \
|
---|
84 | } while (0)
|
---|
85 |
|
---|
86 | /* disas() and target_disas() to logfile: */
|
---|
87 | #define log_target_disas(start, len, flags) \
|
---|
88 | target_disas(logfile, (start), (len), (flags))
|
---|
89 | #define log_disas(start, len) \
|
---|
90 | disas(logfile, (start), (len))
|
---|
91 |
|
---|
92 | /* page_dump() output to the log file: */
|
---|
93 | #define log_page_dump() page_dump(logfile)
|
---|
94 |
|
---|
95 |
|
---|
96 |
|
---|
97 | /* Maintenance: */
|
---|
98 |
|
---|
99 | /* fflush() the log file */
|
---|
100 | #ifndef VBOX
|
---|
101 | #define qemu_log_flush() fflush(logfile)
|
---|
102 | #else
|
---|
103 | # define qemu_log_flush() RTLogFlush(LOG_INSTANCE)
|
---|
104 | #endif
|
---|
105 |
|
---|
106 | /* Close the log file */
|
---|
107 | #ifndef VBOX
|
---|
108 | #define qemu_log_close() do { \
|
---|
109 | fclose(logfile); \
|
---|
110 | logfile = NULL; \
|
---|
111 | } while (0)
|
---|
112 | #else
|
---|
113 | # define qemu_log_close() do { } while (0)
|
---|
114 | #endif
|
---|
115 |
|
---|
116 | /* Set up a new log file */
|
---|
117 | #ifndef VBOX
|
---|
118 | #define qemu_log_set_file(f) do { \
|
---|
119 | logfile = (f); \
|
---|
120 | } while (0)
|
---|
121 | #else
|
---|
122 | # define qemu_log_set_file(f) do { } while (0)
|
---|
123 | #endif
|
---|
124 |
|
---|
125 | /* Set up a new log file, only if none is set */
|
---|
126 | #ifndef VBOX
|
---|
127 | #define qemu_log_try_set_file(f) do { \
|
---|
128 | if (!logfile) \
|
---|
129 | logfile = (f); \
|
---|
130 | } while (0)
|
---|
131 | #else
|
---|
132 | #define qemu_log_try_set_file(f) do { } while (0)
|
---|
133 | #endif
|
---|
134 |
|
---|
135 |
|
---|
136 | #endif
|
---|