Refactor some hax related codes.
[sdk/emulator/qemu.git] / monitor.c
1 /*
2  * QEMU monitor
3  *
4  * Copyright (c) 2003-2004 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #include <dirent.h>
25 #include "hw/hw.h"
26 #include "monitor/qdev.h"
27 #include "hw/usb.h"
28 #include "hw/pcmcia.h"
29 #include "hw/i386/pc.h"
30 #include "hw/pci/pci.h"
31 #include "sysemu/watchdog.h"
32 #include "hw/loader.h"
33 #include "exec/gdbstub.h"
34 #include "net/net.h"
35 #include "net/slirp.h"
36 #include "sysemu/char.h"
37 #include "ui/qemu-spice.h"
38 #include "sysemu/sysemu.h"
39 #include "monitor/monitor.h"
40 #include "monitor/readline.h"
41 #include "ui/console.h"
42 #include "sysemu/blockdev.h"
43 #include "audio/audio.h"
44 #include "disas/disas.h"
45 #include "sysemu/balloon.h"
46 #include "qemu/timer.h"
47 #include "migration/migration.h"
48 #include "sysemu/kvm.h"
49 #include "qemu/acl.h"
50 #include "sysemu/tpm.h"
51 #include "qapi/qmp/qint.h"
52 #include "qapi/qmp/qfloat.h"
53 #include "qapi/qmp/qlist.h"
54 #include "qapi/qmp/qbool.h"
55 #include "qapi/qmp/qstring.h"
56 #include "qapi/qmp/qjson.h"
57 #include "qapi/qmp/json-streamer.h"
58 #include "qapi/qmp/json-parser.h"
59 #include "qemu/osdep.h"
60 #include "cpu.h"
61 #include "trace.h"
62 #include "trace/control.h"
63 #ifdef CONFIG_TRACE_SIMPLE
64 #include "trace/simple.h"
65 #endif
66 #include "ui/qemu-spice.h"
67 #include "exec/memory.h"
68 #include "qmp-commands.h"
69 #include "hmp.h"
70 #include "qemu/thread.h"
71
72 /* for pic/irq_info */
73 #if defined(TARGET_SPARC)
74 #include "hw/sparc/sun4m.h"
75 #endif
76 #include "hw/lm32/lm32_pic.h"
77
78 //#define DEBUG
79 //#define DEBUG_COMPLETION
80
81 /*
82  * Supported types:
83  *
84  * 'F'          filename
85  * 'B'          block device name
86  * 's'          string (accept optional quote)
87  * 'O'          option string of the form NAME=VALUE,...
88  *              parsed according to QemuOptsList given by its name
89  *              Example: 'device:O' uses qemu_device_opts.
90  *              Restriction: only lists with empty desc are supported
91  *              TODO lift the restriction
92  * 'i'          32 bit integer
93  * 'l'          target long (32 or 64 bit)
94  * 'M'          Non-negative target long (32 or 64 bit), in user mode the
95  *              value is multiplied by 2^20 (think Mebibyte)
96  * 'o'          octets (aka bytes)
97  *              user mode accepts an optional T, t, G, g, M, m, K, k
98  *              suffix, which multiplies the value by 2^40 for
99  *              suffixes T and t, 2^30 for suffixes G and g, 2^20 for
100  *              M and m, 2^10 for K and k
101  * 'T'          double
102  *              user mode accepts an optional ms, us, ns suffix,
103  *              which divides the value by 1e3, 1e6, 1e9, respectively
104  * '/'          optional gdb-like print format (like "/10x")
105  *
106  * '?'          optional type (for all types, except '/')
107  * '.'          other form of optional type (for 'i' and 'l')
108  * 'b'          boolean
109  *              user mode accepts "on" or "off"
110  * '-'          optional parameter (eg. '-f')
111  *
112  */
113
114 typedef struct MonitorCompletionData MonitorCompletionData;
115 struct MonitorCompletionData {
116     Monitor *mon;
117     void (*user_print)(Monitor *mon, const QObject *data);
118 };
119
120 typedef struct mon_cmd_t {
121     const char *name;
122     const char *args_type;
123     const char *params;
124     const char *help;
125     void (*user_print)(Monitor *mon, const QObject *data);
126     union {
127         void (*cmd)(Monitor *mon, const QDict *qdict);
128         int  (*cmd_new)(Monitor *mon, const QDict *params, QObject **ret_data);
129         int  (*cmd_async)(Monitor *mon, const QDict *params,
130                           MonitorCompletion *cb, void *opaque);
131     } mhandler;
132     int flags;
133     /* @sub_table is a list of 2nd level of commands. If it do not exist,
134      * mhandler should be used. If it exist, sub_table[?].mhandler should be
135      * used, and mhandler of 1st level plays the role of help function.
136      */
137     struct mon_cmd_t *sub_table;
138 } mon_cmd_t;
139
140 /* file descriptors passed via SCM_RIGHTS */
141 typedef struct mon_fd_t mon_fd_t;
142 struct mon_fd_t {
143     char *name;
144     int fd;
145     QLIST_ENTRY(mon_fd_t) next;
146 };
147
148 /* file descriptor associated with a file descriptor set */
149 typedef struct MonFdsetFd MonFdsetFd;
150 struct MonFdsetFd {
151     int fd;
152     bool removed;
153     char *opaque;
154     QLIST_ENTRY(MonFdsetFd) next;
155 };
156
157 /* file descriptor set containing fds passed via SCM_RIGHTS */
158 typedef struct MonFdset MonFdset;
159 struct MonFdset {
160     int64_t id;
161     QLIST_HEAD(, MonFdsetFd) fds;
162     QLIST_HEAD(, MonFdsetFd) dup_fds;
163     QLIST_ENTRY(MonFdset) next;
164 };
165
166 typedef struct MonitorControl {
167     QObject *id;
168     JSONMessageParser parser;
169     int command_mode;
170 } MonitorControl;
171
172 /*
173  * To prevent flooding clients, events can be throttled. The
174  * throttling is calculated globally, rather than per-Monitor
175  * instance.
176  */
177 typedef struct MonitorEventState {
178     MonitorEvent event; /* Event being tracked */
179     int64_t rate;       /* Period over which to throttle. 0 to disable */
180     int64_t last;       /* Time at which event was last emitted */
181     QEMUTimer *timer;   /* Timer for handling delayed events */
182     QObject *data;      /* Event pending delayed dispatch */
183 } MonitorEventState;
184
185 struct Monitor {
186     CharDriverState *chr;
187     int mux_out;
188     int reset_seen;
189     int flags;
190     int suspend_cnt;
191     bool skip_flush;
192     QString *outbuf;
193     ReadLineState *rs;
194     MonitorControl *mc;
195     CPUArchState *mon_cpu;
196     BlockDriverCompletionFunc *password_completion_cb;
197     void *password_opaque;
198     QError *error;
199     QLIST_HEAD(,mon_fd_t) fds;
200     QLIST_ENTRY(Monitor) entry;
201 };
202
203 /* QMP checker flags */
204 #define QMP_ACCEPT_UNKNOWNS 1
205
206 static QLIST_HEAD(mon_list, Monitor) mon_list;
207 static QLIST_HEAD(mon_fdsets, MonFdset) mon_fdsets;
208 static int mon_refcount;
209
210 static mon_cmd_t mon_cmds[];
211 static mon_cmd_t info_cmds[];
212
213 static const mon_cmd_t qmp_cmds[];
214
215 Monitor *cur_mon;
216 Monitor *default_mon;
217
218 static void monitor_command_cb(Monitor *mon, const char *cmdline,
219                                void *opaque);
220
221 static inline int qmp_cmd_mode(const Monitor *mon)
222 {
223     return (mon->mc ? mon->mc->command_mode : 0);
224 }
225
226 /* Return true if in control mode, false otherwise */
227 static inline int monitor_ctrl_mode(const Monitor *mon)
228 {
229     return (mon->flags & MONITOR_USE_CONTROL);
230 }
231
232 /* Return non-zero iff we have a current monitor, and it is in QMP mode.  */
233 int monitor_cur_is_qmp(void)
234 {
235     return cur_mon && monitor_ctrl_mode(cur_mon);
236 }
237
238 void monitor_read_command(Monitor *mon, int show_prompt)
239 {
240     if (!mon->rs)
241         return;
242
243     readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL);
244     if (show_prompt)
245         readline_show_prompt(mon->rs);
246 }
247
248 int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
249                           void *opaque)
250 {
251     if (monitor_ctrl_mode(mon)) {
252         qerror_report(QERR_MISSING_PARAMETER, "password");
253         return -EINVAL;
254     } else if (mon->rs) {
255         readline_start(mon->rs, "Password: ", 1, readline_func, opaque);
256         /* prompt is printed on return from the command handler */
257         return 0;
258     } else {
259         monitor_printf(mon, "terminal does not support password prompting\n");
260         return -ENOTTY;
261     }
262 }
263
264 static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond,
265                                   void *opaque)
266 {
267     monitor_flush(opaque);
268     return FALSE;
269 }
270
271 void monitor_flush(Monitor *mon)
272 {
273     int rc;
274     size_t len;
275     const char *buf;
276
277     if (mon->skip_flush) {
278         return;
279     }
280
281     buf = qstring_get_str(mon->outbuf);
282     len = qstring_get_length(mon->outbuf);
283
284     if (len && !mon->mux_out) {
285         rc = qemu_chr_fe_write(mon->chr, (const uint8_t *) buf, len);
286         if (rc == len) {
287             /* all flushed */
288             QDECREF(mon->outbuf);
289             mon->outbuf = qstring_new();
290             return;
291         }
292         if (rc > 0) {
293             /* partinal write */
294             QString *tmp = qstring_from_str(buf + rc);
295             QDECREF(mon->outbuf);
296             mon->outbuf = tmp;
297         }
298         qemu_chr_fe_add_watch(mon->chr, G_IO_OUT, monitor_unblocked, mon);
299     }
300 }
301
302 /* flush at every end of line */
303 static void monitor_puts(Monitor *mon, const char *str)
304 {
305     char c;
306
307     for(;;) {
308         c = *str++;
309         if (c == '\0')
310             break;
311         if (c == '\n') {
312             qstring_append_chr(mon->outbuf, '\r');
313         }
314         qstring_append_chr(mon->outbuf, c);
315         if (c == '\n') {
316             monitor_flush(mon);
317         }
318     }
319 }
320
321 void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
322 {
323     char *buf;
324
325     if (!mon)
326         return;
327
328     if (monitor_ctrl_mode(mon)) {
329         return;
330     }
331
332     buf = g_strdup_vprintf(fmt, ap);
333     monitor_puts(mon, buf);
334     g_free(buf);
335 }
336
337 void monitor_printf(Monitor *mon, const char *fmt, ...)
338 {
339     va_list ap;
340     va_start(ap, fmt);
341     monitor_vprintf(mon, fmt, ap);
342     va_end(ap);
343 }
344
345 void monitor_print_filename(Monitor *mon, const char *filename)
346 {
347     int i;
348
349     for (i = 0; filename[i]; i++) {
350         switch (filename[i]) {
351         case ' ':
352         case '"':
353         case '\\':
354             monitor_printf(mon, "\\%c", filename[i]);
355             break;
356         case '\t':
357             monitor_printf(mon, "\\t");
358             break;
359         case '\r':
360             monitor_printf(mon, "\\r");
361             break;
362         case '\n':
363             monitor_printf(mon, "\\n");
364             break;
365         default:
366             monitor_printf(mon, "%c", filename[i]);
367             break;
368         }
369     }
370 }
371
372 static int GCC_FMT_ATTR(2, 3) monitor_fprintf(FILE *stream,
373                                               const char *fmt, ...)
374 {
375     va_list ap;
376     va_start(ap, fmt);
377     monitor_vprintf((Monitor *)stream, fmt, ap);
378     va_end(ap);
379     return 0;
380 }
381
382 static void monitor_user_noop(Monitor *mon, const QObject *data) { }
383
384 static inline int handler_is_qobject(const mon_cmd_t *cmd)
385 {
386     return cmd->user_print != NULL;
387 }
388
389 static inline bool handler_is_async(const mon_cmd_t *cmd)
390 {
391     return cmd->flags & MONITOR_CMD_ASYNC;
392 }
393
394 static inline int monitor_has_error(const Monitor *mon)
395 {
396     return mon->error != NULL;
397 }
398
399 static void monitor_json_emitter(Monitor *mon, const QObject *data)
400 {
401     QString *json;
402
403     json = mon->flags & MONITOR_USE_PRETTY ? qobject_to_json_pretty(data) :
404                                              qobject_to_json(data);
405     assert(json != NULL);
406
407     qstring_append_chr(json, '\n');
408     monitor_puts(mon, qstring_get_str(json));
409
410     QDECREF(json);
411 }
412
413 static QDict *build_qmp_error_dict(const QError *err)
414 {
415     QObject *obj;
416
417     obj = qobject_from_jsonf("{ 'error': { 'class': %s, 'desc': %p } }",
418                              ErrorClass_lookup[err->err_class],
419                              qerror_human(err));
420
421     return qobject_to_qdict(obj);
422 }
423
424 static void monitor_protocol_emitter(Monitor *mon, QObject *data)
425 {
426     QDict *qmp;
427
428     trace_monitor_protocol_emitter(mon);
429
430     if (!monitor_has_error(mon)) {
431         /* success response */
432         qmp = qdict_new();
433         if (data) {
434             qobject_incref(data);
435             qdict_put_obj(qmp, "return", data);
436         } else {
437             /* return an empty QDict by default */
438             qdict_put(qmp, "return", qdict_new());
439         }
440     } else {
441         /* error response */
442         qmp = build_qmp_error_dict(mon->error);
443         QDECREF(mon->error);
444         mon->error = NULL;
445     }
446
447     if (mon->mc->id) {
448         qdict_put_obj(qmp, "id", mon->mc->id);
449         mon->mc->id = NULL;
450     }
451
452     monitor_json_emitter(mon, QOBJECT(qmp));
453     QDECREF(qmp);
454 }
455
456 static void timestamp_put(QDict *qdict)
457 {
458     int err;
459     QObject *obj;
460     qemu_timeval tv;
461
462     err = qemu_gettimeofday(&tv);
463     if (err < 0)
464         return;
465
466     obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", "
467                                 "'microseconds': %" PRId64 " }",
468                                 (int64_t) tv.tv_sec, (int64_t) tv.tv_usec);
469     qdict_put_obj(qdict, "timestamp", obj);
470 }
471
472
473 static const char *monitor_event_names[] = {
474     [QEVENT_SHUTDOWN] = "SHUTDOWN",
475     [QEVENT_RESET] = "RESET",
476     [QEVENT_POWERDOWN] = "POWERDOWN",
477     [QEVENT_STOP] = "STOP",
478     [QEVENT_RESUME] = "RESUME",
479     [QEVENT_VNC_CONNECTED] = "VNC_CONNECTED",
480     [QEVENT_VNC_INITIALIZED] = "VNC_INITIALIZED",
481     [QEVENT_VNC_DISCONNECTED] = "VNC_DISCONNECTED",
482     [QEVENT_BLOCK_IO_ERROR] = "BLOCK_IO_ERROR",
483     [QEVENT_RTC_CHANGE] = "RTC_CHANGE",
484     [QEVENT_WATCHDOG] = "WATCHDOG",
485     [QEVENT_SPICE_CONNECTED] = "SPICE_CONNECTED",
486     [QEVENT_SPICE_INITIALIZED] = "SPICE_INITIALIZED",
487     [QEVENT_SPICE_DISCONNECTED] = "SPICE_DISCONNECTED",
488     [QEVENT_BLOCK_JOB_COMPLETED] = "BLOCK_JOB_COMPLETED",
489     [QEVENT_BLOCK_JOB_CANCELLED] = "BLOCK_JOB_CANCELLED",
490     [QEVENT_BLOCK_JOB_ERROR] = "BLOCK_JOB_ERROR",
491     [QEVENT_BLOCK_JOB_READY] = "BLOCK_JOB_READY",
492     [QEVENT_DEVICE_DELETED] = "DEVICE_DELETED",
493     [QEVENT_DEVICE_TRAY_MOVED] = "DEVICE_TRAY_MOVED",
494     [QEVENT_SUSPEND] = "SUSPEND",
495     [QEVENT_SUSPEND_DISK] = "SUSPEND_DISK",
496     [QEVENT_WAKEUP] = "WAKEUP",
497     [QEVENT_BALLOON_CHANGE] = "BALLOON_CHANGE",
498     [QEVENT_SPICE_MIGRATE_COMPLETED] = "SPICE_MIGRATE_COMPLETED",
499     [QEVENT_GUEST_PANICKED] = "GUEST_PANICKED",
500 };
501 QEMU_BUILD_BUG_ON(ARRAY_SIZE(monitor_event_names) != QEVENT_MAX)
502
503 MonitorEventState monitor_event_state[QEVENT_MAX];
504 QemuMutex monitor_event_state_lock;
505
506 /*
507  * Emits the event to every monitor instance
508  */
509 static void
510 monitor_protocol_event_emit(MonitorEvent event,
511                             QObject *data)
512 {
513     Monitor *mon;
514
515     trace_monitor_protocol_event_emit(event, data);
516     QLIST_FOREACH(mon, &mon_list, entry) {
517         if (monitor_ctrl_mode(mon) && qmp_cmd_mode(mon)) {
518             monitor_json_emitter(mon, data);
519         }
520     }
521 }
522
523
524 /*
525  * Queue a new event for emission to Monitor instances,
526  * applying any rate limiting if required.
527  */
528 static void
529 monitor_protocol_event_queue(MonitorEvent event,
530                              QObject *data)
531 {
532     MonitorEventState *evstate;
533     int64_t now = qemu_get_clock_ns(rt_clock);
534     assert(event < QEVENT_MAX);
535
536     qemu_mutex_lock(&monitor_event_state_lock);
537     evstate = &(monitor_event_state[event]);
538     trace_monitor_protocol_event_queue(event,
539                                        data,
540                                        evstate->rate,
541                                        evstate->last,
542                                        now);
543
544     /* Rate limit of 0 indicates no throttling */
545     if (!evstate->rate) {
546         monitor_protocol_event_emit(event, data);
547         evstate->last = now;
548     } else {
549         int64_t delta = now - evstate->last;
550         if (evstate->data ||
551             delta < evstate->rate) {
552             /* If there's an existing event pending, replace
553              * it with the new event, otherwise schedule a
554              * timer for delayed emission
555              */
556             if (evstate->data) {
557                 qobject_decref(evstate->data);
558             } else {
559                 int64_t then = evstate->last + evstate->rate;
560                 qemu_mod_timer_ns(evstate->timer, then);
561             }
562             evstate->data = data;
563             qobject_incref(evstate->data);
564         } else {
565             monitor_protocol_event_emit(event, data);
566             evstate->last = now;
567         }
568     }
569     qemu_mutex_unlock(&monitor_event_state_lock);
570 }
571
572
573 /*
574  * The callback invoked by QemuTimer when a delayed
575  * event is ready to be emitted
576  */
577 static void monitor_protocol_event_handler(void *opaque)
578 {
579     MonitorEventState *evstate = opaque;
580     int64_t now = qemu_get_clock_ns(rt_clock);
581
582     qemu_mutex_lock(&monitor_event_state_lock);
583
584     trace_monitor_protocol_event_handler(evstate->event,
585                                          evstate->data,
586                                          evstate->last,
587                                          now);
588     if (evstate->data) {
589         monitor_protocol_event_emit(evstate->event, evstate->data);
590         qobject_decref(evstate->data);
591         evstate->data = NULL;
592     }
593     evstate->last = now;
594     qemu_mutex_unlock(&monitor_event_state_lock);
595 }
596
597
598 /*
599  * @event: the event ID to be limited
600  * @rate: the rate limit in milliseconds
601  *
602  * Sets a rate limit on a particular event, so no
603  * more than 1 event will be emitted within @rate
604  * milliseconds
605  */
606 static void
607 monitor_protocol_event_throttle(MonitorEvent event,
608                                 int64_t rate)
609 {
610     MonitorEventState *evstate;
611     assert(event < QEVENT_MAX);
612
613     evstate = &(monitor_event_state[event]);
614
615     trace_monitor_protocol_event_throttle(event, rate);
616     evstate->event = event;
617     evstate->rate = rate * SCALE_MS;
618     evstate->timer = qemu_new_timer(rt_clock,
619                                     SCALE_MS,
620                                     monitor_protocol_event_handler,
621                                     evstate);
622     evstate->last = 0;
623     evstate->data = NULL;
624 }
625
626
627 /* Global, one-time initializer to configure the rate limiting
628  * and initialize state */
629 static void monitor_protocol_event_init(void)
630 {
631     qemu_mutex_init(&monitor_event_state_lock);
632     /* Limit RTC & BALLOON events to 1 per second */
633     monitor_protocol_event_throttle(QEVENT_RTC_CHANGE, 1000);
634     monitor_protocol_event_throttle(QEVENT_BALLOON_CHANGE, 1000);
635     monitor_protocol_event_throttle(QEVENT_WATCHDOG, 1000);
636 }
637
638 /**
639  * monitor_protocol_event(): Generate a Monitor event
640  *
641  * Event-specific data can be emitted through the (optional) 'data' parameter.
642  */
643 void monitor_protocol_event(MonitorEvent event, QObject *data)
644 {
645     QDict *qmp;
646     const char *event_name;
647
648     assert(event < QEVENT_MAX);
649
650     event_name = monitor_event_names[event];
651     assert(event_name != NULL);
652
653     qmp = qdict_new();
654     timestamp_put(qmp);
655     qdict_put(qmp, "event", qstring_from_str(event_name));
656     if (data) {
657         qobject_incref(data);
658         qdict_put_obj(qmp, "data", data);
659     }
660
661     trace_monitor_protocol_event(event, event_name, qmp);
662     monitor_protocol_event_queue(event, QOBJECT(qmp));
663     QDECREF(qmp);
664 }
665
666 static int do_qmp_capabilities(Monitor *mon, const QDict *params,
667                                QObject **ret_data)
668 {
669     /* Will setup QMP capabilities in the future */
670     if (monitor_ctrl_mode(mon)) {
671         mon->mc->command_mode = 1;
672     }
673
674     return 0;
675 }
676
677 static void handle_user_command(Monitor *mon, const char *cmdline);
678
679 char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
680                                 int64_t cpu_index, Error **errp)
681 {
682     char *output = NULL;
683     Monitor *old_mon, hmp;
684
685     memset(&hmp, 0, sizeof(hmp));
686     hmp.outbuf = qstring_new();
687     hmp.skip_flush = true;
688
689     old_mon = cur_mon;
690     cur_mon = &hmp;
691
692     if (has_cpu_index) {
693         int ret = monitor_set_cpu(cpu_index);
694         if (ret < 0) {
695             cur_mon = old_mon;
696             error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
697                       "a CPU number");
698             goto out;
699         }
700     }
701
702     handle_user_command(&hmp, command_line);
703     cur_mon = old_mon;
704
705     if (qstring_get_length(hmp.outbuf) > 0) {
706         output = g_strdup(qstring_get_str(hmp.outbuf));
707     } else {
708         output = g_strdup("");
709     }
710
711 out:
712     QDECREF(hmp.outbuf);
713     return output;
714 }
715
716 static int compare_cmd(const char *name, const char *list)
717 {
718     const char *p, *pstart;
719     int len;
720     len = strlen(name);
721     p = list;
722     for(;;) {
723         pstart = p;
724         p = strchr(p, '|');
725         if (!p)
726             p = pstart + strlen(pstart);
727         if ((p - pstart) == len && !memcmp(pstart, name, len))
728             return 1;
729         if (*p == '\0')
730             break;
731         p++;
732     }
733     return 0;
734 }
735
736 static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,
737                           const char *prefix, const char *name)
738 {
739     const mon_cmd_t *cmd;
740
741     for(cmd = cmds; cmd->name != NULL; cmd++) {
742         if (!name || !strcmp(name, cmd->name))
743             monitor_printf(mon, "%s%s %s -- %s\n", prefix, cmd->name,
744                            cmd->params, cmd->help);
745     }
746 }
747
748 static void help_cmd(Monitor *mon, const char *name)
749 {
750     if (name && !strcmp(name, "info")) {
751         help_cmd_dump(mon, info_cmds, "info ", NULL);
752     } else {
753         help_cmd_dump(mon, mon_cmds, "", name);
754         if (name && !strcmp(name, "log")) {
755             const QEMULogItem *item;
756             monitor_printf(mon, "Log items (comma separated):\n");
757             monitor_printf(mon, "%-10s %s\n", "none", "remove all logs");
758             for (item = qemu_log_items; item->mask != 0; item++) {
759                 monitor_printf(mon, "%-10s %s\n", item->name, item->help);
760             }
761         }
762     }
763 }
764
765 static void do_help_cmd(Monitor *mon, const QDict *qdict)
766 {
767     help_cmd(mon, qdict_get_try_str(qdict, "name"));
768 }
769
770 static void do_trace_event_set_state(Monitor *mon, const QDict *qdict)
771 {
772     const char *tp_name = qdict_get_str(qdict, "name");
773     bool new_state = qdict_get_bool(qdict, "option");
774
775     bool found = false;
776     TraceEvent *ev = NULL;
777     while ((ev = trace_event_pattern(tp_name, ev)) != NULL) {
778         found = true;
779         if (!trace_event_get_state_static(ev)) {
780             monitor_printf(mon, "event \"%s\" is not traceable\n", tp_name);
781         } else {
782             trace_event_set_state_dynamic(ev, new_state);
783         }
784     }
785     if (!trace_event_is_pattern(tp_name) && !found) {
786         monitor_printf(mon, "unknown event name \"%s\"\n", tp_name);
787     }
788 }
789
790 #ifdef CONFIG_TRACE_SIMPLE
791 static void do_trace_file(Monitor *mon, const QDict *qdict)
792 {
793     const char *op = qdict_get_try_str(qdict, "op");
794     const char *arg = qdict_get_try_str(qdict, "arg");
795
796     if (!op) {
797         st_print_trace_file_status((FILE *)mon, &monitor_fprintf);
798     } else if (!strcmp(op, "on")) {
799         st_set_trace_file_enabled(true);
800     } else if (!strcmp(op, "off")) {
801         st_set_trace_file_enabled(false);
802     } else if (!strcmp(op, "flush")) {
803         st_flush_trace_buffer();
804     } else if (!strcmp(op, "set")) {
805         if (arg) {
806             st_set_trace_file(arg);
807         }
808     } else {
809         monitor_printf(mon, "unexpected argument \"%s\"\n", op);
810         help_cmd(mon, "trace-file");
811     }
812 }
813 #endif
814
815 static void user_monitor_complete(void *opaque, QObject *ret_data)
816 {
817     MonitorCompletionData *data = (MonitorCompletionData *)opaque; 
818
819     if (ret_data) {
820         data->user_print(data->mon, ret_data);
821     }
822     monitor_resume(data->mon);
823     g_free(data);
824 }
825
826 static void qmp_monitor_complete(void *opaque, QObject *ret_data)
827 {
828     monitor_protocol_emitter(opaque, ret_data);
829 }
830
831 static int qmp_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
832                                  const QDict *params)
833 {
834     return cmd->mhandler.cmd_async(mon, params, qmp_monitor_complete, mon);
835 }
836
837 static void user_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
838                                    const QDict *params)
839 {
840     int ret;
841
842     MonitorCompletionData *cb_data = g_malloc(sizeof(*cb_data));
843     cb_data->mon = mon;
844     cb_data->user_print = cmd->user_print;
845     monitor_suspend(mon);
846     ret = cmd->mhandler.cmd_async(mon, params,
847                                   user_monitor_complete, cb_data);
848     if (ret < 0) {
849         monitor_resume(mon);
850         g_free(cb_data);
851     }
852 }
853
854 static void do_info_help(Monitor *mon, const QDict *qdict)
855 {
856     help_cmd(mon, "info");
857 }
858
859 CommandInfoList *qmp_query_commands(Error **errp)
860 {
861     CommandInfoList *info, *cmd_list = NULL;
862     const mon_cmd_t *cmd;
863
864     for (cmd = qmp_cmds; cmd->name != NULL; cmd++) {
865         info = g_malloc0(sizeof(*info));
866         info->value = g_malloc0(sizeof(*info->value));
867         info->value->name = g_strdup(cmd->name);
868
869         info->next = cmd_list;
870         cmd_list = info;
871     }
872
873     return cmd_list;
874 }
875
876 EventInfoList *qmp_query_events(Error **errp)
877 {
878     EventInfoList *info, *ev_list = NULL;
879     MonitorEvent e;
880
881     for (e = 0 ; e < QEVENT_MAX ; e++) {
882         const char *event_name = monitor_event_names[e];
883         assert(event_name != NULL);
884         info = g_malloc0(sizeof(*info));
885         info->value = g_malloc0(sizeof(*info->value));
886         info->value->name = g_strdup(event_name);
887
888         info->next = ev_list;
889         ev_list = info;
890     }
891
892     return ev_list;
893 }
894
895 /* set the current CPU defined by the user */
896 int monitor_set_cpu(int cpu_index)
897 {
898     CPUState *cpu;
899
900     cpu = qemu_get_cpu(cpu_index);
901     if (cpu == NULL) {
902         return -1;
903     }
904     cur_mon->mon_cpu = cpu->env_ptr;
905     return 0;
906 }
907
908 static CPUArchState *mon_get_cpu(void)
909 {
910     if (!cur_mon->mon_cpu) {
911         monitor_set_cpu(0);
912     }
913     cpu_synchronize_state(cur_mon->mon_cpu);
914     return cur_mon->mon_cpu;
915 }
916
917 int monitor_get_cpu_index(void)
918 {
919     CPUState *cpu = ENV_GET_CPU(mon_get_cpu());
920     return cpu->cpu_index;
921 }
922
923 static void do_info_registers(Monitor *mon, const QDict *qdict)
924 {
925     CPUArchState *env;
926     env = mon_get_cpu();
927     cpu_dump_state(env, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
928 }
929
930 static void do_info_jit(Monitor *mon, const QDict *qdict)
931 {
932     dump_exec_info((FILE *)mon, monitor_fprintf);
933 }
934
935 static void do_info_history(Monitor *mon, const QDict *qdict)
936 {
937     int i;
938     const char *str;
939
940     if (!mon->rs)
941         return;
942     i = 0;
943     for(;;) {
944         str = readline_get_history(mon->rs, i);
945         if (!str)
946             break;
947         monitor_printf(mon, "%d: '%s'\n", i, str);
948         i++;
949     }
950 }
951
952 #if defined(TARGET_PPC)
953 /* XXX: not implemented in other targets */
954 static void do_info_cpu_stats(Monitor *mon, const QDict *qdict)
955 {
956     CPUArchState *env;
957
958     env = mon_get_cpu();
959     cpu_dump_statistics(env, (FILE *)mon, &monitor_fprintf, 0);
960 }
961 #endif
962
963 static void do_trace_print_events(Monitor *mon, const QDict *qdict)
964 {
965     trace_print_events((FILE *)mon, &monitor_fprintf);
966 }
967
968 static int client_migrate_info(Monitor *mon, const QDict *qdict,
969                                MonitorCompletion cb, void *opaque)
970 {
971     const char *protocol = qdict_get_str(qdict, "protocol");
972     const char *hostname = qdict_get_str(qdict, "hostname");
973     const char *subject  = qdict_get_try_str(qdict, "cert-subject");
974     int port             = qdict_get_try_int(qdict, "port", -1);
975     int tls_port         = qdict_get_try_int(qdict, "tls-port", -1);
976     int ret;
977
978     if (strcmp(protocol, "spice") == 0) {
979         if (!using_spice) {
980             qerror_report(QERR_DEVICE_NOT_ACTIVE, "spice");
981             return -1;
982         }
983
984         if (port == -1 && tls_port == -1) {
985             qerror_report(QERR_MISSING_PARAMETER, "port/tls-port");
986             return -1;
987         }
988
989         ret = qemu_spice_migrate_info(hostname, port, tls_port, subject,
990                                       cb, opaque);
991         if (ret != 0) {
992             qerror_report(QERR_UNDEFINED_ERROR);
993             return -1;
994         }
995         return 0;
996     }
997
998     qerror_report(QERR_INVALID_PARAMETER, "protocol");
999     return -1;
1000 }
1001
1002 static void do_logfile(Monitor *mon, const QDict *qdict)
1003 {
1004     qemu_set_log_filename(qdict_get_str(qdict, "filename"));
1005 }
1006
1007 static void do_log(Monitor *mon, const QDict *qdict)
1008 {
1009     int mask;
1010     const char *items = qdict_get_str(qdict, "items");
1011
1012     if (!strcmp(items, "none")) {
1013         mask = 0;
1014     } else {
1015         mask = qemu_str_to_log_mask(items);
1016         if (!mask) {
1017             help_cmd(mon, "log");
1018             return;
1019         }
1020     }
1021     qemu_set_log(mask);
1022 }
1023
1024 static void do_singlestep(Monitor *mon, const QDict *qdict)
1025 {
1026     const char *option = qdict_get_try_str(qdict, "option");
1027     if (!option || !strcmp(option, "on")) {
1028         singlestep = 1;
1029     } else if (!strcmp(option, "off")) {
1030         singlestep = 0;
1031     } else {
1032         monitor_printf(mon, "unexpected option %s\n", option);
1033     }
1034 }
1035
1036 static void do_gdbserver(Monitor *mon, const QDict *qdict)
1037 {
1038     const char *device = qdict_get_try_str(qdict, "device");
1039     if (!device)
1040         device = "tcp::" DEFAULT_GDBSTUB_PORT;
1041     if (gdbserver_start(device) < 0) {
1042         monitor_printf(mon, "Could not open gdbserver on device '%s'\n",
1043                        device);
1044     } else if (strcmp(device, "none") == 0) {
1045         monitor_printf(mon, "Disabled gdbserver\n");
1046     } else {
1047         monitor_printf(mon, "Waiting for gdb connection on device '%s'\n",
1048                        device);
1049     }
1050 }
1051
1052 static void do_watchdog_action(Monitor *mon, const QDict *qdict)
1053 {
1054     const char *action = qdict_get_str(qdict, "action");
1055     if (select_watchdog_action(action) == -1) {
1056         monitor_printf(mon, "Unknown watchdog action '%s'\n", action);
1057     }
1058 }
1059
1060 static void monitor_printc(Monitor *mon, int c)
1061 {
1062     monitor_printf(mon, "'");
1063     switch(c) {
1064     case '\'':
1065         monitor_printf(mon, "\\'");
1066         break;
1067     case '\\':
1068         monitor_printf(mon, "\\\\");
1069         break;
1070     case '\n':
1071         monitor_printf(mon, "\\n");
1072         break;
1073     case '\r':
1074         monitor_printf(mon, "\\r");
1075         break;
1076     default:
1077         if (c >= 32 && c <= 126) {
1078             monitor_printf(mon, "%c", c);
1079         } else {
1080             monitor_printf(mon, "\\x%02x", c);
1081         }
1082         break;
1083     }
1084     monitor_printf(mon, "'");
1085 }
1086
1087 static void memory_dump(Monitor *mon, int count, int format, int wsize,
1088                         hwaddr addr, int is_physical)
1089 {
1090     CPUArchState *env;
1091     int l, line_size, i, max_digits, len;
1092     uint8_t buf[16];
1093     uint64_t v;
1094
1095     if (format == 'i') {
1096         int flags;
1097         flags = 0;
1098         env = mon_get_cpu();
1099 #ifdef TARGET_I386
1100         if (wsize == 2) {
1101             flags = 1;
1102         } else if (wsize == 4) {
1103             flags = 0;
1104         } else {
1105             /* as default we use the current CS size */
1106             flags = 0;
1107             if (env) {
1108 #ifdef TARGET_X86_64
1109                 if ((env->efer & MSR_EFER_LMA) &&
1110                     (env->segs[R_CS].flags & DESC_L_MASK))
1111                     flags = 2;
1112                 else
1113 #endif
1114                 if (!(env->segs[R_CS].flags & DESC_B_MASK))
1115                     flags = 1;
1116             }
1117         }
1118 #endif
1119         monitor_disas(mon, env, addr, count, is_physical, flags);
1120         return;
1121     }
1122
1123     len = wsize * count;
1124     if (wsize == 1)
1125         line_size = 8;
1126     else
1127         line_size = 16;
1128     max_digits = 0;
1129
1130     switch(format) {
1131     case 'o':
1132         max_digits = (wsize * 8 + 2) / 3;
1133         break;
1134     default:
1135     case 'x':
1136         max_digits = (wsize * 8) / 4;
1137         break;
1138     case 'u':
1139     case 'd':
1140         max_digits = (wsize * 8 * 10 + 32) / 33;
1141         break;
1142     case 'c':
1143         wsize = 1;
1144         break;
1145     }
1146
1147     while (len > 0) {
1148         if (is_physical)
1149             monitor_printf(mon, TARGET_FMT_plx ":", addr);
1150         else
1151             monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr);
1152         l = len;
1153         if (l > line_size)
1154             l = line_size;
1155         if (is_physical) {
1156             cpu_physical_memory_read(addr, buf, l);
1157         } else {
1158             env = mon_get_cpu();
1159             if (cpu_memory_rw_debug(env, addr, buf, l, 0) < 0) {
1160                 monitor_printf(mon, " Cannot access memory\n");
1161                 break;
1162             }
1163         }
1164         i = 0;
1165         while (i < l) {
1166             switch(wsize) {
1167             default:
1168             case 1:
1169                 v = ldub_raw(buf + i);
1170                 break;
1171             case 2:
1172                 v = lduw_raw(buf + i);
1173                 break;
1174             case 4:
1175                 v = (uint32_t)ldl_raw(buf + i);
1176                 break;
1177             case 8:
1178                 v = ldq_raw(buf + i);
1179                 break;
1180             }
1181             monitor_printf(mon, " ");
1182             switch(format) {
1183             case 'o':
1184                 monitor_printf(mon, "%#*" PRIo64, max_digits, v);
1185                 break;
1186             case 'x':
1187                 monitor_printf(mon, "0x%0*" PRIx64, max_digits, v);
1188                 break;
1189             case 'u':
1190                 monitor_printf(mon, "%*" PRIu64, max_digits, v);
1191                 break;
1192             case 'd':
1193                 monitor_printf(mon, "%*" PRId64, max_digits, v);
1194                 break;
1195             case 'c':
1196                 monitor_printc(mon, v);
1197                 break;
1198             }
1199             i += wsize;
1200         }
1201         monitor_printf(mon, "\n");
1202         addr += l;
1203         len -= l;
1204     }
1205 }
1206
1207 static void do_memory_dump(Monitor *mon, const QDict *qdict)
1208 {
1209     int count = qdict_get_int(qdict, "count");
1210     int format = qdict_get_int(qdict, "format");
1211     int size = qdict_get_int(qdict, "size");
1212     target_long addr = qdict_get_int(qdict, "addr");
1213
1214     memory_dump(mon, count, format, size, addr, 0);
1215 }
1216
1217 static void do_physical_memory_dump(Monitor *mon, const QDict *qdict)
1218 {
1219     int count = qdict_get_int(qdict, "count");
1220     int format = qdict_get_int(qdict, "format");
1221     int size = qdict_get_int(qdict, "size");
1222     hwaddr addr = qdict_get_int(qdict, "addr");
1223
1224     memory_dump(mon, count, format, size, addr, 1);
1225 }
1226
1227 static void do_print(Monitor *mon, const QDict *qdict)
1228 {
1229     int format = qdict_get_int(qdict, "format");
1230     hwaddr val = qdict_get_int(qdict, "val");
1231
1232     switch(format) {
1233     case 'o':
1234         monitor_printf(mon, "%#" HWADDR_PRIo, val);
1235         break;
1236     case 'x':
1237         monitor_printf(mon, "%#" HWADDR_PRIx, val);
1238         break;
1239     case 'u':
1240         monitor_printf(mon, "%" HWADDR_PRIu, val);
1241         break;
1242     default:
1243     case 'd':
1244         monitor_printf(mon, "%" HWADDR_PRId, val);
1245         break;
1246     case 'c':
1247         monitor_printc(mon, val);
1248         break;
1249     }
1250     monitor_printf(mon, "\n");
1251 }
1252
1253 static void do_sum(Monitor *mon, const QDict *qdict)
1254 {
1255     uint32_t addr;
1256     uint16_t sum;
1257     uint32_t start = qdict_get_int(qdict, "start");
1258     uint32_t size = qdict_get_int(qdict, "size");
1259
1260     sum = 0;
1261     for(addr = start; addr < (start + size); addr++) {
1262         uint8_t val = ldub_phys(addr);
1263         /* BSD sum algorithm ('sum' Unix command) */
1264         sum = (sum >> 1) | (sum << 15);
1265         sum += val;
1266     }
1267     monitor_printf(mon, "%05d\n", sum);
1268 }
1269
1270 static int mouse_button_state;
1271
1272 static void do_mouse_move(Monitor *mon, const QDict *qdict)
1273 {
1274     int dx, dy, dz;
1275     const char *dx_str = qdict_get_str(qdict, "dx_str");
1276     const char *dy_str = qdict_get_str(qdict, "dy_str");
1277     const char *dz_str = qdict_get_try_str(qdict, "dz_str");
1278     dx = strtol(dx_str, NULL, 0);
1279     dy = strtol(dy_str, NULL, 0);
1280     dz = 0;
1281     if (dz_str)
1282         dz = strtol(dz_str, NULL, 0);
1283     kbd_mouse_event(dx, dy, dz, mouse_button_state);
1284 }
1285
1286 static void do_mouse_button(Monitor *mon, const QDict *qdict)
1287 {
1288     int button_state = qdict_get_int(qdict, "button_state");
1289     mouse_button_state = button_state;
1290     kbd_mouse_event(0, 0, 0, mouse_button_state);
1291 }
1292
1293 static void do_ioport_read(Monitor *mon, const QDict *qdict)
1294 {
1295     int size = qdict_get_int(qdict, "size");
1296     int addr = qdict_get_int(qdict, "addr");
1297     int has_index = qdict_haskey(qdict, "index");
1298     uint32_t val;
1299     int suffix;
1300
1301     if (has_index) {
1302         int index = qdict_get_int(qdict, "index");
1303         cpu_outb(addr & IOPORTS_MASK, index & 0xff);
1304         addr++;
1305     }
1306     addr &= 0xffff;
1307
1308     switch(size) {
1309     default:
1310     case 1:
1311         val = cpu_inb(addr);
1312         suffix = 'b';
1313         break;
1314     case 2:
1315         val = cpu_inw(addr);
1316         suffix = 'w';
1317         break;
1318     case 4:
1319         val = cpu_inl(addr);
1320         suffix = 'l';
1321         break;
1322     }
1323     monitor_printf(mon, "port%c[0x%04x] = %#0*x\n",
1324                    suffix, addr, size * 2, val);
1325 }
1326
1327 static void do_ioport_write(Monitor *mon, const QDict *qdict)
1328 {
1329     int size = qdict_get_int(qdict, "size");
1330     int addr = qdict_get_int(qdict, "addr");
1331     int val = qdict_get_int(qdict, "val");
1332
1333     addr &= IOPORTS_MASK;
1334
1335     switch (size) {
1336     default:
1337     case 1:
1338         cpu_outb(addr, val);
1339         break;
1340     case 2:
1341         cpu_outw(addr, val);
1342         break;
1343     case 4:
1344         cpu_outl(addr, val);
1345         break;
1346     }
1347 }
1348
1349 static void do_boot_set(Monitor *mon, const QDict *qdict)
1350 {
1351     int res;
1352     const char *bootdevice = qdict_get_str(qdict, "bootdevice");
1353
1354     res = qemu_boot_set(bootdevice);
1355     if (res == 0) {
1356         monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
1357     } else if (res > 0) {
1358         monitor_printf(mon, "setting boot device list failed\n");
1359     } else {
1360         monitor_printf(mon, "no function defined to set boot device list for "
1361                        "this architecture\n");
1362     }
1363 }
1364
1365 #if defined(TARGET_I386)
1366 static void print_pte(Monitor *mon, hwaddr addr,
1367                       hwaddr pte,
1368                       hwaddr mask)
1369 {
1370 #ifdef TARGET_X86_64
1371     if (addr & (1ULL << 47)) {
1372         addr |= -1LL << 48;
1373     }
1374 #endif
1375     monitor_printf(mon, TARGET_FMT_plx ": " TARGET_FMT_plx
1376                    " %c%c%c%c%c%c%c%c%c\n",
1377                    addr,
1378                    pte & mask,
1379                    pte & PG_NX_MASK ? 'X' : '-',
1380                    pte & PG_GLOBAL_MASK ? 'G' : '-',
1381                    pte & PG_PSE_MASK ? 'P' : '-',
1382                    pte & PG_DIRTY_MASK ? 'D' : '-',
1383                    pte & PG_ACCESSED_MASK ? 'A' : '-',
1384                    pte & PG_PCD_MASK ? 'C' : '-',
1385                    pte & PG_PWT_MASK ? 'T' : '-',
1386                    pte & PG_USER_MASK ? 'U' : '-',
1387                    pte & PG_RW_MASK ? 'W' : '-');
1388 }
1389
1390 static void tlb_info_32(Monitor *mon, CPUArchState *env)
1391 {
1392     unsigned int l1, l2;
1393     uint32_t pgd, pde, pte;
1394
1395     pgd = env->cr[3] & ~0xfff;
1396     for(l1 = 0; l1 < 1024; l1++) {
1397         cpu_physical_memory_read(pgd + l1 * 4, &pde, 4);
1398         pde = le32_to_cpu(pde);
1399         if (pde & PG_PRESENT_MASK) {
1400             if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) {
1401                 /* 4M pages */
1402                 print_pte(mon, (l1 << 22), pde, ~((1 << 21) - 1));
1403             } else {
1404                 for(l2 = 0; l2 < 1024; l2++) {
1405                     cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4);
1406                     pte = le32_to_cpu(pte);
1407                     if (pte & PG_PRESENT_MASK) {
1408                         print_pte(mon, (l1 << 22) + (l2 << 12),
1409                                   pte & ~PG_PSE_MASK,
1410                                   ~0xfff);
1411                     }
1412                 }
1413             }
1414         }
1415     }
1416 }
1417
1418 static void tlb_info_pae32(Monitor *mon, CPUArchState *env)
1419 {
1420     unsigned int l1, l2, l3;
1421     uint64_t pdpe, pde, pte;
1422     uint64_t pdp_addr, pd_addr, pt_addr;
1423
1424     pdp_addr = env->cr[3] & ~0x1f;
1425     for (l1 = 0; l1 < 4; l1++) {
1426         cpu_physical_memory_read(pdp_addr + l1 * 8, &pdpe, 8);
1427         pdpe = le64_to_cpu(pdpe);
1428         if (pdpe & PG_PRESENT_MASK) {
1429             pd_addr = pdpe & 0x3fffffffff000ULL;
1430             for (l2 = 0; l2 < 512; l2++) {
1431                 cpu_physical_memory_read(pd_addr + l2 * 8, &pde, 8);
1432                 pde = le64_to_cpu(pde);
1433                 if (pde & PG_PRESENT_MASK) {
1434                     if (pde & PG_PSE_MASK) {
1435                         /* 2M pages with PAE, CR4.PSE is ignored */
1436                         print_pte(mon, (l1 << 30 ) + (l2 << 21), pde,
1437                                   ~((hwaddr)(1 << 20) - 1));
1438                     } else {
1439                         pt_addr = pde & 0x3fffffffff000ULL;
1440                         for (l3 = 0; l3 < 512; l3++) {
1441                             cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8);
1442                             pte = le64_to_cpu(pte);
1443                             if (pte & PG_PRESENT_MASK) {
1444                                 print_pte(mon, (l1 << 30 ) + (l2 << 21)
1445                                           + (l3 << 12),
1446                                           pte & ~PG_PSE_MASK,
1447                                           ~(hwaddr)0xfff);
1448                             }
1449                         }
1450                     }
1451                 }
1452             }
1453         }
1454     }
1455 }
1456
1457 #ifdef TARGET_X86_64
1458 static void tlb_info_64(Monitor *mon, CPUArchState *env)
1459 {
1460     uint64_t l1, l2, l3, l4;
1461     uint64_t pml4e, pdpe, pde, pte;
1462     uint64_t pml4_addr, pdp_addr, pd_addr, pt_addr;
1463
1464     pml4_addr = env->cr[3] & 0x3fffffffff000ULL;
1465     for (l1 = 0; l1 < 512; l1++) {
1466         cpu_physical_memory_read(pml4_addr + l1 * 8, &pml4e, 8);
1467         pml4e = le64_to_cpu(pml4e);
1468         if (pml4e & PG_PRESENT_MASK) {
1469             pdp_addr = pml4e & 0x3fffffffff000ULL;
1470             for (l2 = 0; l2 < 512; l2++) {
1471                 cpu_physical_memory_read(pdp_addr + l2 * 8, &pdpe, 8);
1472                 pdpe = le64_to_cpu(pdpe);
1473                 if (pdpe & PG_PRESENT_MASK) {
1474                     if (pdpe & PG_PSE_MASK) {
1475                         /* 1G pages, CR4.PSE is ignored */
1476                         print_pte(mon, (l1 << 39) + (l2 << 30), pdpe,
1477                                   0x3ffffc0000000ULL);
1478                     } else {
1479                         pd_addr = pdpe & 0x3fffffffff000ULL;
1480                         for (l3 = 0; l3 < 512; l3++) {
1481                             cpu_physical_memory_read(pd_addr + l3 * 8, &pde, 8);
1482                             pde = le64_to_cpu(pde);
1483                             if (pde & PG_PRESENT_MASK) {
1484                                 if (pde & PG_PSE_MASK) {
1485                                     /* 2M pages, CR4.PSE is ignored */
1486                                     print_pte(mon, (l1 << 39) + (l2 << 30) +
1487                                               (l3 << 21), pde,
1488                                               0x3ffffffe00000ULL);
1489                                 } else {
1490                                     pt_addr = pde & 0x3fffffffff000ULL;
1491                                     for (l4 = 0; l4 < 512; l4++) {
1492                                         cpu_physical_memory_read(pt_addr
1493                                                                  + l4 * 8,
1494                                                                  &pte, 8);
1495                                         pte = le64_to_cpu(pte);
1496                                         if (pte & PG_PRESENT_MASK) {
1497                                             print_pte(mon, (l1 << 39) +
1498                                                       (l2 << 30) +
1499                                                       (l3 << 21) + (l4 << 12),
1500                                                       pte & ~PG_PSE_MASK,
1501                                                       0x3fffffffff000ULL);
1502                                         }
1503                                     }
1504                                 }
1505                             }
1506                         }
1507                     }
1508                 }
1509             }
1510         }
1511     }
1512 }
1513 #endif
1514
1515 static void tlb_info(Monitor *mon, const QDict *qdict)
1516 {
1517     CPUArchState *env;
1518
1519     env = mon_get_cpu();
1520
1521     if (!(env->cr[0] & CR0_PG_MASK)) {
1522         monitor_printf(mon, "PG disabled\n");
1523         return;
1524     }
1525     if (env->cr[4] & CR4_PAE_MASK) {
1526 #ifdef TARGET_X86_64
1527         if (env->hflags & HF_LMA_MASK) {
1528             tlb_info_64(mon, env);
1529         } else
1530 #endif
1531         {
1532             tlb_info_pae32(mon, env);
1533         }
1534     } else {
1535         tlb_info_32(mon, env);
1536     }
1537 }
1538
1539 static void mem_print(Monitor *mon, hwaddr *pstart,
1540                       int *plast_prot,
1541                       hwaddr end, int prot)
1542 {
1543     int prot1;
1544     prot1 = *plast_prot;
1545     if (prot != prot1) {
1546         if (*pstart != -1) {
1547             monitor_printf(mon, TARGET_FMT_plx "-" TARGET_FMT_plx " "
1548                            TARGET_FMT_plx " %c%c%c\n",
1549                            *pstart, end, end - *pstart,
1550                            prot1 & PG_USER_MASK ? 'u' : '-',
1551                            'r',
1552                            prot1 & PG_RW_MASK ? 'w' : '-');
1553         }
1554         if (prot != 0)
1555             *pstart = end;
1556         else
1557             *pstart = -1;
1558         *plast_prot = prot;
1559     }
1560 }
1561
1562 static void mem_info_32(Monitor *mon, CPUArchState *env)
1563 {
1564     unsigned int l1, l2;
1565     int prot, last_prot;
1566     uint32_t pgd, pde, pte;
1567     hwaddr start, end;
1568
1569     pgd = env->cr[3] & ~0xfff;
1570     last_prot = 0;
1571     start = -1;
1572     for(l1 = 0; l1 < 1024; l1++) {
1573         cpu_physical_memory_read(pgd + l1 * 4, &pde, 4);
1574         pde = le32_to_cpu(pde);
1575         end = l1 << 22;
1576         if (pde & PG_PRESENT_MASK) {
1577             if ((pde & PG_PSE_MASK) && (env->cr[4] & CR4_PSE_MASK)) {
1578                 prot = pde & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK);
1579                 mem_print(mon, &start, &last_prot, end, prot);
1580             } else {
1581                 for(l2 = 0; l2 < 1024; l2++) {
1582                     cpu_physical_memory_read((pde & ~0xfff) + l2 * 4, &pte, 4);
1583                     pte = le32_to_cpu(pte);
1584                     end = (l1 << 22) + (l2 << 12);
1585                     if (pte & PG_PRESENT_MASK) {
1586                         prot = pte & pde &
1587                             (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK);
1588                     } else {
1589                         prot = 0;
1590                     }
1591                     mem_print(mon, &start, &last_prot, end, prot);
1592                 }
1593             }
1594         } else {
1595             prot = 0;
1596             mem_print(mon, &start, &last_prot, end, prot);
1597         }
1598     }
1599     /* Flush last range */
1600     mem_print(mon, &start, &last_prot, (hwaddr)1 << 32, 0);
1601 }
1602
1603 static void mem_info_pae32(Monitor *mon, CPUArchState *env)
1604 {
1605     unsigned int l1, l2, l3;
1606     int prot, last_prot;
1607     uint64_t pdpe, pde, pte;
1608     uint64_t pdp_addr, pd_addr, pt_addr;
1609     hwaddr start, end;
1610
1611     pdp_addr = env->cr[3] & ~0x1f;
1612     last_prot = 0;
1613     start = -1;
1614     for (l1 = 0; l1 < 4; l1++) {
1615         cpu_physical_memory_read(pdp_addr + l1 * 8, &pdpe, 8);
1616         pdpe = le64_to_cpu(pdpe);
1617         end = l1 << 30;
1618         if (pdpe & PG_PRESENT_MASK) {
1619             pd_addr = pdpe & 0x3fffffffff000ULL;
1620             for (l2 = 0; l2 < 512; l2++) {
1621                 cpu_physical_memory_read(pd_addr + l2 * 8, &pde, 8);
1622                 pde = le64_to_cpu(pde);
1623                 end = (l1 << 30) + (l2 << 21);
1624                 if (pde & PG_PRESENT_MASK) {
1625                     if (pde & PG_PSE_MASK) {
1626                         prot = pde & (PG_USER_MASK | PG_RW_MASK |
1627                                       PG_PRESENT_MASK);
1628                         mem_print(mon, &start, &last_prot, end, prot);
1629                     } else {
1630                         pt_addr = pde & 0x3fffffffff000ULL;
1631                         for (l3 = 0; l3 < 512; l3++) {
1632                             cpu_physical_memory_read(pt_addr + l3 * 8, &pte, 8);
1633                             pte = le64_to_cpu(pte);
1634                             end = (l1 << 30) + (l2 << 21) + (l3 << 12);
1635                             if (pte & PG_PRESENT_MASK) {
1636                                 prot = pte & pde & (PG_USER_MASK | PG_RW_MASK |
1637                                                     PG_PRESENT_MASK);
1638                             } else {
1639                                 prot = 0;
1640                             }
1641                             mem_print(mon, &start, &last_prot, end, prot);
1642                         }
1643                     }
1644                 } else {
1645                     prot = 0;
1646                     mem_print(mon, &start, &last_prot, end, prot);
1647                 }
1648             }
1649         } else {
1650             prot = 0;
1651             mem_print(mon, &start, &last_prot, end, prot);
1652         }
1653     }
1654     /* Flush last range */
1655     mem_print(mon, &start, &last_prot, (hwaddr)1 << 32, 0);
1656 }
1657
1658
1659 #ifdef TARGET_X86_64
1660 static void mem_info_64(Monitor *mon, CPUArchState *env)
1661 {
1662     int prot, last_prot;
1663     uint64_t l1, l2, l3, l4;
1664     uint64_t pml4e, pdpe, pde, pte;
1665     uint64_t pml4_addr, pdp_addr, pd_addr, pt_addr, start, end;
1666
1667     pml4_addr = env->cr[3] & 0x3fffffffff000ULL;
1668     last_prot = 0;
1669     start = -1;
1670     for (l1 = 0; l1 < 512; l1++) {
1671         cpu_physical_memory_read(pml4_addr + l1 * 8, &pml4e, 8);
1672         pml4e = le64_to_cpu(pml4e);
1673         end = l1 << 39;
1674         if (pml4e & PG_PRESENT_MASK) {
1675             pdp_addr = pml4e & 0x3fffffffff000ULL;
1676             for (l2 = 0; l2 < 512; l2++) {
1677                 cpu_physical_memory_read(pdp_addr + l2 * 8, &pdpe, 8);
1678                 pdpe = le64_to_cpu(pdpe);
1679                 end = (l1 << 39) + (l2 << 30);
1680                 if (pdpe & PG_PRESENT_MASK) {
1681                     if (pdpe & PG_PSE_MASK) {
1682                         prot = pdpe & (PG_USER_MASK | PG_RW_MASK |
1683                                        PG_PRESENT_MASK);
1684                         prot &= pml4e;
1685                         mem_print(mon, &start, &last_prot, end, prot);
1686                     } else {
1687                         pd_addr = pdpe & 0x3fffffffff000ULL;
1688                         for (l3 = 0; l3 < 512; l3++) {
1689                             cpu_physical_memory_read(pd_addr + l3 * 8, &pde, 8);
1690                             pde = le64_to_cpu(pde);
1691                             end = (l1 << 39) + (l2 << 30) + (l3 << 21);
1692                             if (pde & PG_PRESENT_MASK) {
1693                                 if (pde & PG_PSE_MASK) {
1694                                     prot = pde & (PG_USER_MASK | PG_RW_MASK |
1695                                                   PG_PRESENT_MASK);
1696                                     prot &= pml4e & pdpe;
1697                                     mem_print(mon, &start, &last_prot, end, prot);
1698                                 } else {
1699                                     pt_addr = pde & 0x3fffffffff000ULL;
1700                                     for (l4 = 0; l4 < 512; l4++) {
1701                                         cpu_physical_memory_read(pt_addr
1702                                                                  + l4 * 8,
1703                                                                  &pte, 8);
1704                                         pte = le64_to_cpu(pte);
1705                                         end = (l1 << 39) + (l2 << 30) +
1706                                             (l3 << 21) + (l4 << 12);
1707                                         if (pte & PG_PRESENT_MASK) {
1708                                             prot = pte & (PG_USER_MASK | PG_RW_MASK |
1709                                                           PG_PRESENT_MASK);
1710                                             prot &= pml4e & pdpe & pde;
1711                                         } else {
1712                                             prot = 0;
1713                                         }
1714                                         mem_print(mon, &start, &last_prot, end, prot);
1715                                     }
1716                                 }
1717                             } else {
1718                                 prot = 0;
1719                                 mem_print(mon, &start, &last_prot, end, prot);
1720                             }
1721                         }
1722                     }
1723                 } else {
1724                     prot = 0;
1725                     mem_print(mon, &start, &last_prot, end, prot);
1726                 }
1727             }
1728         } else {
1729             prot = 0;
1730             mem_print(mon, &start, &last_prot, end, prot);
1731         }
1732     }
1733     /* Flush last range */
1734     mem_print(mon, &start, &last_prot, (hwaddr)1 << 48, 0);
1735 }
1736 #endif
1737
1738 static void mem_info(Monitor *mon, const QDict *qdict)
1739 {
1740     CPUArchState *env;
1741
1742     env = mon_get_cpu();
1743
1744     if (!(env->cr[0] & CR0_PG_MASK)) {
1745         monitor_printf(mon, "PG disabled\n");
1746         return;
1747     }
1748     if (env->cr[4] & CR4_PAE_MASK) {
1749 #ifdef TARGET_X86_64
1750         if (env->hflags & HF_LMA_MASK) {
1751             mem_info_64(mon, env);
1752         } else
1753 #endif
1754         {
1755             mem_info_pae32(mon, env);
1756         }
1757     } else {
1758         mem_info_32(mon, env);
1759     }
1760 }
1761 #endif
1762
1763 #if defined(TARGET_SH4)
1764
1765 static void print_tlb(Monitor *mon, int idx, tlb_t *tlb)
1766 {
1767     monitor_printf(mon, " tlb%i:\t"
1768                    "asid=%hhu vpn=%x\tppn=%x\tsz=%hhu size=%u\t"
1769                    "v=%hhu shared=%hhu cached=%hhu prot=%hhu "
1770                    "dirty=%hhu writethrough=%hhu\n",
1771                    idx,
1772                    tlb->asid, tlb->vpn, tlb->ppn, tlb->sz, tlb->size,
1773                    tlb->v, tlb->sh, tlb->c, tlb->pr,
1774                    tlb->d, tlb->wt);
1775 }
1776
1777 static void tlb_info(Monitor *mon, const QDict *qdict)
1778 {
1779     CPUArchState *env = mon_get_cpu();
1780     int i;
1781
1782     monitor_printf (mon, "ITLB:\n");
1783     for (i = 0 ; i < ITLB_SIZE ; i++)
1784         print_tlb (mon, i, &env->itlb[i]);
1785     monitor_printf (mon, "UTLB:\n");
1786     for (i = 0 ; i < UTLB_SIZE ; i++)
1787         print_tlb (mon, i, &env->utlb[i]);
1788 }
1789
1790 #endif
1791
1792 #if defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_XTENSA)
1793 static void tlb_info(Monitor *mon, const QDict *qdict)
1794 {
1795     CPUArchState *env1 = mon_get_cpu();
1796
1797     dump_mmu((FILE*)mon, (fprintf_function)monitor_printf, env1);
1798 }
1799 #endif
1800
1801 static void do_info_mtree(Monitor *mon, const QDict *qdict)
1802 {
1803     mtree_info((fprintf_function)monitor_printf, mon);
1804 }
1805
1806 static void do_info_numa(Monitor *mon, const QDict *qdict)
1807 {
1808     int i;
1809     CPUArchState *env;
1810     CPUState *cpu;
1811
1812     monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
1813     for (i = 0; i < nb_numa_nodes; i++) {
1814         monitor_printf(mon, "node %d cpus:", i);
1815         for (env = first_cpu; env != NULL; env = env->next_cpu) {
1816             cpu = ENV_GET_CPU(env);
1817             if (cpu->numa_node == i) {
1818                 monitor_printf(mon, " %d", cpu->cpu_index);
1819             }
1820         }
1821         monitor_printf(mon, "\n");
1822         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
1823             node_mem[i] >> 20);
1824     }
1825 }
1826
1827 #ifdef CONFIG_PROFILER
1828
1829 int64_t qemu_time;
1830 int64_t dev_time;
1831
1832 static void do_info_profile(Monitor *mon, const QDict *qdict)
1833 {
1834     int64_t total;
1835     total = qemu_time;
1836     if (total == 0)
1837         total = 1;
1838     monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1839                    dev_time, dev_time / (double)get_ticks_per_sec());
1840     monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1841                    qemu_time, qemu_time / (double)get_ticks_per_sec());
1842     qemu_time = 0;
1843     dev_time = 0;
1844 }
1845 #else
1846 static void do_info_profile(Monitor *mon, const QDict *qdict)
1847 {
1848     monitor_printf(mon, "Internal profiler not compiled\n");
1849 }
1850 #endif
1851
1852 /* Capture support */
1853 static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
1854
1855 static void do_info_capture(Monitor *mon, const QDict *qdict)
1856 {
1857     int i;
1858     CaptureState *s;
1859
1860     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1861         monitor_printf(mon, "[%d]: ", i);
1862         s->ops.info (s->opaque);
1863     }
1864 }
1865
1866 static void do_stop_capture(Monitor *mon, const QDict *qdict)
1867 {
1868     int i;
1869     int n = qdict_get_int(qdict, "n");
1870     CaptureState *s;
1871
1872     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1873         if (i == n) {
1874             s->ops.destroy (s->opaque);
1875             QLIST_REMOVE (s, entries);
1876             g_free (s);
1877             return;
1878         }
1879     }
1880 }
1881
1882 static void do_wav_capture(Monitor *mon, const QDict *qdict)
1883 {
1884     const char *path = qdict_get_str(qdict, "path");
1885     int has_freq = qdict_haskey(qdict, "freq");
1886     int freq = qdict_get_try_int(qdict, "freq", -1);
1887     int has_bits = qdict_haskey(qdict, "bits");
1888     int bits = qdict_get_try_int(qdict, "bits", -1);
1889     int has_channels = qdict_haskey(qdict, "nchannels");
1890     int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
1891     CaptureState *s;
1892
1893     s = g_malloc0 (sizeof (*s));
1894
1895     freq = has_freq ? freq : 44100;
1896     bits = has_bits ? bits : 16;
1897     nchannels = has_channels ? nchannels : 2;
1898
1899     if (wav_start_capture (s, path, freq, bits, nchannels)) {
1900         monitor_printf(mon, "Failed to add wave capture\n");
1901         g_free (s);
1902         return;
1903     }
1904     QLIST_INSERT_HEAD (&capture_head, s, entries);
1905 }
1906
1907 static qemu_acl *find_acl(Monitor *mon, const char *name)
1908 {
1909     qemu_acl *acl = qemu_acl_find(name);
1910
1911     if (!acl) {
1912         monitor_printf(mon, "acl: unknown list '%s'\n", name);
1913     }
1914     return acl;
1915 }
1916
1917 static void do_acl_show(Monitor *mon, const QDict *qdict)
1918 {
1919     const char *aclname = qdict_get_str(qdict, "aclname");
1920     qemu_acl *acl = find_acl(mon, aclname);
1921     qemu_acl_entry *entry;
1922     int i = 0;
1923
1924     if (acl) {
1925         monitor_printf(mon, "policy: %s\n",
1926                        acl->defaultDeny ? "deny" : "allow");
1927         QTAILQ_FOREACH(entry, &acl->entries, next) {
1928             i++;
1929             monitor_printf(mon, "%d: %s %s\n", i,
1930                            entry->deny ? "deny" : "allow", entry->match);
1931         }
1932     }
1933 }
1934
1935 static void do_acl_reset(Monitor *mon, const QDict *qdict)
1936 {
1937     const char *aclname = qdict_get_str(qdict, "aclname");
1938     qemu_acl *acl = find_acl(mon, aclname);
1939
1940     if (acl) {
1941         qemu_acl_reset(acl);
1942         monitor_printf(mon, "acl: removed all rules\n");
1943     }
1944 }
1945
1946 static void do_acl_policy(Monitor *mon, const QDict *qdict)
1947 {
1948     const char *aclname = qdict_get_str(qdict, "aclname");
1949     const char *policy = qdict_get_str(qdict, "policy");
1950     qemu_acl *acl = find_acl(mon, aclname);
1951
1952     if (acl) {
1953         if (strcmp(policy, "allow") == 0) {
1954             acl->defaultDeny = 0;
1955             monitor_printf(mon, "acl: policy set to 'allow'\n");
1956         } else if (strcmp(policy, "deny") == 0) {
1957             acl->defaultDeny = 1;
1958             monitor_printf(mon, "acl: policy set to 'deny'\n");
1959         } else {
1960             monitor_printf(mon, "acl: unknown policy '%s', "
1961                            "expected 'deny' or 'allow'\n", policy);
1962         }
1963     }
1964 }
1965
1966 static void do_acl_add(Monitor *mon, const QDict *qdict)
1967 {
1968     const char *aclname = qdict_get_str(qdict, "aclname");
1969     const char *match = qdict_get_str(qdict, "match");
1970     const char *policy = qdict_get_str(qdict, "policy");
1971     int has_index = qdict_haskey(qdict, "index");
1972     int index = qdict_get_try_int(qdict, "index", -1);
1973     qemu_acl *acl = find_acl(mon, aclname);
1974     int deny, ret;
1975
1976     if (acl) {
1977         if (strcmp(policy, "allow") == 0) {
1978             deny = 0;
1979         } else if (strcmp(policy, "deny") == 0) {
1980             deny = 1;
1981         } else {
1982             monitor_printf(mon, "acl: unknown policy '%s', "
1983                            "expected 'deny' or 'allow'\n", policy);
1984             return;
1985         }
1986         if (has_index)
1987             ret = qemu_acl_insert(acl, deny, match, index);
1988         else
1989             ret = qemu_acl_append(acl, deny, match);
1990         if (ret < 0)
1991             monitor_printf(mon, "acl: unable to add acl entry\n");
1992         else
1993             monitor_printf(mon, "acl: added rule at position %d\n", ret);
1994     }
1995 }
1996
1997 static void do_acl_remove(Monitor *mon, const QDict *qdict)
1998 {
1999     const char *aclname = qdict_get_str(qdict, "aclname");
2000     const char *match = qdict_get_str(qdict, "match");
2001     qemu_acl *acl = find_acl(mon, aclname);
2002     int ret;
2003
2004     if (acl) {
2005         ret = qemu_acl_remove(acl, match);
2006         if (ret < 0)
2007             monitor_printf(mon, "acl: no matching acl entry\n");
2008         else
2009             monitor_printf(mon, "acl: removed rule at position %d\n", ret);
2010     }
2011 }
2012
2013 #if defined(TARGET_I386)
2014 static void do_inject_mce(Monitor *mon, const QDict *qdict)
2015 {
2016     X86CPU *cpu;
2017     CPUX86State *cenv;
2018     CPUState *cs;
2019     int cpu_index = qdict_get_int(qdict, "cpu_index");
2020     int bank = qdict_get_int(qdict, "bank");
2021     uint64_t status = qdict_get_int(qdict, "status");
2022     uint64_t mcg_status = qdict_get_int(qdict, "mcg_status");
2023     uint64_t addr = qdict_get_int(qdict, "addr");
2024     uint64_t misc = qdict_get_int(qdict, "misc");
2025     int flags = MCE_INJECT_UNCOND_AO;
2026
2027     if (qdict_get_try_bool(qdict, "broadcast", 0)) {
2028         flags |= MCE_INJECT_BROADCAST;
2029     }
2030     for (cenv = first_cpu; cenv != NULL; cenv = cenv->next_cpu) {
2031         cpu = x86_env_get_cpu(cenv);
2032         cs = CPU(cpu);
2033         if (cs->cpu_index == cpu_index) {
2034             cpu_x86_inject_mce(mon, cpu, bank, status, mcg_status, addr, misc,
2035                                flags);
2036             break;
2037         }
2038     }
2039 }
2040 #endif
2041
2042 void qmp_getfd(const char *fdname, Error **errp)
2043 {
2044     mon_fd_t *monfd;
2045     int fd;
2046
2047     fd = qemu_chr_fe_get_msgfd(cur_mon->chr);
2048     if (fd == -1) {
2049         error_set(errp, QERR_FD_NOT_SUPPLIED);
2050         return;
2051     }
2052
2053     if (qemu_isdigit(fdname[0])) {
2054         error_set(errp, QERR_INVALID_PARAMETER_VALUE, "fdname",
2055                   "a name not starting with a digit");
2056         return;
2057     }
2058
2059     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2060         if (strcmp(monfd->name, fdname) != 0) {
2061             continue;
2062         }
2063
2064         close(monfd->fd);
2065         monfd->fd = fd;
2066         return;
2067     }
2068
2069     monfd = g_malloc0(sizeof(mon_fd_t));
2070     monfd->name = g_strdup(fdname);
2071     monfd->fd = fd;
2072
2073     QLIST_INSERT_HEAD(&cur_mon->fds, monfd, next);
2074 }
2075
2076 void qmp_closefd(const char *fdname, Error **errp)
2077 {
2078     mon_fd_t *monfd;
2079
2080     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2081         if (strcmp(monfd->name, fdname) != 0) {
2082             continue;
2083         }
2084
2085         QLIST_REMOVE(monfd, next);
2086         close(monfd->fd);
2087         g_free(monfd->name);
2088         g_free(monfd);
2089         return;
2090     }
2091
2092     error_set(errp, QERR_FD_NOT_FOUND, fdname);
2093 }
2094
2095 static void do_loadvm(Monitor *mon, const QDict *qdict)
2096 {
2097     int saved_vm_running  = runstate_is_running();
2098     const char *name = qdict_get_str(qdict, "name");
2099
2100     vm_stop(RUN_STATE_RESTORE_VM);
2101
2102     if (load_vmstate(name) == 0 && saved_vm_running) {
2103         vm_start();
2104     }
2105 }
2106
2107 int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
2108 {
2109     mon_fd_t *monfd;
2110
2111     QLIST_FOREACH(monfd, &mon->fds, next) {
2112         int fd;
2113
2114         if (strcmp(monfd->name, fdname) != 0) {
2115             continue;
2116         }
2117
2118         fd = monfd->fd;
2119
2120         /* caller takes ownership of fd */
2121         QLIST_REMOVE(monfd, next);
2122         g_free(monfd->name);
2123         g_free(monfd);
2124
2125         return fd;
2126     }
2127
2128     error_setg(errp, "File descriptor named '%s' has not been found", fdname);
2129     return -1;
2130 }
2131
2132 static void monitor_fdset_cleanup(MonFdset *mon_fdset)
2133 {
2134     MonFdsetFd *mon_fdset_fd;
2135     MonFdsetFd *mon_fdset_fd_next;
2136
2137     QLIST_FOREACH_SAFE(mon_fdset_fd, &mon_fdset->fds, next, mon_fdset_fd_next) {
2138         if ((mon_fdset_fd->removed ||
2139                 (QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
2140                 runstate_is_running()) {
2141             close(mon_fdset_fd->fd);
2142             g_free(mon_fdset_fd->opaque);
2143             QLIST_REMOVE(mon_fdset_fd, next);
2144             g_free(mon_fdset_fd);
2145         }
2146     }
2147
2148     if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
2149         QLIST_REMOVE(mon_fdset, next);
2150         g_free(mon_fdset);
2151     }
2152 }
2153
2154 static void monitor_fdsets_cleanup(void)
2155 {
2156     MonFdset *mon_fdset;
2157     MonFdset *mon_fdset_next;
2158
2159     QLIST_FOREACH_SAFE(mon_fdset, &mon_fdsets, next, mon_fdset_next) {
2160         monitor_fdset_cleanup(mon_fdset);
2161     }
2162 }
2163
2164 AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
2165                       const char *opaque, Error **errp)
2166 {
2167     int fd;
2168     Monitor *mon = cur_mon;
2169     AddfdInfo *fdinfo;
2170
2171     fd = qemu_chr_fe_get_msgfd(mon->chr);
2172     if (fd == -1) {
2173         error_set(errp, QERR_FD_NOT_SUPPLIED);
2174         goto error;
2175     }
2176
2177     fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
2178                                   has_opaque, opaque, errp);
2179     if (fdinfo) {
2180         return fdinfo;
2181     }
2182
2183 error:
2184     if (fd != -1) {
2185         close(fd);
2186     }
2187     return NULL;
2188 }
2189
2190 void qmp_remove_fd(int64_t fdset_id, bool has_fd, int64_t fd, Error **errp)
2191 {
2192     MonFdset *mon_fdset;
2193     MonFdsetFd *mon_fdset_fd;
2194     char fd_str[60];
2195
2196     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2197         if (mon_fdset->id != fdset_id) {
2198             continue;
2199         }
2200         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2201             if (has_fd) {
2202                 if (mon_fdset_fd->fd != fd) {
2203                     continue;
2204                 }
2205                 mon_fdset_fd->removed = true;
2206                 break;
2207             } else {
2208                 mon_fdset_fd->removed = true;
2209             }
2210         }
2211         if (has_fd && !mon_fdset_fd) {
2212             goto error;
2213         }
2214         monitor_fdset_cleanup(mon_fdset);
2215         return;
2216     }
2217
2218 error:
2219     if (has_fd) {
2220         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64 ", fd:%" PRId64,
2221                  fdset_id, fd);
2222     } else {
2223         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64, fdset_id);
2224     }
2225     error_set(errp, QERR_FD_NOT_FOUND, fd_str);
2226 }
2227
2228 FdsetInfoList *qmp_query_fdsets(Error **errp)
2229 {
2230     MonFdset *mon_fdset;
2231     MonFdsetFd *mon_fdset_fd;
2232     FdsetInfoList *fdset_list = NULL;
2233
2234     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2235         FdsetInfoList *fdset_info = g_malloc0(sizeof(*fdset_info));
2236         FdsetFdInfoList *fdsetfd_list = NULL;
2237
2238         fdset_info->value = g_malloc0(sizeof(*fdset_info->value));
2239         fdset_info->value->fdset_id = mon_fdset->id;
2240
2241         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2242             FdsetFdInfoList *fdsetfd_info;
2243
2244             fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
2245             fdsetfd_info->value = g_malloc0(sizeof(*fdsetfd_info->value));
2246             fdsetfd_info->value->fd = mon_fdset_fd->fd;
2247             if (mon_fdset_fd->opaque) {
2248                 fdsetfd_info->value->has_opaque = true;
2249                 fdsetfd_info->value->opaque = g_strdup(mon_fdset_fd->opaque);
2250             } else {
2251                 fdsetfd_info->value->has_opaque = false;
2252             }
2253
2254             fdsetfd_info->next = fdsetfd_list;
2255             fdsetfd_list = fdsetfd_info;
2256         }
2257
2258         fdset_info->value->fds = fdsetfd_list;
2259
2260         fdset_info->next = fdset_list;
2261         fdset_list = fdset_info;
2262     }
2263
2264     return fdset_list;
2265 }
2266
2267 AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
2268                                 bool has_opaque, const char *opaque,
2269                                 Error **errp)
2270 {
2271     MonFdset *mon_fdset = NULL;
2272     MonFdsetFd *mon_fdset_fd;
2273     AddfdInfo *fdinfo;
2274
2275     if (has_fdset_id) {
2276         QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2277             /* Break if match found or match impossible due to ordering by ID */
2278             if (fdset_id <= mon_fdset->id) {
2279                 if (fdset_id < mon_fdset->id) {
2280                     mon_fdset = NULL;
2281                 }
2282                 break;
2283             }
2284         }
2285     }
2286
2287     if (mon_fdset == NULL) {
2288         int64_t fdset_id_prev = -1;
2289         MonFdset *mon_fdset_cur = QLIST_FIRST(&mon_fdsets);
2290
2291         if (has_fdset_id) {
2292             if (fdset_id < 0) {
2293                 error_set(errp, QERR_INVALID_PARAMETER_VALUE, "fdset-id",
2294                           "a non-negative value");
2295                 return NULL;
2296             }
2297             /* Use specified fdset ID */
2298             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2299                 mon_fdset_cur = mon_fdset;
2300                 if (fdset_id < mon_fdset_cur->id) {
2301                     break;
2302                 }
2303             }
2304         } else {
2305             /* Use first available fdset ID */
2306             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2307                 mon_fdset_cur = mon_fdset;
2308                 if (fdset_id_prev == mon_fdset_cur->id - 1) {
2309                     fdset_id_prev = mon_fdset_cur->id;
2310                     continue;
2311                 }
2312                 break;
2313             }
2314         }
2315
2316         mon_fdset = g_malloc0(sizeof(*mon_fdset));
2317         if (has_fdset_id) {
2318             mon_fdset->id = fdset_id;
2319         } else {
2320             mon_fdset->id = fdset_id_prev + 1;
2321         }
2322
2323         /* The fdset list is ordered by fdset ID */
2324         if (!mon_fdset_cur) {
2325             QLIST_INSERT_HEAD(&mon_fdsets, mon_fdset, next);
2326         } else if (mon_fdset->id < mon_fdset_cur->id) {
2327             QLIST_INSERT_BEFORE(mon_fdset_cur, mon_fdset, next);
2328         } else {
2329             QLIST_INSERT_AFTER(mon_fdset_cur, mon_fdset, next);
2330         }
2331     }
2332
2333     mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
2334     mon_fdset_fd->fd = fd;
2335     mon_fdset_fd->removed = false;
2336     if (has_opaque) {
2337         mon_fdset_fd->opaque = g_strdup(opaque);
2338     }
2339     QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
2340
2341     fdinfo = g_malloc0(sizeof(*fdinfo));
2342     fdinfo->fdset_id = mon_fdset->id;
2343     fdinfo->fd = mon_fdset_fd->fd;
2344
2345     return fdinfo;
2346 }
2347
2348 int monitor_fdset_get_fd(int64_t fdset_id, int flags)
2349 {
2350 #ifndef _WIN32
2351     MonFdset *mon_fdset;
2352     MonFdsetFd *mon_fdset_fd;
2353     int mon_fd_flags;
2354
2355     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2356         if (mon_fdset->id != fdset_id) {
2357             continue;
2358         }
2359         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2360             mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
2361             if (mon_fd_flags == -1) {
2362                 return -1;
2363             }
2364
2365             if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) {
2366                 return mon_fdset_fd->fd;
2367             }
2368         }
2369         errno = EACCES;
2370         return -1;
2371     }
2372 #endif
2373
2374     errno = ENOENT;
2375     return -1;
2376 }
2377
2378 int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd)
2379 {
2380     MonFdset *mon_fdset;
2381     MonFdsetFd *mon_fdset_fd_dup;
2382
2383     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2384         if (mon_fdset->id != fdset_id) {
2385             continue;
2386         }
2387         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2388             if (mon_fdset_fd_dup->fd == dup_fd) {
2389                 return -1;
2390             }
2391         }
2392         mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup));
2393         mon_fdset_fd_dup->fd = dup_fd;
2394         QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next);
2395         return 0;
2396     }
2397     return -1;
2398 }
2399
2400 static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
2401 {
2402     MonFdset *mon_fdset;
2403     MonFdsetFd *mon_fdset_fd_dup;
2404
2405     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2406         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2407             if (mon_fdset_fd_dup->fd == dup_fd) {
2408                 if (remove) {
2409                     QLIST_REMOVE(mon_fdset_fd_dup, next);
2410                     if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
2411                         monitor_fdset_cleanup(mon_fdset);
2412                     }
2413                 }
2414                 return mon_fdset->id;
2415             }
2416         }
2417     }
2418     return -1;
2419 }
2420
2421 int monitor_fdset_dup_fd_find(int dup_fd)
2422 {
2423     return monitor_fdset_dup_fd_find_remove(dup_fd, false);
2424 }
2425
2426 int monitor_fdset_dup_fd_remove(int dup_fd)
2427 {
2428     return monitor_fdset_dup_fd_find_remove(dup_fd, true);
2429 }
2430
2431 int monitor_handle_fd_param(Monitor *mon, const char *fdname)
2432 {
2433     int fd;
2434     Error *local_err = NULL;
2435
2436     if (!qemu_isdigit(fdname[0]) && mon) {
2437
2438         fd = monitor_get_fd(mon, fdname, &local_err);
2439         if (fd == -1) {
2440             qerror_report_err(local_err);
2441             error_free(local_err);
2442             return -1;
2443         }
2444     } else {
2445         fd = qemu_parse_fd(fdname);
2446     }
2447
2448     return fd;
2449 }
2450
2451 /* Please update hmp-commands.hx when adding or changing commands */
2452 static mon_cmd_t info_cmds[] = {
2453     {
2454         .name       = "version",
2455         .args_type  = "",
2456         .params     = "",
2457         .help       = "show the version of QEMU",
2458         .mhandler.cmd = hmp_info_version,
2459     },
2460     {
2461         .name       = "network",
2462         .args_type  = "",
2463         .params     = "",
2464         .help       = "show the network state",
2465         .mhandler.cmd = do_info_network,
2466     },
2467     {
2468         .name       = "chardev",
2469         .args_type  = "",
2470         .params     = "",
2471         .help       = "show the character devices",
2472         .mhandler.cmd = hmp_info_chardev,
2473     },
2474     {
2475         .name       = "block",
2476         .args_type  = "",
2477         .params     = "",
2478         .help       = "show the block devices",
2479         .mhandler.cmd = hmp_info_block,
2480     },
2481     {
2482         .name       = "blockstats",
2483         .args_type  = "",
2484         .params     = "",
2485         .help       = "show block device statistics",
2486         .mhandler.cmd = hmp_info_blockstats,
2487     },
2488     {
2489         .name       = "block-jobs",
2490         .args_type  = "",
2491         .params     = "",
2492         .help       = "show progress of ongoing block device operations",
2493         .mhandler.cmd = hmp_info_block_jobs,
2494     },
2495     {
2496         .name       = "registers",
2497         .args_type  = "",
2498         .params     = "",
2499         .help       = "show the cpu registers",
2500         .mhandler.cmd = do_info_registers,
2501     },
2502     {
2503         .name       = "cpus",
2504         .args_type  = "",
2505         .params     = "",
2506         .help       = "show infos for each CPU",
2507         .mhandler.cmd = hmp_info_cpus,
2508     },
2509     {
2510         .name       = "history",
2511         .args_type  = "",
2512         .params     = "",
2513         .help       = "show the command line history",
2514         .mhandler.cmd = do_info_history,
2515     },
2516 #if defined(TARGET_I386) || defined(TARGET_PPC) || defined(TARGET_MIPS) || \
2517     defined(TARGET_LM32) || (defined(TARGET_SPARC) && !defined(TARGET_SPARC64))
2518     {
2519         .name       = "irq",
2520         .args_type  = "",
2521         .params     = "",
2522         .help       = "show the interrupts statistics (if available)",
2523 #ifdef TARGET_SPARC
2524         .mhandler.cmd = sun4m_irq_info,
2525 #elif defined(TARGET_LM32)
2526         .mhandler.cmd = lm32_irq_info,
2527 #else
2528         .mhandler.cmd = irq_info,
2529 #endif
2530     },
2531     {
2532         .name       = "pic",
2533         .args_type  = "",
2534         .params     = "",
2535         .help       = "show i8259 (PIC) state",
2536 #ifdef TARGET_SPARC
2537         .mhandler.cmd = sun4m_pic_info,
2538 #elif defined(TARGET_LM32)
2539         .mhandler.cmd = lm32_do_pic_info,
2540 #else
2541         .mhandler.cmd = pic_info,
2542 #endif
2543     },
2544 #endif
2545     {
2546         .name       = "pci",
2547         .args_type  = "",
2548         .params     = "",
2549         .help       = "show PCI info",
2550         .mhandler.cmd = hmp_info_pci,
2551     },
2552 #if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
2553     defined(TARGET_PPC) || defined(TARGET_XTENSA)
2554     {
2555         .name       = "tlb",
2556         .args_type  = "",
2557         .params     = "",
2558         .help       = "show virtual to physical memory mappings",
2559         .mhandler.cmd = tlb_info,
2560     },
2561 #endif
2562 #if defined(TARGET_I386)
2563     {
2564         .name       = "mem",
2565         .args_type  = "",
2566         .params     = "",
2567         .help       = "show the active virtual memory mappings",
2568         .mhandler.cmd = mem_info,
2569     },
2570 #endif
2571     {
2572         .name       = "mtree",
2573         .args_type  = "",
2574         .params     = "",
2575         .help       = "show memory tree",
2576         .mhandler.cmd = do_info_mtree,
2577     },
2578     {
2579         .name       = "jit",
2580         .args_type  = "",
2581         .params     = "",
2582         .help       = "show dynamic compiler info",
2583         .mhandler.cmd = do_info_jit,
2584     },
2585     {
2586         .name       = "kvm",
2587         .args_type  = "",
2588         .params     = "",
2589         .help       = "show KVM information",
2590         .mhandler.cmd = hmp_info_kvm,
2591     },
2592     {
2593         .name       = "numa",
2594         .args_type  = "",
2595         .params     = "",
2596         .help       = "show NUMA information",
2597         .mhandler.cmd = do_info_numa,
2598     },
2599     {
2600         .name       = "usb",
2601         .args_type  = "",
2602         .params     = "",
2603         .help       = "show guest USB devices",
2604         .mhandler.cmd = usb_info,
2605     },
2606     {
2607         .name       = "usbhost",
2608         .args_type  = "",
2609         .params     = "",
2610         .help       = "show host USB devices",
2611         .mhandler.cmd = usb_host_info,
2612     },
2613     {
2614         .name       = "profile",
2615         .args_type  = "",
2616         .params     = "",
2617         .help       = "show profiling information",
2618         .mhandler.cmd = do_info_profile,
2619     },
2620     {
2621         .name       = "capture",
2622         .args_type  = "",
2623         .params     = "",
2624         .help       = "show capture information",
2625         .mhandler.cmd = do_info_capture,
2626     },
2627     {
2628         .name       = "snapshots",
2629         .args_type  = "",
2630         .params     = "",
2631         .help       = "show the currently saved VM snapshots",
2632         .mhandler.cmd = do_info_snapshots,
2633     },
2634     {
2635         .name       = "status",
2636         .args_type  = "",
2637         .params     = "",
2638         .help       = "show the current VM status (running|paused)",
2639         .mhandler.cmd = hmp_info_status,
2640     },
2641     {
2642         .name       = "pcmcia",
2643         .args_type  = "",
2644         .params     = "",
2645         .help       = "show guest PCMCIA status",
2646         .mhandler.cmd = pcmcia_info,
2647     },
2648     {
2649         .name       = "mice",
2650         .args_type  = "",
2651         .params     = "",
2652         .help       = "show which guest mouse is receiving events",
2653         .mhandler.cmd = hmp_info_mice,
2654     },
2655     {
2656         .name       = "vnc",
2657         .args_type  = "",
2658         .params     = "",
2659         .help       = "show the vnc server status",
2660         .mhandler.cmd = hmp_info_vnc,
2661     },
2662 #if defined(CONFIG_SPICE)
2663     {
2664         .name       = "spice",
2665         .args_type  = "",
2666         .params     = "",
2667         .help       = "show the spice server status",
2668         .mhandler.cmd = hmp_info_spice,
2669     },
2670 #endif
2671     {
2672         .name       = "name",
2673         .args_type  = "",
2674         .params     = "",
2675         .help       = "show the current VM name",
2676         .mhandler.cmd = hmp_info_name,
2677     },
2678     {
2679         .name       = "uuid",
2680         .args_type  = "",
2681         .params     = "",
2682         .help       = "show the current VM UUID",
2683         .mhandler.cmd = hmp_info_uuid,
2684     },
2685 #if defined(TARGET_PPC)
2686     {
2687         .name       = "cpustats",
2688         .args_type  = "",
2689         .params     = "",
2690         .help       = "show CPU statistics",
2691         .mhandler.cmd = do_info_cpu_stats,
2692     },
2693 #endif
2694 #if defined(CONFIG_SLIRP)
2695     {
2696         .name       = "usernet",
2697         .args_type  = "",
2698         .params     = "",
2699         .help       = "show user network stack connection states",
2700         .mhandler.cmd = do_info_usernet,
2701     },
2702 #endif
2703     {
2704         .name       = "migrate",
2705         .args_type  = "",
2706         .params     = "",
2707         .help       = "show migration status",
2708         .mhandler.cmd = hmp_info_migrate,
2709     },
2710     {
2711         .name       = "migrate_capabilities",
2712         .args_type  = "",
2713         .params     = "",
2714         .help       = "show current migration capabilities",
2715         .mhandler.cmd = hmp_info_migrate_capabilities,
2716     },
2717     {
2718         .name       = "migrate_cache_size",
2719         .args_type  = "",
2720         .params     = "",
2721         .help       = "show current migration xbzrle cache size",
2722         .mhandler.cmd = hmp_info_migrate_cache_size,
2723     },
2724     {
2725         .name       = "balloon",
2726         .args_type  = "",
2727         .params     = "",
2728         .help       = "show balloon information",
2729         .mhandler.cmd = hmp_info_balloon,
2730     },
2731     {
2732         .name       = "qtree",
2733         .args_type  = "",
2734         .params     = "",
2735         .help       = "show device tree",
2736         .mhandler.cmd = do_info_qtree,
2737     },
2738     {
2739         .name       = "qdm",
2740         .args_type  = "",
2741         .params     = "",
2742         .help       = "show qdev device model list",
2743         .mhandler.cmd = do_info_qdm,
2744     },
2745     {
2746         .name       = "roms",
2747         .args_type  = "",
2748         .params     = "",
2749         .help       = "show roms",
2750         .mhandler.cmd = do_info_roms,
2751     },
2752     {
2753         .name       = "trace-events",
2754         .args_type  = "",
2755         .params     = "",
2756         .help       = "show available trace-events & their state",
2757         .mhandler.cmd = do_trace_print_events,
2758     },
2759     {
2760         .name       = "tpm",
2761         .args_type  = "",
2762         .params     = "",
2763         .help       = "show the TPM device",
2764         .mhandler.cmd = hmp_info_tpm,
2765     },
2766     {
2767         .name       = NULL,
2768     },
2769 };
2770
2771 /* mon_cmds and info_cmds would be sorted at runtime */
2772 static mon_cmd_t mon_cmds[] = {
2773 #include "hmp-commands.h"
2774     { NULL, NULL, },
2775 };
2776
2777 static const mon_cmd_t qmp_cmds[] = {
2778 #include "qmp-commands-old.h"
2779     { /* NULL */ },
2780 };
2781
2782 /*******************************************************************/
2783
2784 static const char *pch;
2785 static sigjmp_buf expr_env;
2786
2787 #define MD_TLONG 0
2788 #define MD_I32   1
2789
2790 typedef struct MonitorDef {
2791     const char *name;
2792     int offset;
2793     target_long (*get_value)(const struct MonitorDef *md, int val);
2794     int type;
2795 } MonitorDef;
2796
2797 #if defined(TARGET_I386)
2798 static target_long monitor_get_pc (const struct MonitorDef *md, int val)
2799 {
2800     CPUArchState *env = mon_get_cpu();
2801     return env->eip + env->segs[R_CS].base;
2802 }
2803 #endif
2804
2805 #if defined(TARGET_PPC)
2806 static target_long monitor_get_ccr (const struct MonitorDef *md, int val)
2807 {
2808     CPUArchState *env = mon_get_cpu();
2809     unsigned int u;
2810     int i;
2811
2812     u = 0;
2813     for (i = 0; i < 8; i++)
2814         u |= env->crf[i] << (32 - (4 * i));
2815
2816     return u;
2817 }
2818
2819 static target_long monitor_get_msr (const struct MonitorDef *md, int val)
2820 {
2821     CPUArchState *env = mon_get_cpu();
2822     return env->msr;
2823 }
2824
2825 static target_long monitor_get_xer (const struct MonitorDef *md, int val)
2826 {
2827     CPUArchState *env = mon_get_cpu();
2828     return env->xer;
2829 }
2830
2831 static target_long monitor_get_decr (const struct MonitorDef *md, int val)
2832 {
2833     CPUArchState *env = mon_get_cpu();
2834     return cpu_ppc_load_decr(env);
2835 }
2836
2837 static target_long monitor_get_tbu (const struct MonitorDef *md, int val)
2838 {
2839     CPUArchState *env = mon_get_cpu();
2840     return cpu_ppc_load_tbu(env);
2841 }
2842
2843 static target_long monitor_get_tbl (const struct MonitorDef *md, int val)
2844 {
2845     CPUArchState *env = mon_get_cpu();
2846     return cpu_ppc_load_tbl(env);
2847 }
2848 #endif
2849
2850 #if defined(TARGET_SPARC)
2851 #ifndef TARGET_SPARC64
2852 static target_long monitor_get_psr (const struct MonitorDef *md, int val)
2853 {
2854     CPUArchState *env = mon_get_cpu();
2855
2856     return cpu_get_psr(env);
2857 }
2858 #endif
2859
2860 static target_long monitor_get_reg(const struct MonitorDef *md, int val)
2861 {
2862     CPUArchState *env = mon_get_cpu();
2863     return env->regwptr[val];
2864 }
2865 #endif
2866
2867 static const MonitorDef monitor_defs[] = {
2868 #ifdef TARGET_I386
2869
2870 #define SEG(name, seg) \
2871     { name, offsetof(CPUX86State, segs[seg].selector), NULL, MD_I32 },\
2872     { name ".base", offsetof(CPUX86State, segs[seg].base) },\
2873     { name ".limit", offsetof(CPUX86State, segs[seg].limit), NULL, MD_I32 },
2874
2875     { "eax", offsetof(CPUX86State, regs[0]) },
2876     { "ecx", offsetof(CPUX86State, regs[1]) },
2877     { "edx", offsetof(CPUX86State, regs[2]) },
2878     { "ebx", offsetof(CPUX86State, regs[3]) },
2879     { "esp|sp", offsetof(CPUX86State, regs[4]) },
2880     { "ebp|fp", offsetof(CPUX86State, regs[5]) },
2881     { "esi", offsetof(CPUX86State, regs[6]) },
2882     { "edi", offsetof(CPUX86State, regs[7]) },
2883 #ifdef TARGET_X86_64
2884     { "r8", offsetof(CPUX86State, regs[8]) },
2885     { "r9", offsetof(CPUX86State, regs[9]) },
2886     { "r10", offsetof(CPUX86State, regs[10]) },
2887     { "r11", offsetof(CPUX86State, regs[11]) },
2888     { "r12", offsetof(CPUX86State, regs[12]) },
2889     { "r13", offsetof(CPUX86State, regs[13]) },
2890     { "r14", offsetof(CPUX86State, regs[14]) },
2891     { "r15", offsetof(CPUX86State, regs[15]) },
2892 #endif
2893     { "eflags", offsetof(CPUX86State, eflags) },
2894     { "eip", offsetof(CPUX86State, eip) },
2895     SEG("cs", R_CS)
2896     SEG("ds", R_DS)
2897     SEG("es", R_ES)
2898     SEG("ss", R_SS)
2899     SEG("fs", R_FS)
2900     SEG("gs", R_GS)
2901     { "pc", 0, monitor_get_pc, },
2902 #elif defined(TARGET_PPC)
2903     /* General purpose registers */
2904     { "r0", offsetof(CPUPPCState, gpr[0]) },
2905     { "r1", offsetof(CPUPPCState, gpr[1]) },
2906     { "r2", offsetof(CPUPPCState, gpr[2]) },
2907     { "r3", offsetof(CPUPPCState, gpr[3]) },
2908     { "r4", offsetof(CPUPPCState, gpr[4]) },
2909     { "r5", offsetof(CPUPPCState, gpr[5]) },
2910     { "r6", offsetof(CPUPPCState, gpr[6]) },
2911     { "r7", offsetof(CPUPPCState, gpr[7]) },
2912     { "r8", offsetof(CPUPPCState, gpr[8]) },
2913     { "r9", offsetof(CPUPPCState, gpr[9]) },
2914     { "r10", offsetof(CPUPPCState, gpr[10]) },
2915     { "r11", offsetof(CPUPPCState, gpr[11]) },
2916     { "r12", offsetof(CPUPPCState, gpr[12]) },
2917     { "r13", offsetof(CPUPPCState, gpr[13]) },
2918     { "r14", offsetof(CPUPPCState, gpr[14]) },
2919     { "r15", offsetof(CPUPPCState, gpr[15]) },
2920     { "r16", offsetof(CPUPPCState, gpr[16]) },
2921     { "r17", offsetof(CPUPPCState, gpr[17]) },
2922     { "r18", offsetof(CPUPPCState, gpr[18]) },
2923     { "r19", offsetof(CPUPPCState, gpr[19]) },
2924     { "r20", offsetof(CPUPPCState, gpr[20]) },
2925     { "r21", offsetof(CPUPPCState, gpr[21]) },
2926     { "r22", offsetof(CPUPPCState, gpr[22]) },
2927     { "r23", offsetof(CPUPPCState, gpr[23]) },
2928     { "r24", offsetof(CPUPPCState, gpr[24]) },
2929     { "r25", offsetof(CPUPPCState, gpr[25]) },
2930     { "r26", offsetof(CPUPPCState, gpr[26]) },
2931     { "r27", offsetof(CPUPPCState, gpr[27]) },
2932     { "r28", offsetof(CPUPPCState, gpr[28]) },
2933     { "r29", offsetof(CPUPPCState, gpr[29]) },
2934     { "r30", offsetof(CPUPPCState, gpr[30]) },
2935     { "r31", offsetof(CPUPPCState, gpr[31]) },
2936     /* Floating point registers */
2937     { "f0", offsetof(CPUPPCState, fpr[0]) },
2938     { "f1", offsetof(CPUPPCState, fpr[1]) },
2939     { "f2", offsetof(CPUPPCState, fpr[2]) },
2940     { "f3", offsetof(CPUPPCState, fpr[3]) },
2941     { "f4", offsetof(CPUPPCState, fpr[4]) },
2942     { "f5", offsetof(CPUPPCState, fpr[5]) },
2943     { "f6", offsetof(CPUPPCState, fpr[6]) },
2944     { "f7", offsetof(CPUPPCState, fpr[7]) },
2945     { "f8", offsetof(CPUPPCState, fpr[8]) },
2946     { "f9", offsetof(CPUPPCState, fpr[9]) },
2947     { "f10", offsetof(CPUPPCState, fpr[10]) },
2948     { "f11", offsetof(CPUPPCState, fpr[11]) },
2949     { "f12", offsetof(CPUPPCState, fpr[12]) },
2950     { "f13", offsetof(CPUPPCState, fpr[13]) },
2951     { "f14", offsetof(CPUPPCState, fpr[14]) },
2952     { "f15", offsetof(CPUPPCState, fpr[15]) },
2953     { "f16", offsetof(CPUPPCState, fpr[16]) },
2954     { "f17", offsetof(CPUPPCState, fpr[17]) },
2955     { "f18", offsetof(CPUPPCState, fpr[18]) },
2956     { "f19", offsetof(CPUPPCState, fpr[19]) },
2957     { "f20", offsetof(CPUPPCState, fpr[20]) },
2958     { "f21", offsetof(CPUPPCState, fpr[21]) },
2959     { "f22", offsetof(CPUPPCState, fpr[22]) },
2960     { "f23", offsetof(CPUPPCState, fpr[23]) },
2961     { "f24", offsetof(CPUPPCState, fpr[24]) },
2962     { "f25", offsetof(CPUPPCState, fpr[25]) },
2963     { "f26", offsetof(CPUPPCState, fpr[26]) },
2964     { "f27", offsetof(CPUPPCState, fpr[27]) },
2965     { "f28", offsetof(CPUPPCState, fpr[28]) },
2966     { "f29", offsetof(CPUPPCState, fpr[29]) },
2967     { "f30", offsetof(CPUPPCState, fpr[30]) },
2968     { "f31", offsetof(CPUPPCState, fpr[31]) },
2969     { "fpscr", offsetof(CPUPPCState, fpscr) },
2970     /* Next instruction pointer */
2971     { "nip|pc", offsetof(CPUPPCState, nip) },
2972     { "lr", offsetof(CPUPPCState, lr) },
2973     { "ctr", offsetof(CPUPPCState, ctr) },
2974     { "decr", 0, &monitor_get_decr, },
2975     { "ccr", 0, &monitor_get_ccr, },
2976     /* Machine state register */
2977     { "msr", 0, &monitor_get_msr, },
2978     { "xer", 0, &monitor_get_xer, },
2979     { "tbu", 0, &monitor_get_tbu, },
2980     { "tbl", 0, &monitor_get_tbl, },
2981     /* Segment registers */
2982     { "sdr1", offsetof(CPUPPCState, spr[SPR_SDR1]) },
2983     { "sr0", offsetof(CPUPPCState, sr[0]) },
2984     { "sr1", offsetof(CPUPPCState, sr[1]) },
2985     { "sr2", offsetof(CPUPPCState, sr[2]) },
2986     { "sr3", offsetof(CPUPPCState, sr[3]) },
2987     { "sr4", offsetof(CPUPPCState, sr[4]) },
2988     { "sr5", offsetof(CPUPPCState, sr[5]) },
2989     { "sr6", offsetof(CPUPPCState, sr[6]) },
2990     { "sr7", offsetof(CPUPPCState, sr[7]) },
2991     { "sr8", offsetof(CPUPPCState, sr[8]) },
2992     { "sr9", offsetof(CPUPPCState, sr[9]) },
2993     { "sr10", offsetof(CPUPPCState, sr[10]) },
2994     { "sr11", offsetof(CPUPPCState, sr[11]) },
2995     { "sr12", offsetof(CPUPPCState, sr[12]) },
2996     { "sr13", offsetof(CPUPPCState, sr[13]) },
2997     { "sr14", offsetof(CPUPPCState, sr[14]) },
2998     { "sr15", offsetof(CPUPPCState, sr[15]) },
2999     /* Too lazy to put BATs... */
3000     { "pvr", offsetof(CPUPPCState, spr[SPR_PVR]) },
3001
3002     { "srr0", offsetof(CPUPPCState, spr[SPR_SRR0]) },
3003     { "srr1", offsetof(CPUPPCState, spr[SPR_SRR1]) },
3004     { "sprg0", offsetof(CPUPPCState, spr[SPR_SPRG0]) },
3005     { "sprg1", offsetof(CPUPPCState, spr[SPR_SPRG1]) },
3006     { "sprg2", offsetof(CPUPPCState, spr[SPR_SPRG2]) },
3007     { "sprg3", offsetof(CPUPPCState, spr[SPR_SPRG3]) },
3008     { "sprg4", offsetof(CPUPPCState, spr[SPR_SPRG4]) },
3009     { "sprg5", offsetof(CPUPPCState, spr[SPR_SPRG5]) },
3010     { "sprg6", offsetof(CPUPPCState, spr[SPR_SPRG6]) },
3011     { "sprg7", offsetof(CPUPPCState, spr[SPR_SPRG7]) },
3012     { "pid", offsetof(CPUPPCState, spr[SPR_BOOKE_PID]) },
3013     { "csrr0", offsetof(CPUPPCState, spr[SPR_BOOKE_CSRR0]) },
3014     { "csrr1", offsetof(CPUPPCState, spr[SPR_BOOKE_CSRR1]) },
3015     { "esr", offsetof(CPUPPCState, spr[SPR_BOOKE_ESR]) },
3016     { "dear", offsetof(CPUPPCState, spr[SPR_BOOKE_DEAR]) },
3017     { "mcsr", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSR]) },
3018     { "tsr", offsetof(CPUPPCState, spr[SPR_BOOKE_TSR]) },
3019     { "tcr", offsetof(CPUPPCState, spr[SPR_BOOKE_TCR]) },
3020     { "vrsave", offsetof(CPUPPCState, spr[SPR_VRSAVE]) },
3021     { "pir", offsetof(CPUPPCState, spr[SPR_BOOKE_PIR]) },
3022     { "mcsrr0", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSRR0]) },
3023     { "mcsrr1", offsetof(CPUPPCState, spr[SPR_BOOKE_MCSRR1]) },
3024     { "decar", offsetof(CPUPPCState, spr[SPR_BOOKE_DECAR]) },
3025     { "ivpr", offsetof(CPUPPCState, spr[SPR_BOOKE_IVPR]) },
3026     { "epcr", offsetof(CPUPPCState, spr[SPR_BOOKE_EPCR]) },
3027     { "sprg8", offsetof(CPUPPCState, spr[SPR_BOOKE_SPRG8]) },
3028     { "ivor0", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR0]) },
3029     { "ivor1", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR1]) },
3030     { "ivor2", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR2]) },
3031     { "ivor3", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR3]) },
3032     { "ivor4", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR4]) },
3033     { "ivor5", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR5]) },
3034     { "ivor6", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR6]) },
3035     { "ivor7", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR7]) },
3036     { "ivor8", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR8]) },
3037     { "ivor9", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR9]) },
3038     { "ivor10", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR10]) },
3039     { "ivor11", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR11]) },
3040     { "ivor12", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR12]) },
3041     { "ivor13", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR13]) },
3042     { "ivor14", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR14]) },
3043     { "ivor15", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR15]) },
3044     { "ivor32", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR32]) },
3045     { "ivor33", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR33]) },
3046     { "ivor34", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR34]) },
3047     { "ivor35", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR35]) },
3048     { "ivor36", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR36]) },
3049     { "ivor37", offsetof(CPUPPCState, spr[SPR_BOOKE_IVOR37]) },
3050     { "mas0", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS0]) },
3051     { "mas1", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS1]) },
3052     { "mas2", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS2]) },
3053     { "mas3", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS3]) },
3054     { "mas4", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS4]) },
3055     { "mas6", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS6]) },
3056     { "mas7", offsetof(CPUPPCState, spr[SPR_BOOKE_MAS7]) },
3057     { "mmucfg", offsetof(CPUPPCState, spr[SPR_MMUCFG]) },
3058     { "tlb0cfg", offsetof(CPUPPCState, spr[SPR_BOOKE_TLB0CFG]) },
3059     { "tlb1cfg", offsetof(CPUPPCState, spr[SPR_BOOKE_TLB1CFG]) },
3060     { "epr", offsetof(CPUPPCState, spr[SPR_BOOKE_EPR]) },
3061     { "eplc", offsetof(CPUPPCState, spr[SPR_BOOKE_EPLC]) },
3062     { "epsc", offsetof(CPUPPCState, spr[SPR_BOOKE_EPSC]) },
3063     { "svr", offsetof(CPUPPCState, spr[SPR_E500_SVR]) },
3064     { "mcar", offsetof(CPUPPCState, spr[SPR_Exxx_MCAR]) },
3065     { "pid1", offsetof(CPUPPCState, spr[SPR_BOOKE_PID1]) },
3066     { "pid2", offsetof(CPUPPCState, spr[SPR_BOOKE_PID2]) },
3067     { "hid0", offsetof(CPUPPCState, spr[SPR_HID0]) },
3068
3069 #elif defined(TARGET_SPARC)
3070     { "g0", offsetof(CPUSPARCState, gregs[0]) },
3071     { "g1", offsetof(CPUSPARCState, gregs[1]) },
3072     { "g2", offsetof(CPUSPARCState, gregs[2]) },
3073     { "g3", offsetof(CPUSPARCState, gregs[3]) },
3074     { "g4", offsetof(CPUSPARCState, gregs[4]) },
3075     { "g5", offsetof(CPUSPARCState, gregs[5]) },
3076     { "g6", offsetof(CPUSPARCState, gregs[6]) },
3077     { "g7", offsetof(CPUSPARCState, gregs[7]) },
3078     { "o0", 0, monitor_get_reg },
3079     { "o1", 1, monitor_get_reg },
3080     { "o2", 2, monitor_get_reg },
3081     { "o3", 3, monitor_get_reg },
3082     { "o4", 4, monitor_get_reg },
3083     { "o5", 5, monitor_get_reg },
3084     { "o6", 6, monitor_get_reg },
3085     { "o7", 7, monitor_get_reg },
3086     { "l0", 8, monitor_get_reg },
3087     { "l1", 9, monitor_get_reg },
3088     { "l2", 10, monitor_get_reg },
3089     { "l3", 11, monitor_get_reg },
3090     { "l4", 12, monitor_get_reg },
3091     { "l5", 13, monitor_get_reg },
3092     { "l6", 14, monitor_get_reg },
3093     { "l7", 15, monitor_get_reg },
3094     { "i0", 16, monitor_get_reg },
3095     { "i1", 17, monitor_get_reg },
3096     { "i2", 18, monitor_get_reg },
3097     { "i3", 19, monitor_get_reg },
3098     { "i4", 20, monitor_get_reg },
3099     { "i5", 21, monitor_get_reg },
3100     { "i6", 22, monitor_get_reg },
3101     { "i7", 23, monitor_get_reg },
3102     { "pc", offsetof(CPUSPARCState, pc) },
3103     { "npc", offsetof(CPUSPARCState, npc) },
3104     { "y", offsetof(CPUSPARCState, y) },
3105 #ifndef TARGET_SPARC64
3106     { "psr", 0, &monitor_get_psr, },
3107     { "wim", offsetof(CPUSPARCState, wim) },
3108 #endif
3109     { "tbr", offsetof(CPUSPARCState, tbr) },
3110     { "fsr", offsetof(CPUSPARCState, fsr) },
3111     { "f0", offsetof(CPUSPARCState, fpr[0].l.upper) },
3112     { "f1", offsetof(CPUSPARCState, fpr[0].l.lower) },
3113     { "f2", offsetof(CPUSPARCState, fpr[1].l.upper) },
3114     { "f3", offsetof(CPUSPARCState, fpr[1].l.lower) },
3115     { "f4", offsetof(CPUSPARCState, fpr[2].l.upper) },
3116     { "f5", offsetof(CPUSPARCState, fpr[2].l.lower) },
3117     { "f6", offsetof(CPUSPARCState, fpr[3].l.upper) },
3118     { "f7", offsetof(CPUSPARCState, fpr[3].l.lower) },
3119     { "f8", offsetof(CPUSPARCState, fpr[4].l.upper) },
3120     { "f9", offsetof(CPUSPARCState, fpr[4].l.lower) },
3121     { "f10", offsetof(CPUSPARCState, fpr[5].l.upper) },
3122     { "f11", offsetof(CPUSPARCState, fpr[5].l.lower) },
3123     { "f12", offsetof(CPUSPARCState, fpr[6].l.upper) },
3124     { "f13", offsetof(CPUSPARCState, fpr[6].l.lower) },
3125     { "f14", offsetof(CPUSPARCState, fpr[7].l.upper) },
3126     { "f15", offsetof(CPUSPARCState, fpr[7].l.lower) },
3127     { "f16", offsetof(CPUSPARCState, fpr[8].l.upper) },
3128     { "f17", offsetof(CPUSPARCState, fpr[8].l.lower) },
3129     { "f18", offsetof(CPUSPARCState, fpr[9].l.upper) },
3130     { "f19", offsetof(CPUSPARCState, fpr[9].l.lower) },
3131     { "f20", offsetof(CPUSPARCState, fpr[10].l.upper) },
3132     { "f21", offsetof(CPUSPARCState, fpr[10].l.lower) },
3133     { "f22", offsetof(CPUSPARCState, fpr[11].l.upper) },
3134     { "f23", offsetof(CPUSPARCState, fpr[11].l.lower) },
3135     { "f24", offsetof(CPUSPARCState, fpr[12].l.upper) },
3136     { "f25", offsetof(CPUSPARCState, fpr[12].l.lower) },
3137     { "f26", offsetof(CPUSPARCState, fpr[13].l.upper) },
3138     { "f27", offsetof(CPUSPARCState, fpr[13].l.lower) },
3139     { "f28", offsetof(CPUSPARCState, fpr[14].l.upper) },
3140     { "f29", offsetof(CPUSPARCState, fpr[14].l.lower) },
3141     { "f30", offsetof(CPUSPARCState, fpr[15].l.upper) },
3142     { "f31", offsetof(CPUSPARCState, fpr[15].l.lower) },
3143 #ifdef TARGET_SPARC64
3144     { "f32", offsetof(CPUSPARCState, fpr[16]) },
3145     { "f34", offsetof(CPUSPARCState, fpr[17]) },
3146     { "f36", offsetof(CPUSPARCState, fpr[18]) },
3147     { "f38", offsetof(CPUSPARCState, fpr[19]) },
3148     { "f40", offsetof(CPUSPARCState, fpr[20]) },
3149     { "f42", offsetof(CPUSPARCState, fpr[21]) },
3150     { "f44", offsetof(CPUSPARCState, fpr[22]) },
3151     { "f46", offsetof(CPUSPARCState, fpr[23]) },
3152     { "f48", offsetof(CPUSPARCState, fpr[24]) },
3153     { "f50", offsetof(CPUSPARCState, fpr[25]) },
3154     { "f52", offsetof(CPUSPARCState, fpr[26]) },
3155     { "f54", offsetof(CPUSPARCState, fpr[27]) },
3156     { "f56", offsetof(CPUSPARCState, fpr[28]) },
3157     { "f58", offsetof(CPUSPARCState, fpr[29]) },
3158     { "f60", offsetof(CPUSPARCState, fpr[30]) },
3159     { "f62", offsetof(CPUSPARCState, fpr[31]) },
3160     { "asi", offsetof(CPUSPARCState, asi) },
3161     { "pstate", offsetof(CPUSPARCState, pstate) },
3162     { "cansave", offsetof(CPUSPARCState, cansave) },
3163     { "canrestore", offsetof(CPUSPARCState, canrestore) },
3164     { "otherwin", offsetof(CPUSPARCState, otherwin) },
3165     { "wstate", offsetof(CPUSPARCState, wstate) },
3166     { "cleanwin", offsetof(CPUSPARCState, cleanwin) },
3167     { "fprs", offsetof(CPUSPARCState, fprs) },
3168 #endif
3169 #endif
3170     { NULL },
3171 };
3172
3173 static void expr_error(Monitor *mon, const char *msg)
3174 {
3175     monitor_printf(mon, "%s\n", msg);
3176     siglongjmp(expr_env, 1);
3177 }
3178
3179 /* return 0 if OK, -1 if not found */
3180 static int get_monitor_def(target_long *pval, const char *name)
3181 {
3182     const MonitorDef *md;
3183     void *ptr;
3184
3185     for(md = monitor_defs; md->name != NULL; md++) {
3186         if (compare_cmd(name, md->name)) {
3187             if (md->get_value) {
3188                 *pval = md->get_value(md, md->offset);
3189             } else {
3190                 CPUArchState *env = mon_get_cpu();
3191                 ptr = (uint8_t *)env + md->offset;
3192                 switch(md->type) {
3193                 case MD_I32:
3194                     *pval = *(int32_t *)ptr;
3195                     break;
3196                 case MD_TLONG:
3197                     *pval = *(target_long *)ptr;
3198                     break;
3199                 default:
3200                     *pval = 0;
3201                     break;
3202                 }
3203             }
3204             return 0;
3205         }
3206     }
3207     return -1;
3208 }
3209
3210 static void next(void)
3211 {
3212     if (*pch != '\0') {
3213         pch++;
3214         while (qemu_isspace(*pch))
3215             pch++;
3216     }
3217 }
3218
3219 static int64_t expr_sum(Monitor *mon);
3220
3221 static int64_t expr_unary(Monitor *mon)
3222 {
3223     int64_t n;
3224     char *p;
3225     int ret;
3226
3227     switch(*pch) {
3228     case '+':
3229         next();
3230         n = expr_unary(mon);
3231         break;
3232     case '-':
3233         next();
3234         n = -expr_unary(mon);
3235         break;
3236     case '~':
3237         next();
3238         n = ~expr_unary(mon);
3239         break;
3240     case '(':
3241         next();
3242         n = expr_sum(mon);
3243         if (*pch != ')') {
3244             expr_error(mon, "')' expected");
3245         }
3246         next();
3247         break;
3248     case '\'':
3249         pch++;
3250         if (*pch == '\0')
3251             expr_error(mon, "character constant expected");
3252         n = *pch;
3253         pch++;
3254         if (*pch != '\'')
3255             expr_error(mon, "missing terminating \' character");
3256         next();
3257         break;
3258     case '$':
3259         {
3260             char buf[128], *q;
3261             target_long reg=0;
3262
3263             pch++;
3264             q = buf;
3265             while ((*pch >= 'a' && *pch <= 'z') ||
3266                    (*pch >= 'A' && *pch <= 'Z') ||
3267                    (*pch >= '0' && *pch <= '9') ||
3268                    *pch == '_' || *pch == '.') {
3269                 if ((q - buf) < sizeof(buf) - 1)
3270                     *q++ = *pch;
3271                 pch++;
3272             }
3273             while (qemu_isspace(*pch))
3274                 pch++;
3275             *q = 0;
3276             ret = get_monitor_def(&reg, buf);
3277             if (ret < 0)
3278                 expr_error(mon, "unknown register");
3279             n = reg;
3280         }
3281         break;
3282     case '\0':
3283         expr_error(mon, "unexpected end of expression");
3284         n = 0;
3285         break;
3286     default:
3287         errno = 0;
3288         n = strtoull(pch, &p, 0);
3289         if (errno == ERANGE) {
3290             expr_error(mon, "number too large");
3291         }
3292         if (pch == p) {
3293             expr_error(mon, "invalid char in expression");
3294         }
3295         pch = p;
3296         while (qemu_isspace(*pch))
3297             pch++;
3298         break;
3299     }
3300     return n;
3301 }
3302
3303
3304 static int64_t expr_prod(Monitor *mon)
3305 {
3306     int64_t val, val2;
3307     int op;
3308
3309     val = expr_unary(mon);
3310     for(;;) {
3311         op = *pch;
3312         if (op != '*' && op != '/' && op != '%')
3313             break;
3314         next();
3315         val2 = expr_unary(mon);
3316         switch(op) {
3317         default:
3318         case '*':
3319             val *= val2;
3320             break;
3321         case '/':
3322         case '%':
3323             if (val2 == 0)
3324                 expr_error(mon, "division by zero");
3325             if (op == '/')
3326                 val /= val2;
3327             else
3328                 val %= val2;
3329             break;
3330         }
3331     }
3332     return val;
3333 }
3334
3335 static int64_t expr_logic(Monitor *mon)
3336 {
3337     int64_t val, val2;
3338     int op;
3339
3340     val = expr_prod(mon);
3341     for(;;) {
3342         op = *pch;
3343         if (op != '&' && op != '|' && op != '^')
3344             break;
3345         next();
3346         val2 = expr_prod(mon);
3347         switch(op) {
3348         default:
3349         case '&':
3350             val &= val2;
3351             break;
3352         case '|':
3353             val |= val2;
3354             break;
3355         case '^':
3356             val ^= val2;
3357             break;
3358         }
3359     }
3360     return val;
3361 }
3362
3363 static int64_t expr_sum(Monitor *mon)
3364 {
3365     int64_t val, val2;
3366     int op;
3367
3368     val = expr_logic(mon);
3369     for(;;) {
3370         op = *pch;
3371         if (op != '+' && op != '-')
3372             break;
3373         next();
3374         val2 = expr_logic(mon);
3375         if (op == '+')
3376             val += val2;
3377         else
3378             val -= val2;
3379     }
3380     return val;
3381 }
3382
3383 static int get_expr(Monitor *mon, int64_t *pval, const char **pp)
3384 {
3385     pch = *pp;
3386     if (sigsetjmp(expr_env, 0)) {
3387         *pp = pch;
3388         return -1;
3389     }
3390     while (qemu_isspace(*pch))
3391         pch++;
3392     *pval = expr_sum(mon);
3393     *pp = pch;
3394     return 0;
3395 }
3396
3397 static int get_double(Monitor *mon, double *pval, const char **pp)
3398 {
3399     const char *p = *pp;
3400     char *tailp;
3401     double d;
3402
3403     d = strtod(p, &tailp);
3404     if (tailp == p) {
3405         monitor_printf(mon, "Number expected\n");
3406         return -1;
3407     }
3408     if (d != d || d - d != 0) {
3409         /* NaN or infinity */
3410         monitor_printf(mon, "Bad number\n");
3411         return -1;
3412     }
3413     *pval = d;
3414     *pp = tailp;
3415     return 0;
3416 }
3417
3418 static int get_str(char *buf, int buf_size, const char **pp)
3419 {
3420     const char *p;
3421     char *q;
3422     int c;
3423
3424     q = buf;
3425     p = *pp;
3426     while (qemu_isspace(*p))
3427         p++;
3428     if (*p == '\0') {
3429     fail:
3430         *q = '\0';
3431         *pp = p;
3432         return -1;
3433     }
3434     if (*p == '\"') {
3435         p++;
3436         while (*p != '\0' && *p != '\"') {
3437             if (*p == '\\') {
3438                 p++;
3439                 c = *p++;
3440                 switch(c) {
3441                 case 'n':
3442                     c = '\n';
3443                     break;
3444                 case 'r':
3445                     c = '\r';
3446                     break;
3447                 case '\\':
3448                 case '\'':
3449                 case '\"':
3450                     break;
3451                 default:
3452                     qemu_printf("unsupported escape code: '\\%c'\n", c);
3453                     goto fail;
3454                 }
3455                 if ((q - buf) < buf_size - 1) {
3456                     *q++ = c;
3457                 }
3458             } else {
3459                 if ((q - buf) < buf_size - 1) {
3460                     *q++ = *p;
3461                 }
3462                 p++;
3463             }
3464         }
3465         if (*p != '\"') {
3466             qemu_printf("unterminated string\n");
3467             goto fail;
3468         }
3469         p++;
3470     } else {
3471         while (*p != '\0' && !qemu_isspace(*p)) {
3472             if ((q - buf) < buf_size - 1) {
3473                 *q++ = *p;
3474             }
3475             p++;
3476         }
3477     }
3478     *q = '\0';
3479     *pp = p;
3480     return 0;
3481 }
3482
3483 /*
3484  * Store the command-name in cmdname, and return a pointer to
3485  * the remaining of the command string.
3486  */
3487 static const char *get_command_name(const char *cmdline,
3488                                     char *cmdname, size_t nlen)
3489 {
3490     size_t len;
3491     const char *p, *pstart;
3492
3493     p = cmdline;
3494     while (qemu_isspace(*p))
3495         p++;
3496     if (*p == '\0')
3497         return NULL;
3498     pstart = p;
3499     while (*p != '\0' && *p != '/' && !qemu_isspace(*p))
3500         p++;
3501     len = p - pstart;
3502     if (len > nlen - 1)
3503         len = nlen - 1;
3504     memcpy(cmdname, pstart, len);
3505     cmdname[len] = '\0';
3506     return p;
3507 }
3508
3509 /**
3510  * Read key of 'type' into 'key' and return the current
3511  * 'type' pointer.
3512  */
3513 static char *key_get_info(const char *type, char **key)
3514 {
3515     size_t len;
3516     char *p, *str;
3517
3518     if (*type == ',')
3519         type++;
3520
3521     p = strchr(type, ':');
3522     if (!p) {
3523         *key = NULL;
3524         return NULL;
3525     }
3526     len = p - type;
3527
3528     str = g_malloc(len + 1);
3529     memcpy(str, type, len);
3530     str[len] = '\0';
3531
3532     *key = str;
3533     return ++p;
3534 }
3535
3536 static int default_fmt_format = 'x';
3537 static int default_fmt_size = 4;
3538
3539 #define MAX_ARGS 16
3540
3541 static int is_valid_option(const char *c, const char *typestr)
3542 {
3543     char option[3];
3544   
3545     option[0] = '-';
3546     option[1] = *c;
3547     option[2] = '\0';
3548   
3549     typestr = strstr(typestr, option);
3550     return (typestr != NULL);
3551 }
3552
3553 static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
3554                                               const char *cmdname)
3555 {
3556     const mon_cmd_t *cmd;
3557
3558     for (cmd = disp_table; cmd->name != NULL; cmd++) {
3559         if (compare_cmd(cmdname, cmd->name)) {
3560             return cmd;
3561         }
3562     }
3563
3564     return NULL;
3565 }
3566
3567 static const mon_cmd_t *qmp_find_cmd(const char *cmdname)
3568 {
3569     return search_dispatch_table(qmp_cmds, cmdname);
3570 }
3571
3572 /*
3573  * Parse @cmdline according to command table @table.
3574  * If @cmdline is blank, return NULL.
3575  * If it can't be parsed, report to @mon, and return NULL.
3576  * Else, insert command arguments into @qdict, and return the command.
3577  * If a sub-command table exists, and if @cmdline contains an additional string
3578  * for a sub-command, this function will try to search the sub-command table.
3579  * If no additional string for a sub-command is present, this function will
3580  * return the command found in @table.
3581  * Do not assume the returned command points into @table!  It doesn't
3582  * when the command is a sub-command.
3583  */
3584 static const mon_cmd_t *monitor_parse_command(Monitor *mon,
3585                                               const char *cmdline,
3586                                               int start,
3587                                               mon_cmd_t *table,
3588                                               QDict *qdict)
3589 {
3590     const char *p, *typestr;
3591     int c;
3592     const mon_cmd_t *cmd;
3593     char cmdname[256];
3594     char buf[1024];
3595     char *key;
3596
3597 #ifdef DEBUG
3598     monitor_printf(mon, "command='%s', start='%d'\n", cmdline, start);
3599 #endif
3600
3601     /* extract the command name */
3602     p = get_command_name(cmdline + start, cmdname, sizeof(cmdname));
3603     if (!p)
3604         return NULL;
3605
3606     cmd = search_dispatch_table(table, cmdname);
3607     if (!cmd) {
3608         monitor_printf(mon, "unknown command: '%.*s'\n",
3609                        (int)(p - cmdline), cmdline);
3610         return NULL;
3611     }
3612
3613     /* filter out following useless space */
3614     while (qemu_isspace(*p)) {
3615         p++;
3616     }
3617     /* search sub command */
3618     if (cmd->sub_table != NULL) {
3619         /* check if user set additional command */
3620         if (*p == '\0') {
3621             return cmd;
3622         }
3623         return monitor_parse_command(mon, cmdline, p - cmdline,
3624                                      cmd->sub_table, qdict);
3625     }
3626
3627     /* parse the parameters */
3628     typestr = cmd->args_type;
3629     for(;;) {
3630         typestr = key_get_info(typestr, &key);
3631         if (!typestr)
3632             break;
3633         c = *typestr;
3634         typestr++;
3635         switch(c) {
3636         case 'F':
3637         case 'B':
3638         case 's':
3639             {
3640                 int ret;
3641
3642                 while (qemu_isspace(*p))
3643                     p++;
3644                 if (*typestr == '?') {
3645                     typestr++;
3646                     if (*p == '\0') {
3647                         /* no optional string: NULL argument */
3648                         break;
3649                     }
3650                 }
3651                 ret = get_str(buf, sizeof(buf), &p);
3652                 if (ret < 0) {
3653                     switch(c) {
3654                     case 'F':
3655                         monitor_printf(mon, "%s: filename expected\n",
3656                                        cmdname);
3657                         break;
3658                     case 'B':
3659                         monitor_printf(mon, "%s: block device name expected\n",
3660                                        cmdname);
3661                         break;
3662                     default:
3663                         monitor_printf(mon, "%s: string expected\n", cmdname);
3664                         break;
3665                     }
3666                     goto fail;
3667                 }
3668                 qdict_put(qdict, key, qstring_from_str(buf));
3669             }
3670             break;
3671         case 'O':
3672             {
3673                 QemuOptsList *opts_list;
3674                 QemuOpts *opts;
3675
3676                 opts_list = qemu_find_opts(key);
3677                 if (!opts_list || opts_list->desc->name) {
3678                     goto bad_type;
3679                 }
3680                 while (qemu_isspace(*p)) {
3681                     p++;
3682                 }
3683                 if (!*p)
3684                     break;
3685                 if (get_str(buf, sizeof(buf), &p) < 0) {
3686                     goto fail;
3687                 }
3688                 opts = qemu_opts_parse(opts_list, buf, 1);
3689                 if (!opts) {
3690                     goto fail;
3691                 }
3692                 qemu_opts_to_qdict(opts, qdict);
3693                 qemu_opts_del(opts);
3694             }
3695             break;
3696         case '/':
3697             {
3698                 int count, format, size;
3699
3700                 while (qemu_isspace(*p))
3701                     p++;
3702                 if (*p == '/') {
3703                     /* format found */
3704                     p++;
3705                     count = 1;
3706                     if (qemu_isdigit(*p)) {
3707                         count = 0;
3708                         while (qemu_isdigit(*p)) {
3709                             count = count * 10 + (*p - '0');
3710                             p++;
3711                         }
3712                     }
3713                     size = -1;
3714                     format = -1;
3715                     for(;;) {
3716                         switch(*p) {
3717                         case 'o':
3718                         case 'd':
3719                         case 'u':
3720                         case 'x':
3721                         case 'i':
3722                         case 'c':
3723                             format = *p++;
3724                             break;
3725                         case 'b':
3726                             size = 1;
3727                             p++;
3728                             break;
3729                         case 'h':
3730                             size = 2;
3731                             p++;
3732                             break;
3733                         case 'w':
3734                             size = 4;
3735                             p++;
3736                             break;
3737                         case 'g':
3738                         case 'L':
3739                             size = 8;
3740                             p++;
3741                             break;
3742                         default:
3743                             goto next;
3744                         }
3745                     }
3746                 next:
3747                     if (*p != '\0' && !qemu_isspace(*p)) {
3748                         monitor_printf(mon, "invalid char in format: '%c'\n",
3749                                        *p);
3750                         goto fail;
3751                     }
3752                     if (format < 0)
3753                         format = default_fmt_format;
3754                     if (format != 'i') {
3755                         /* for 'i', not specifying a size gives -1 as size */
3756                         if (size < 0)
3757                             size = default_fmt_size;
3758                         default_fmt_size = size;
3759                     }
3760                     default_fmt_format = format;
3761                 } else {
3762                     count = 1;
3763                     format = default_fmt_format;
3764                     if (format != 'i') {
3765                         size = default_fmt_size;
3766                     } else {
3767                         size = -1;
3768                     }
3769                 }
3770                 qdict_put(qdict, "count", qint_from_int(count));
3771                 qdict_put(qdict, "format", qint_from_int(format));
3772                 qdict_put(qdict, "size", qint_from_int(size));
3773             }
3774             break;
3775         case 'i':
3776         case 'l':
3777         case 'M':
3778             {
3779                 int64_t val;
3780
3781                 while (qemu_isspace(*p))
3782                     p++;
3783                 if (*typestr == '?' || *typestr == '.') {
3784                     if (*typestr == '?') {
3785                         if (*p == '\0') {
3786                             typestr++;
3787                             break;
3788                         }
3789                     } else {
3790                         if (*p == '.') {
3791                             p++;
3792                             while (qemu_isspace(*p))
3793                                 p++;
3794                         } else {
3795                             typestr++;
3796                             break;
3797                         }
3798                     }
3799                     typestr++;
3800                 }
3801                 if (get_expr(mon, &val, &p))
3802                     goto fail;
3803                 /* Check if 'i' is greater than 32-bit */
3804                 if ((c == 'i') && ((val >> 32) & 0xffffffff)) {
3805                     monitor_printf(mon, "\'%s\' has failed: ", cmdname);
3806                     monitor_printf(mon, "integer is for 32-bit values\n");
3807                     goto fail;
3808                 } else if (c == 'M') {
3809                     if (val < 0) {
3810                         monitor_printf(mon, "enter a positive value\n");
3811                         goto fail;
3812                     }
3813                     val <<= 20;
3814                 }
3815                 qdict_put(qdict, key, qint_from_int(val));
3816             }
3817             break;
3818         case 'o':
3819             {
3820                 int64_t val;
3821                 char *end;
3822
3823                 while (qemu_isspace(*p)) {
3824                     p++;
3825                 }
3826                 if (*typestr == '?') {
3827                     typestr++;
3828                     if (*p == '\0') {
3829                         break;
3830                     }
3831                 }
3832                 val = strtosz(p, &end);
3833                 if (val < 0) {
3834                     monitor_printf(mon, "invalid size\n");
3835                     goto fail;
3836                 }
3837                 qdict_put(qdict, key, qint_from_int(val));
3838                 p = end;
3839             }
3840             break;
3841         case 'T':
3842             {
3843                 double val;
3844
3845                 while (qemu_isspace(*p))
3846                     p++;
3847                 if (*typestr == '?') {
3848                     typestr++;
3849                     if (*p == '\0') {
3850                         break;
3851                     }
3852                 }
3853                 if (get_double(mon, &val, &p) < 0) {
3854                     goto fail;
3855                 }
3856                 if (p[0] && p[1] == 's') {
3857                     switch (*p) {
3858                     case 'm':
3859                         val /= 1e3; p += 2; break;
3860                     case 'u':
3861                         val /= 1e6; p += 2; break;
3862                     case 'n':
3863                         val /= 1e9; p += 2; break;
3864                     }
3865                 }
3866                 if (*p && !qemu_isspace(*p)) {
3867                     monitor_printf(mon, "Unknown unit suffix\n");
3868                     goto fail;
3869                 }
3870                 qdict_put(qdict, key, qfloat_from_double(val));
3871             }
3872             break;
3873         case 'b':
3874             {
3875                 const char *beg;
3876                 int val;
3877
3878                 while (qemu_isspace(*p)) {
3879                     p++;
3880                 }
3881                 beg = p;
3882                 while (qemu_isgraph(*p)) {
3883                     p++;
3884                 }
3885                 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) {
3886                     val = 1;
3887                 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) {
3888                     val = 0;
3889                 } else {
3890                     monitor_printf(mon, "Expected 'on' or 'off'\n");
3891                     goto fail;
3892                 }
3893                 qdict_put(qdict, key, qbool_from_int(val));
3894             }
3895             break;
3896         case '-':
3897             {
3898                 const char *tmp = p;
3899                 int skip_key = 0;
3900                 /* option */
3901
3902                 c = *typestr++;
3903                 if (c == '\0')
3904                     goto bad_type;
3905                 while (qemu_isspace(*p))
3906                     p++;
3907                 if (*p == '-') {
3908                     p++;
3909                     if(c != *p) {
3910                         if(!is_valid_option(p, typestr)) {
3911                   
3912                             monitor_printf(mon, "%s: unsupported option -%c\n",
3913                                            cmdname, *p);
3914                             goto fail;
3915                         } else {
3916                             skip_key = 1;
3917                         }
3918                     }
3919                     if(skip_key) {
3920                         p = tmp;
3921                     } else {
3922                         /* has option */
3923                         p++;
3924                         qdict_put(qdict, key, qbool_from_int(1));
3925                     }
3926                 }
3927             }
3928             break;
3929         default:
3930         bad_type:
3931             monitor_printf(mon, "%s: unknown type '%c'\n", cmdname, c);
3932             goto fail;
3933         }
3934         g_free(key);
3935         key = NULL;
3936     }
3937     /* check that all arguments were parsed */
3938     while (qemu_isspace(*p))
3939         p++;
3940     if (*p != '\0') {
3941         monitor_printf(mon, "%s: extraneous characters at the end of line\n",
3942                        cmdname);
3943         goto fail;
3944     }
3945
3946     return cmd;
3947
3948 fail:
3949     g_free(key);
3950     return NULL;
3951 }
3952
3953 void monitor_set_error(Monitor *mon, QError *qerror)
3954 {
3955     /* report only the first error */
3956     if (!mon->error) {
3957         mon->error = qerror;
3958     } else {
3959         QDECREF(qerror);
3960     }
3961 }
3962
3963 static void handler_audit(Monitor *mon, const mon_cmd_t *cmd, int ret)
3964 {
3965     if (ret && !monitor_has_error(mon)) {
3966         /*
3967          * If it returns failure, it must have passed on error.
3968          *
3969          * Action: Report an internal error to the client if in QMP.
3970          */
3971         qerror_report(QERR_UNDEFINED_ERROR);
3972     }
3973 }
3974
3975 static void handle_user_command(Monitor *mon, const char *cmdline)
3976 {
3977     QDict *qdict;
3978     const mon_cmd_t *cmd;
3979
3980     qdict = qdict_new();
3981
3982     cmd = monitor_parse_command(mon, cmdline, 0, mon_cmds, qdict);
3983     if (!cmd)
3984         goto out;
3985
3986     if (handler_is_async(cmd)) {
3987         user_async_cmd_handler(mon, cmd, qdict);
3988     } else if (handler_is_qobject(cmd)) {
3989         QObject *data = NULL;
3990
3991         /* XXX: ignores the error code */
3992         cmd->mhandler.cmd_new(mon, qdict, &data);
3993         assert(!monitor_has_error(mon));
3994         if (data) {
3995             cmd->user_print(mon, data);
3996             qobject_decref(data);
3997         }
3998     } else {
3999         cmd->mhandler.cmd(mon, qdict);
4000     }
4001
4002 out:
4003     QDECREF(qdict);
4004 }
4005
4006 static void cmd_completion(const char *name, const char *list)
4007 {
4008     const char *p, *pstart;
4009     char cmd[128];
4010     int len;
4011
4012     p = list;
4013     for(;;) {
4014         pstart = p;
4015         p = strchr(p, '|');
4016         if (!p)
4017             p = pstart + strlen(pstart);
4018         len = p - pstart;
4019         if (len > sizeof(cmd) - 2)
4020             len = sizeof(cmd) - 2;
4021         memcpy(cmd, pstart, len);
4022         cmd[len] = '\0';
4023         if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
4024             readline_add_completion(cur_mon->rs, cmd);
4025         }
4026         if (*p == '\0')
4027             break;
4028         p++;
4029     }
4030 }
4031
4032 static void file_completion(const char *input)
4033 {
4034     DIR *ffs;
4035     struct dirent *d;
4036     char path[1024];
4037     char file[1024], file_prefix[1024];
4038     int input_path_len;
4039     const char *p;
4040
4041     p = strrchr(input, '/');
4042     if (!p) {
4043         input_path_len = 0;
4044         pstrcpy(file_prefix, sizeof(file_prefix), input);
4045         pstrcpy(path, sizeof(path), ".");
4046     } else {
4047         input_path_len = p - input + 1;
4048         memcpy(path, input, input_path_len);
4049         if (input_path_len > sizeof(path) - 1)
4050             input_path_len = sizeof(path) - 1;
4051         path[input_path_len] = '\0';
4052         pstrcpy(file_prefix, sizeof(file_prefix), p + 1);
4053     }
4054 #ifdef DEBUG_COMPLETION
4055     monitor_printf(cur_mon, "input='%s' path='%s' prefix='%s'\n",
4056                    input, path, file_prefix);
4057 #endif
4058     ffs = opendir(path);
4059     if (!ffs)
4060         return;
4061     for(;;) {
4062         struct stat sb;
4063         d = readdir(ffs);
4064         if (!d)
4065             break;
4066
4067         if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
4068             continue;
4069         }
4070
4071         if (strstart(d->d_name, file_prefix, NULL)) {
4072             memcpy(file, input, input_path_len);
4073             if (input_path_len < sizeof(file))
4074                 pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
4075                         d->d_name);
4076             /* stat the file to find out if it's a directory.
4077              * In that case add a slash to speed up typing long paths
4078              */
4079             if (stat(file, &sb) == 0 && S_ISDIR(sb.st_mode)) {
4080                 pstrcat(file, sizeof(file), "/");
4081             }
4082             readline_add_completion(cur_mon->rs, file);
4083         }
4084     }
4085     closedir(ffs);
4086 }
4087
4088 static void block_completion_it(void *opaque, BlockDriverState *bs)
4089 {
4090     const char *name = bdrv_get_device_name(bs);
4091     const char *input = opaque;
4092
4093     if (input[0] == '\0' ||
4094         !strncmp(name, (char *)input, strlen(input))) {
4095         readline_add_completion(cur_mon->rs, name);
4096     }
4097 }
4098
4099 /* NOTE: this parser is an approximate form of the real command parser */
4100 static void parse_cmdline(const char *cmdline,
4101                          int *pnb_args, char **args)
4102 {
4103     const char *p;
4104     int nb_args, ret;
4105     char buf[1024];
4106
4107     p = cmdline;
4108     nb_args = 0;
4109     for(;;) {
4110         while (qemu_isspace(*p))
4111             p++;
4112         if (*p == '\0')
4113             break;
4114         if (nb_args >= MAX_ARGS)
4115             break;
4116         ret = get_str(buf, sizeof(buf), &p);
4117         args[nb_args] = g_strdup(buf);
4118         nb_args++;
4119         if (ret < 0)
4120             break;
4121     }
4122     *pnb_args = nb_args;
4123 }
4124
4125 static const char *next_arg_type(const char *typestr)
4126 {
4127     const char *p = strchr(typestr, ':');
4128     return (p != NULL ? ++p : typestr);
4129 }
4130
4131 static void monitor_find_completion(const char *cmdline)
4132 {
4133     const char *cmdname;
4134     char *args[MAX_ARGS];
4135     int nb_args, i, len;
4136     const char *ptype, *str;
4137     const mon_cmd_t *cmd;
4138
4139     parse_cmdline(cmdline, &nb_args, args);
4140 #ifdef DEBUG_COMPLETION
4141     for(i = 0; i < nb_args; i++) {
4142         monitor_printf(cur_mon, "arg%d = '%s'\n", i, (char *)args[i]);
4143     }
4144 #endif
4145
4146     /* if the line ends with a space, it means we want to complete the
4147        next arg */
4148     len = strlen(cmdline);
4149     if (len > 0 && qemu_isspace(cmdline[len - 1])) {
4150         if (nb_args >= MAX_ARGS) {
4151             goto cleanup;
4152         }
4153         args[nb_args++] = g_strdup("");
4154     }
4155     if (nb_args <= 1) {
4156         /* command completion */
4157         if (nb_args == 0)
4158             cmdname = "";
4159         else
4160             cmdname = args[0];
4161         readline_set_completion_index(cur_mon->rs, strlen(cmdname));
4162         for(cmd = mon_cmds; cmd->name != NULL; cmd++) {
4163             cmd_completion(cmdname, cmd->name);
4164         }
4165     } else {
4166         /* find the command */
4167         for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
4168             if (compare_cmd(args[0], cmd->name)) {
4169                 break;
4170             }
4171         }
4172         if (!cmd->name) {
4173             goto cleanup;
4174         }
4175
4176         ptype = next_arg_type(cmd->args_type);
4177         for(i = 0; i < nb_args - 2; i++) {
4178             if (*ptype != '\0') {
4179                 ptype = next_arg_type(ptype);
4180                 while (*ptype == '?')
4181                     ptype = next_arg_type(ptype);
4182             }
4183         }
4184         str = args[nb_args - 1];
4185         if (*ptype == '-' && ptype[1] != '\0') {
4186             ptype = next_arg_type(ptype);
4187         }
4188         switch(*ptype) {
4189         case 'F':
4190             /* file completion */
4191             readline_set_completion_index(cur_mon->rs, strlen(str));
4192             file_completion(str);
4193             break;
4194         case 'B':
4195             /* block device name completion */
4196             readline_set_completion_index(cur_mon->rs, strlen(str));
4197             bdrv_iterate(block_completion_it, (void *)str);
4198             break;
4199         case 's':
4200             /* XXX: more generic ? */
4201             if (!strcmp(cmd->name, "info")) {
4202                 readline_set_completion_index(cur_mon->rs, strlen(str));
4203                 for(cmd = info_cmds; cmd->name != NULL; cmd++) {
4204                     cmd_completion(str, cmd->name);
4205                 }
4206             } else if (!strcmp(cmd->name, "sendkey")) {
4207                 char *sep = strrchr(str, '-');
4208                 if (sep)
4209                     str = sep + 1;
4210                 readline_set_completion_index(cur_mon->rs, strlen(str));
4211                 for (i = 0; i < Q_KEY_CODE_MAX; i++) {
4212                     cmd_completion(str, QKeyCode_lookup[i]);
4213                 }
4214             } else if (!strcmp(cmd->name, "help|?")) {
4215                 readline_set_completion_index(cur_mon->rs, strlen(str));
4216                 for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
4217                     cmd_completion(str, cmd->name);
4218                 }
4219             }
4220             break;
4221         default:
4222             break;
4223         }
4224     }
4225
4226 cleanup:
4227     for (i = 0; i < nb_args; i++) {
4228         g_free(args[i]);
4229     }
4230 }
4231
4232 static int monitor_can_read(void *opaque)
4233 {
4234     Monitor *mon = opaque;
4235
4236     return (mon->suspend_cnt == 0) ? 1 : 0;
4237 }
4238
4239 static int invalid_qmp_mode(const Monitor *mon, const char *cmd_name)
4240 {
4241     int is_cap = compare_cmd(cmd_name, "qmp_capabilities");
4242     return (qmp_cmd_mode(mon) ? is_cap : !is_cap);
4243 }
4244
4245 /*
4246  * Argument validation rules:
4247  *
4248  * 1. The argument must exist in cmd_args qdict
4249  * 2. The argument type must be the expected one
4250  *
4251  * Special case: If the argument doesn't exist in cmd_args and
4252  *               the QMP_ACCEPT_UNKNOWNS flag is set, then the
4253  *               checking is skipped for it.
4254  */
4255 static int check_client_args_type(const QDict *client_args,
4256                                   const QDict *cmd_args, int flags)
4257 {
4258     const QDictEntry *ent;
4259
4260     for (ent = qdict_first(client_args); ent;ent = qdict_next(client_args,ent)){
4261         QObject *obj;
4262         QString *arg_type;
4263         const QObject *client_arg = qdict_entry_value(ent);
4264         const char *client_arg_name = qdict_entry_key(ent);
4265
4266         obj = qdict_get(cmd_args, client_arg_name);
4267         if (!obj) {
4268             if (flags & QMP_ACCEPT_UNKNOWNS) {
4269                 /* handler accepts unknowns */
4270                 continue;
4271             }
4272             /* client arg doesn't exist */
4273             qerror_report(QERR_INVALID_PARAMETER, client_arg_name);
4274             return -1;
4275         }
4276
4277         arg_type = qobject_to_qstring(obj);
4278         assert(arg_type != NULL);
4279
4280         /* check if argument's type is correct */
4281         switch (qstring_get_str(arg_type)[0]) {
4282         case 'F':
4283         case 'B':
4284         case 's':
4285             if (qobject_type(client_arg) != QTYPE_QSTRING) {
4286                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4287                               "string");
4288                 return -1;
4289             }
4290         break;
4291         case 'i':
4292         case 'l':
4293         case 'M':
4294         case 'o':
4295             if (qobject_type(client_arg) != QTYPE_QINT) {
4296                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4297                               "int");
4298                 return -1; 
4299             }
4300             break;
4301         case 'T':
4302             if (qobject_type(client_arg) != QTYPE_QINT &&
4303                 qobject_type(client_arg) != QTYPE_QFLOAT) {
4304                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4305                               "number");
4306                return -1; 
4307             }
4308             break;
4309         case 'b':
4310         case '-':
4311             if (qobject_type(client_arg) != QTYPE_QBOOL) {
4312                 qerror_report(QERR_INVALID_PARAMETER_TYPE, client_arg_name,
4313                               "bool");
4314                return -1; 
4315             }
4316             break;
4317         case 'O':
4318             assert(flags & QMP_ACCEPT_UNKNOWNS);
4319             break;
4320         case 'q':
4321             /* Any QObject can be passed.  */
4322             break;
4323         case '/':
4324         case '.':
4325             /*
4326              * These types are not supported by QMP and thus are not
4327              * handled here. Fall through.
4328              */
4329         default:
4330             abort();
4331         }
4332     }
4333
4334     return 0;
4335 }
4336
4337 /*
4338  * - Check if the client has passed all mandatory args
4339  * - Set special flags for argument validation
4340  */
4341 static int check_mandatory_args(const QDict *cmd_args,
4342                                 const QDict *client_args, int *flags)
4343 {
4344     const QDictEntry *ent;
4345
4346     for (ent = qdict_first(cmd_args); ent; ent = qdict_next(cmd_args, ent)) {
4347         const char *cmd_arg_name = qdict_entry_key(ent);
4348         QString *type = qobject_to_qstring(qdict_entry_value(ent));
4349         assert(type != NULL);
4350
4351         if (qstring_get_str(type)[0] == 'O') {
4352             assert((*flags & QMP_ACCEPT_UNKNOWNS) == 0);
4353             *flags |= QMP_ACCEPT_UNKNOWNS;
4354         } else if (qstring_get_str(type)[0] != '-' &&
4355                    qstring_get_str(type)[1] != '?' &&
4356                    !qdict_haskey(client_args, cmd_arg_name)) {
4357             qerror_report(QERR_MISSING_PARAMETER, cmd_arg_name);
4358             return -1;
4359         }
4360     }
4361
4362     return 0;
4363 }
4364
4365 static QDict *qdict_from_args_type(const char *args_type)
4366 {
4367     int i;
4368     QDict *qdict;
4369     QString *key, *type, *cur_qs;
4370
4371     assert(args_type != NULL);
4372
4373     qdict = qdict_new();
4374
4375     if (args_type == NULL || args_type[0] == '\0') {
4376         /* no args, empty qdict */
4377         goto out;
4378     }
4379
4380     key = qstring_new();
4381     type = qstring_new();
4382
4383     cur_qs = key;
4384
4385     for (i = 0;; i++) {
4386         switch (args_type[i]) {
4387             case ',':
4388             case '\0':
4389                 qdict_put(qdict, qstring_get_str(key), type);
4390                 QDECREF(key);
4391                 if (args_type[i] == '\0') {
4392                     goto out;
4393                 }
4394                 type = qstring_new(); /* qdict has ref */
4395                 cur_qs = key = qstring_new();
4396                 break;
4397             case ':':
4398                 cur_qs = type;
4399                 break;
4400             default:
4401                 qstring_append_chr(cur_qs, args_type[i]);
4402                 break;
4403         }
4404     }
4405
4406 out:
4407     return qdict;
4408 }
4409
4410 /*
4411  * Client argument checking rules:
4412  *
4413  * 1. Client must provide all mandatory arguments
4414  * 2. Each argument provided by the client must be expected
4415  * 3. Each argument provided by the client must have the type expected
4416  *    by the command
4417  */
4418 static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args)
4419 {
4420     int flags, err;
4421     QDict *cmd_args;
4422
4423     cmd_args = qdict_from_args_type(cmd->args_type);
4424
4425     flags = 0;
4426     err = check_mandatory_args(cmd_args, client_args, &flags);
4427     if (err) {
4428         goto out;
4429     }
4430
4431     err = check_client_args_type(client_args, cmd_args, flags);
4432
4433 out:
4434     QDECREF(cmd_args);
4435     return err;
4436 }
4437
4438 /*
4439  * Input object checking rules
4440  *
4441  * 1. Input object must be a dict
4442  * 2. The "execute" key must exist
4443  * 3. The "execute" key must be a string
4444  * 4. If the "arguments" key exists, it must be a dict
4445  * 5. If the "id" key exists, it can be anything (ie. json-value)
4446  * 6. Any argument not listed above is considered invalid
4447  */
4448 static QDict *qmp_check_input_obj(QObject *input_obj)
4449 {
4450     const QDictEntry *ent;
4451     int has_exec_key = 0;
4452     QDict *input_dict;
4453
4454     if (qobject_type(input_obj) != QTYPE_QDICT) {
4455         qerror_report(QERR_QMP_BAD_INPUT_OBJECT, "object");
4456         return NULL;
4457     }
4458
4459     input_dict = qobject_to_qdict(input_obj);
4460
4461     for (ent = qdict_first(input_dict); ent; ent = qdict_next(input_dict, ent)){
4462         const char *arg_name = qdict_entry_key(ent);
4463         const QObject *arg_obj = qdict_entry_value(ent);
4464
4465         if (!strcmp(arg_name, "execute")) {
4466             if (qobject_type(arg_obj) != QTYPE_QSTRING) {
4467                 qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "execute",
4468                               "string");
4469                 return NULL;
4470             }
4471             has_exec_key = 1;
4472         } else if (!strcmp(arg_name, "arguments")) {
4473             if (qobject_type(arg_obj) != QTYPE_QDICT) {
4474                 qerror_report(QERR_QMP_BAD_INPUT_OBJECT_MEMBER, "arguments",
4475                               "object");
4476                 return NULL;
4477             }
4478         } else if (!strcmp(arg_name, "id")) {
4479             /* FIXME: check duplicated IDs for async commands */
4480         } else {
4481             qerror_report(QERR_QMP_EXTRA_MEMBER, arg_name);
4482             return NULL;
4483         }
4484     }
4485
4486     if (!has_exec_key) {
4487         qerror_report(QERR_QMP_BAD_INPUT_OBJECT, "execute");
4488         return NULL;
4489     }
4490
4491     return input_dict;
4492 }
4493
4494 static void qmp_call_cmd(Monitor *mon, const mon_cmd_t *cmd,
4495                          const QDict *params)
4496 {
4497     int ret;
4498     QObject *data = NULL;
4499
4500     ret = cmd->mhandler.cmd_new(mon, params, &data);
4501     handler_audit(mon, cmd, ret);
4502     monitor_protocol_emitter(mon, data);
4503     qobject_decref(data);
4504 }
4505
4506 static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
4507 {
4508     int err;
4509     QObject *obj;
4510     QDict *input, *args;
4511     const mon_cmd_t *cmd;
4512     const char *cmd_name;
4513     Monitor *mon = cur_mon;
4514
4515     args = input = NULL;
4516
4517     obj = json_parser_parse(tokens, NULL);
4518     if (!obj) {
4519         // FIXME: should be triggered in json_parser_parse()
4520         qerror_report(QERR_JSON_PARSING);
4521         goto err_out;
4522     }
4523
4524     input = qmp_check_input_obj(obj);
4525     if (!input) {
4526         qobject_decref(obj);
4527         goto err_out;
4528     }
4529
4530     mon->mc->id = qdict_get(input, "id");
4531     qobject_incref(mon->mc->id);
4532
4533     cmd_name = qdict_get_str(input, "execute");
4534     trace_handle_qmp_command(mon, cmd_name);
4535     if (invalid_qmp_mode(mon, cmd_name)) {
4536         qerror_report(QERR_COMMAND_NOT_FOUND, cmd_name);
4537         goto err_out;
4538     }
4539
4540     cmd = qmp_find_cmd(cmd_name);
4541     if (!cmd) {
4542         qerror_report(QERR_COMMAND_NOT_FOUND, cmd_name);
4543         goto err_out;
4544     }
4545
4546     obj = qdict_get(input, "arguments");
4547     if (!obj) {
4548         args = qdict_new();
4549     } else {
4550         args = qobject_to_qdict(obj);
4551         QINCREF(args);
4552     }
4553
4554     err = qmp_check_client_args(cmd, args);
4555     if (err < 0) {
4556         goto err_out;
4557     }
4558
4559     if (handler_is_async(cmd)) {
4560         err = qmp_async_cmd_handler(mon, cmd, args);
4561         if (err) {
4562             /* emit the error response */
4563             goto err_out;
4564         }
4565     } else {
4566         qmp_call_cmd(mon, cmd, args);
4567     }
4568
4569     goto out;
4570
4571 err_out:
4572     monitor_protocol_emitter(mon, NULL);
4573 out:
4574     QDECREF(input);
4575     QDECREF(args);
4576 }
4577
4578 /**
4579  * monitor_control_read(): Read and handle QMP input
4580  */
4581 static void monitor_control_read(void *opaque, const uint8_t *buf, int size)
4582 {
4583     Monitor *old_mon = cur_mon;
4584
4585     cur_mon = opaque;
4586
4587     json_message_parser_feed(&cur_mon->mc->parser, (const char *) buf, size);
4588
4589     cur_mon = old_mon;
4590 }
4591
4592 static void monitor_read(void *opaque, const uint8_t *buf, int size)
4593 {
4594     Monitor *old_mon = cur_mon;
4595     int i;
4596
4597     cur_mon = opaque;
4598
4599     if (cur_mon->rs) {
4600         for (i = 0; i < size; i++)
4601             readline_handle_byte(cur_mon->rs, buf[i]);
4602     } else {
4603         if (size == 0 || buf[size - 1] != 0)
4604             monitor_printf(cur_mon, "corrupted command\n");
4605         else
4606             handle_user_command(cur_mon, (char *)buf);
4607     }
4608
4609     cur_mon = old_mon;
4610 }
4611
4612 static void monitor_command_cb(Monitor *mon, const char *cmdline, void *opaque)
4613 {
4614     monitor_suspend(mon);
4615     handle_user_command(mon, cmdline);
4616     monitor_resume(mon);
4617 }
4618
4619 int monitor_suspend(Monitor *mon)
4620 {
4621     if (!mon->rs)
4622         return -ENOTTY;
4623     mon->suspend_cnt++;
4624     return 0;
4625 }
4626
4627 void monitor_resume(Monitor *mon)
4628 {
4629     if (!mon->rs)
4630         return;
4631     if (--mon->suspend_cnt == 0)
4632         readline_show_prompt(mon->rs);
4633 }
4634
4635 static QObject *get_qmp_greeting(void)
4636 {
4637     QObject *ver = NULL;
4638
4639     qmp_marshal_input_query_version(NULL, NULL, &ver);
4640     return qobject_from_jsonf("{'QMP':{'version': %p,'capabilities': []}}",ver);
4641 }
4642
4643 /**
4644  * monitor_control_event(): Print QMP gretting
4645  */
4646 static void monitor_control_event(void *opaque, int event)
4647 {
4648     QObject *data;
4649     Monitor *mon = opaque;
4650
4651     switch (event) {
4652     case CHR_EVENT_OPENED:
4653         mon->mc->command_mode = 0;
4654         data = get_qmp_greeting();
4655         monitor_json_emitter(mon, data);
4656         qobject_decref(data);
4657         mon_refcount++;
4658         break;
4659     case CHR_EVENT_CLOSED:
4660         json_message_parser_destroy(&mon->mc->parser);
4661         json_message_parser_init(&mon->mc->parser, handle_qmp_command);
4662         mon_refcount--;
4663         monitor_fdsets_cleanup();
4664         break;
4665     }
4666 }
4667
4668 static void monitor_event(void *opaque, int event)
4669 {
4670     Monitor *mon = opaque;
4671
4672     switch (event) {
4673     case CHR_EVENT_MUX_IN:
4674         mon->mux_out = 0;
4675         if (mon->reset_seen) {
4676             readline_restart(mon->rs);
4677             monitor_resume(mon);
4678             monitor_flush(mon);
4679         } else {
4680             mon->suspend_cnt = 0;
4681         }
4682         break;
4683
4684     case CHR_EVENT_MUX_OUT:
4685         if (mon->reset_seen) {
4686             if (mon->suspend_cnt == 0) {
4687                 monitor_printf(mon, "\n");
4688             }
4689             monitor_flush(mon);
4690             monitor_suspend(mon);
4691         } else {
4692             mon->suspend_cnt++;
4693         }
4694         mon->mux_out = 1;
4695         break;
4696
4697     case CHR_EVENT_OPENED:
4698         monitor_printf(mon, "QEMU %s monitor - type 'help' for more "
4699                        "information\n", QEMU_VERSION);
4700         if (!mon->mux_out) {
4701             readline_show_prompt(mon->rs);
4702         }
4703         mon->reset_seen = 1;
4704         mon_refcount++;
4705         break;
4706
4707     case CHR_EVENT_CLOSED:
4708         mon_refcount--;
4709         monitor_fdsets_cleanup();
4710         break;
4711     }
4712 }
4713
4714 static int
4715 compare_mon_cmd(const void *a, const void *b)
4716 {
4717     return strcmp(((const mon_cmd_t *)a)->name,
4718             ((const mon_cmd_t *)b)->name);
4719 }
4720
4721 static void sortcmdlist(void)
4722 {
4723     int array_num;
4724     int elem_size = sizeof(mon_cmd_t);
4725
4726     array_num = sizeof(mon_cmds)/elem_size-1;
4727     qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
4728
4729     array_num = sizeof(info_cmds)/elem_size-1;
4730     qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
4731 }
4732
4733
4734 /*
4735  * Local variables:
4736  *  c-indent-level: 4
4737  *  c-basic-offset: 4
4738  *  tab-width: 8
4739  * End:
4740  */
4741
4742 void monitor_init(CharDriverState *chr, int flags)
4743 {
4744     static int is_first_init = 1;
4745     Monitor *mon;
4746
4747     if (is_first_init) {
4748         monitor_protocol_event_init();
4749         is_first_init = 0;
4750     }
4751
4752     mon = g_malloc0(sizeof(*mon));
4753     mon->outbuf = qstring_new();
4754
4755     mon->chr = chr;
4756     mon->flags = flags;
4757     if (flags & MONITOR_USE_READLINE) {
4758         mon->rs = readline_init(mon, monitor_find_completion);
4759         monitor_read_command(mon, 0);
4760     }
4761
4762     if (monitor_ctrl_mode(mon)) {
4763         mon->mc = g_malloc0(sizeof(MonitorControl));
4764         /* Control mode requires special handlers */
4765         qemu_chr_add_handlers(chr, monitor_can_read, monitor_control_read,
4766                               monitor_control_event, mon);
4767         qemu_chr_fe_set_echo(chr, true);
4768
4769         json_message_parser_init(&mon->mc->parser, handle_qmp_command);
4770     } else {
4771         qemu_chr_add_handlers(chr, monitor_can_read, monitor_read,
4772                               monitor_event, mon);
4773     }
4774
4775     QLIST_INSERT_HEAD(&mon_list, mon, entry);
4776     if (!default_mon || (flags & MONITOR_IS_DEFAULT))
4777         default_mon = mon;
4778
4779     sortcmdlist();
4780 }
4781
4782 static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
4783 {
4784     BlockDriverState *bs = opaque;
4785     int ret = 0;
4786
4787     if (bdrv_set_key(bs, password) != 0) {
4788         monitor_printf(mon, "invalid password\n");
4789         ret = -EPERM;
4790     }
4791     if (mon->password_completion_cb)
4792         mon->password_completion_cb(mon->password_opaque, ret);
4793
4794     monitor_read_command(mon, 1);
4795 }
4796
4797 ReadLineState *monitor_get_rs(Monitor *mon)
4798 {
4799     return mon->rs;
4800 }
4801
4802 int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
4803                                 BlockDriverCompletionFunc *completion_cb,
4804                                 void *opaque)
4805 {
4806     int err;
4807
4808     if (!bdrv_key_required(bs)) {
4809         if (completion_cb)
4810             completion_cb(opaque, 0);
4811         return 0;
4812     }
4813
4814     if (monitor_ctrl_mode(mon)) {
4815         qerror_report(QERR_DEVICE_ENCRYPTED, bdrv_get_device_name(bs),
4816                       bdrv_get_encrypted_filename(bs));
4817         return -1;
4818     }
4819
4820     monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
4821                    bdrv_get_encrypted_filename(bs));
4822
4823     mon->password_completion_cb = completion_cb;
4824     mon->password_opaque = opaque;
4825
4826     err = monitor_read_password(mon, bdrv_password_cb, bs);
4827
4828     if (err && completion_cb)
4829         completion_cb(opaque, err);
4830
4831     return err;
4832 }
4833
4834 int monitor_read_block_device_key(Monitor *mon, const char *device,
4835                                   BlockDriverCompletionFunc *completion_cb,
4836                                   void *opaque)
4837 {
4838     BlockDriverState *bs;
4839
4840     bs = bdrv_find(device);
4841     if (!bs) {
4842         monitor_printf(mon, "Device not found %s\n", device);
4843         return -1;
4844     }
4845
4846     return monitor_read_bdrv_key_start(mon, bs, completion_cb, opaque);
4847 }
4848
4849 QemuOptsList qemu_mon_opts = {
4850     .name = "mon",
4851     .implied_opt_name = "chardev",
4852     .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
4853     .desc = {
4854         {
4855             .name = "mode",
4856             .type = QEMU_OPT_STRING,
4857         },{
4858             .name = "chardev",
4859             .type = QEMU_OPT_STRING,
4860         },{
4861             .name = "default",
4862             .type = QEMU_OPT_BOOL,
4863         },{
4864             .name = "pretty",
4865             .type = QEMU_OPT_BOOL,
4866         },
4867         { /* end of list */ }
4868     },
4869 };