Home | History | Annotate | Download | only in qemu
      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
     94