xref: /openbmc/qemu/system/vl.c (revision 845b54efafa5c28040570dcb6d7f8f84d23e37f3)
1  /*
2   * QEMU System Emulator
3   *
4   * Copyright (c) 2003-2008 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  
25  #include "qemu/osdep.h"
26  #include "qemu/help-texts.h"
27  #include "qemu/datadir.h"
28  #include "qemu/units.h"
29  #include "exec/cpu-common.h"
30  #include "exec/page-vary.h"
31  #include "hw/qdev-properties.h"
32  #include "qapi/compat-policy.h"
33  #include "qapi/error.h"
34  #include "qapi/qmp/qdict.h"
35  #include "qapi/qmp/qstring.h"
36  #include "qapi/qmp/qjson.h"
37  #include "qemu-version.h"
38  #include "qemu/cutils.h"
39  #include "qemu/help_option.h"
40  #include "qemu/hw-version.h"
41  #include "qemu/uuid.h"
42  #include "sysemu/reset.h"
43  #include "sysemu/runstate.h"
44  #include "sysemu/runstate-action.h"
45  #include "sysemu/seccomp.h"
46  #include "sysemu/tcg.h"
47  #include "sysemu/xen.h"
48  
49  #include "qemu/error-report.h"
50  #include "qemu/sockets.h"
51  #include "qemu/accel.h"
52  #include "qemu/async-teardown.h"
53  #include "hw/usb.h"
54  #include "hw/isa/isa.h"
55  #include "hw/scsi/scsi.h"
56  #include "hw/display/vga.h"
57  #include "hw/firmware/smbios.h"
58  #include "hw/acpi/acpi.h"
59  #include "hw/xen/xen.h"
60  #include "hw/loader.h"
61  #include "monitor/qdev.h"
62  #include "net/net.h"
63  #include "net/slirp.h"
64  #include "monitor/monitor.h"
65  #include "ui/console.h"
66  #include "ui/input.h"
67  #include "sysemu/sysemu.h"
68  #include "sysemu/numa.h"
69  #include "sysemu/hostmem.h"
70  #include "exec/gdbstub.h"
71  #include "gdbstub/enums.h"
72  #include "qemu/timer.h"
73  #include "chardev/char.h"
74  #include "qemu/bitmap.h"
75  #include "qemu/log.h"
76  #include "sysemu/blockdev.h"
77  #include "hw/block/block.h"
78  #include "hw/i386/x86.h"
79  #include "hw/i386/pc.h"
80  #include "migration/misc.h"
81  #include "migration/snapshot.h"
82  #include "sysemu/tpm.h"
83  #include "sysemu/dma.h"
84  #include "hw/audio/soundhw.h"
85  #include "audio/audio.h"
86  #include "sysemu/cpus.h"
87  #include "sysemu/cpu-timers.h"
88  #include "migration/colo.h"
89  #include "migration/postcopy-ram.h"
90  #include "sysemu/kvm.h"
91  #include "qapi/qobject-input-visitor.h"
92  #include "qemu/option.h"
93  #include "qemu/config-file.h"
94  #include "qemu/main-loop.h"
95  #ifdef CONFIG_VIRTFS
96  #include "fsdev/qemu-fsdev.h"
97  #endif
98  #include "sysemu/qtest.h"
99  #ifdef CONFIG_TCG
100  #include "tcg/perf.h"
101  #endif
102  
103  #include "disas/disas.h"
104  
105  #include "trace.h"
106  #include "trace/control.h"
107  #include "qemu/plugin.h"
108  #include "qemu/queue.h"
109  #include "sysemu/arch_init.h"
110  #include "exec/confidential-guest-support.h"
111  
112  #include "ui/qemu-spice.h"
113  #include "qapi/string-input-visitor.h"
114  #include "qapi/opts-visitor.h"
115  #include "qapi/clone-visitor.h"
116  #include "qom/object_interfaces.h"
117  #include "semihosting/semihost.h"
118  #include "crypto/init.h"
119  #include "sysemu/replay.h"
120  #include "qapi/qapi-events-run-state.h"
121  #include "qapi/qapi-types-audio.h"
122  #include "qapi/qapi-visit-audio.h"
123  #include "qapi/qapi-visit-block-core.h"
124  #include "qapi/qapi-visit-compat.h"
125  #include "qapi/qapi-visit-machine.h"
126  #include "qapi/qapi-visit-ui.h"
127  #include "qapi/qapi-commands-block-core.h"
128  #include "qapi/qapi-commands-migration.h"
129  #include "qapi/qapi-commands-misc.h"
130  #include "qapi/qapi-visit-qom.h"
131  #include "qapi/qapi-commands-ui.h"
132  #include "block/qdict.h"
133  #include "qapi/qmp/qerror.h"
134  #include "sysemu/iothread.h"
135  #include "qemu/guest-random.h"
136  #include "qemu/keyval.h"
137  
138  #define MAX_VIRTIO_CONSOLES 1
139  
140  typedef struct BlockdevOptionsQueueEntry {
141      BlockdevOptions *bdo;
142      Location loc;
143      QSIMPLEQ_ENTRY(BlockdevOptionsQueueEntry) entry;
144  } BlockdevOptionsQueueEntry;
145  
146  typedef QSIMPLEQ_HEAD(, BlockdevOptionsQueueEntry) BlockdevOptionsQueue;
147  
148  typedef struct ObjectOption {
149      ObjectOptions *opts;
150      QTAILQ_ENTRY(ObjectOption) next;
151  } ObjectOption;
152  
153  typedef struct DeviceOption {
154      QDict *opts;
155      Location loc;
156      QTAILQ_ENTRY(DeviceOption) next;
157  } DeviceOption;
158  
159  static const char *cpu_option;
160  static const char *mem_path;
161  static const char *incoming;
162  static const char *loadvm;
163  static const char *accelerators;
164  static bool have_custom_ram_size;
165  static const char *ram_memdev_id;
166  static QDict *machine_opts_dict;
167  static QTAILQ_HEAD(, ObjectOption) object_opts = QTAILQ_HEAD_INITIALIZER(object_opts);
168  static QTAILQ_HEAD(, DeviceOption) device_opts = QTAILQ_HEAD_INITIALIZER(device_opts);
169  static int display_remote;
170  static int snapshot;
171  static bool preconfig_requested;
172  static QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
173  static BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
174  static bool nographic = false;
175  static int mem_prealloc; /* force preallocation of physical target memory */
176  static const char *vga_model = NULL;
177  static DisplayOptions dpy;
178  static int num_serial_hds;
179  static Chardev **serial_hds;
180  static const char *log_mask;
181  static const char *log_file;
182  static bool list_data_dirs;
183  static const char *qtest_chrdev;
184  static const char *qtest_log;
185  
186  static int has_defaults = 1;
187  static int default_audio = 1;
188  static int default_serial = 1;
189  static int default_parallel = 1;
190  static int default_monitor = 1;
191  static int default_floppy = 1;
192  static int default_cdrom = 1;
193  static int default_sdcard = 1;
194  static int default_vga = 1;
195  static int default_net = 1;
196  
197  static const struct {
198      const char *driver;
199      int *flag;
200  } default_list[] = {
201      { .driver = "xen-console",          .flag = &default_serial    },
202      { .driver = "isa-serial",           .flag = &default_serial    },
203      { .driver = "isa-parallel",         .flag = &default_parallel  },
204      { .driver = "isa-fdc",              .flag = &default_floppy    },
205      { .driver = "floppy",               .flag = &default_floppy    },
206      { .driver = "ide-cd",               .flag = &default_cdrom     },
207      { .driver = "ide-hd",               .flag = &default_cdrom     },
208      { .driver = "scsi-cd",              .flag = &default_cdrom     },
209      { .driver = "scsi-hd",              .flag = &default_cdrom     },
210      { .driver = "VGA",                  .flag = &default_vga       },
211      { .driver = "isa-vga",              .flag = &default_vga       },
212      { .driver = "cirrus-vga",           .flag = &default_vga       },
213      { .driver = "isa-cirrus-vga",       .flag = &default_vga       },
214      { .driver = "vmware-svga",          .flag = &default_vga       },
215      { .driver = "qxl-vga",              .flag = &default_vga       },
216      { .driver = "virtio-vga",           .flag = &default_vga       },
217      { .driver = "ati-vga",              .flag = &default_vga       },
218      { .driver = "vhost-user-vga",       .flag = &default_vga       },
219      { .driver = "virtio-vga-gl",        .flag = &default_vga       },
220      { .driver = "virtio-vga-rutabaga",  .flag = &default_vga       },
221  };
222  
223  static QemuOptsList qemu_rtc_opts = {
224      .name = "rtc",
225      .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
226      .merge_lists = true,
227      .desc = {
228          {
229              .name = "base",
230              .type = QEMU_OPT_STRING,
231          },{
232              .name = "clock",
233              .type = QEMU_OPT_STRING,
234          },{
235              .name = "driftfix",
236              .type = QEMU_OPT_STRING,
237          },
238          { /* end of list */ }
239      },
240  };
241  
242  static QemuOptsList qemu_option_rom_opts = {
243      .name = "option-rom",
244      .implied_opt_name = "romfile",
245      .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
246      .desc = {
247          {
248              .name = "bootindex",
249              .type = QEMU_OPT_NUMBER,
250          }, {
251              .name = "romfile",
252              .type = QEMU_OPT_STRING,
253          },
254          { /* end of list */ }
255      },
256  };
257  
258  static QemuOptsList qemu_accel_opts = {
259      .name = "accel",
260      .implied_opt_name = "accel",
261      .head = QTAILQ_HEAD_INITIALIZER(qemu_accel_opts.head),
262      .desc = {
263          /*
264           * no elements => accept any
265           * sanity checking will happen later
266           * when setting accelerator properties
267           */
268          { }
269      },
270  };
271  
272  static QemuOptsList qemu_boot_opts = {
273      .name = "boot-opts",
274      .implied_opt_name = "order",
275      .merge_lists = true,
276      .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
277      .desc = {
278          {
279              .name = "order",
280              .type = QEMU_OPT_STRING,
281          }, {
282              .name = "once",
283              .type = QEMU_OPT_STRING,
284          }, {
285              .name = "menu",
286              .type = QEMU_OPT_BOOL,
287          }, {
288              .name = "splash",
289              .type = QEMU_OPT_STRING,
290          }, {
291              .name = "splash-time",
292              .type = QEMU_OPT_NUMBER,
293          }, {
294              .name = "reboot-timeout",
295              .type = QEMU_OPT_NUMBER,
296          }, {
297              .name = "strict",
298              .type = QEMU_OPT_BOOL,
299          },
300          { /*End of list */ }
301      },
302  };
303  
304  static QemuOptsList qemu_add_fd_opts = {
305      .name = "add-fd",
306      .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
307      .desc = {
308          {
309              .name = "fd",
310              .type = QEMU_OPT_NUMBER,
311              .help = "file descriptor of which a duplicate is added to fd set",
312          },{
313              .name = "set",
314              .type = QEMU_OPT_NUMBER,
315              .help = "ID of the fd set to add fd to",
316          },{
317              .name = "opaque",
318              .type = QEMU_OPT_STRING,
319              .help = "free-form string used to describe fd",
320          },
321          { /* end of list */ }
322      },
323  };
324  
325  static QemuOptsList qemu_object_opts = {
326      .name = "object",
327      .implied_opt_name = "qom-type",
328      .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
329      .desc = {
330          { }
331      },
332  };
333  
334  static QemuOptsList qemu_tpmdev_opts = {
335      .name = "tpmdev",
336      .implied_opt_name = "type",
337      .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head),
338      .desc = {
339          /* options are defined in the TPM backends */
340          { /* end of list */ }
341      },
342  };
343  
344  static QemuOptsList qemu_overcommit_opts = {
345      .name = "overcommit",
346      .head = QTAILQ_HEAD_INITIALIZER(qemu_overcommit_opts.head),
347      .desc = {
348          {
349              .name = "mem-lock",
350              .type = QEMU_OPT_BOOL,
351          },
352          {
353              .name = "cpu-pm",
354              .type = QEMU_OPT_BOOL,
355          },
356          { /* end of list */ }
357      },
358  };
359  
360  static QemuOptsList qemu_msg_opts = {
361      .name = "msg",
362      .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head),
363      .desc = {
364          {
365              .name = "timestamp",
366              .type = QEMU_OPT_BOOL,
367          },
368          {
369              .name = "guest-name",
370              .type = QEMU_OPT_BOOL,
371              .help = "Prepends guest name for error messages but only if "
372                      "-name guest is set otherwise option is ignored\n",
373          },
374          { /* end of list */ }
375      },
376  };
377  
378  static QemuOptsList qemu_name_opts = {
379      .name = "name",
380      .implied_opt_name = "guest",
381      .merge_lists = true,
382      .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
383      .desc = {
384          {
385              .name = "guest",
386              .type = QEMU_OPT_STRING,
387              .help = "Sets the name of the guest.\n"
388                      "This name will be displayed in the SDL window caption.\n"
389                      "The name will also be used for the VNC server",
390          }, {
391              .name = "process",
392              .type = QEMU_OPT_STRING,
393              .help = "Sets the name of the QEMU process, as shown in top etc",
394          }, {
395              .name = "debug-threads",
396              .type = QEMU_OPT_BOOL,
397              .help = "When enabled, name the individual threads; defaults off.\n"
398                      "NOTE: The thread names are for debugging and not a\n"
399                      "stable API.",
400          },
401          { /* End of list */ }
402      },
403  };
404  
405  static QemuOptsList qemu_mem_opts = {
406      .name = "memory",
407      .implied_opt_name = "size",
408      .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
409      .merge_lists = true,
410      .desc = {
411          {
412              .name = "size",
413              .type = QEMU_OPT_SIZE,
414          },
415          {
416              .name = "slots",
417              .type = QEMU_OPT_NUMBER,
418          },
419          {
420              .name = "maxmem",
421              .type = QEMU_OPT_SIZE,
422          },
423          { /* end of list */ }
424      },
425  };
426  
427  static QemuOptsList qemu_icount_opts = {
428      .name = "icount",
429      .implied_opt_name = "shift",
430      .merge_lists = true,
431      .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head),
432      .desc = {
433          {
434              .name = "shift",
435              .type = QEMU_OPT_STRING,
436          }, {
437              .name = "align",
438              .type = QEMU_OPT_BOOL,
439          }, {
440              .name = "sleep",
441              .type = QEMU_OPT_BOOL,
442          }, {
443              .name = "rr",
444              .type = QEMU_OPT_STRING,
445          }, {
446              .name = "rrfile",
447              .type = QEMU_OPT_STRING,
448          }, {
449              .name = "rrsnapshot",
450              .type = QEMU_OPT_STRING,
451          },
452          { /* end of list */ }
453      },
454  };
455  
456  static QemuOptsList qemu_fw_cfg_opts = {
457      .name = "fw_cfg",
458      .implied_opt_name = "name",
459      .head = QTAILQ_HEAD_INITIALIZER(qemu_fw_cfg_opts.head),
460      .desc = {
461          {
462              .name = "name",
463              .type = QEMU_OPT_STRING,
464              .help = "Sets the fw_cfg name of the blob to be inserted",
465          }, {
466              .name = "file",
467              .type = QEMU_OPT_STRING,
468              .help = "Sets the name of the file from which "
469                      "the fw_cfg blob will be loaded",
470          }, {
471              .name = "string",
472              .type = QEMU_OPT_STRING,
473              .help = "Sets content of the blob to be inserted from a string",
474          }, {
475              .name = "gen_id",
476              .type = QEMU_OPT_STRING,
477              .help = "Sets id of the object generating the fw_cfg blob "
478                      "to be inserted",
479          },
480          { /* end of list */ }
481      },
482  };
483  
484  static QemuOptsList qemu_action_opts = {
485      .name = "action",
486      .merge_lists = true,
487      .head = QTAILQ_HEAD_INITIALIZER(qemu_action_opts.head),
488      .desc = {
489          {
490              .name = "shutdown",
491              .type = QEMU_OPT_STRING,
492          },{
493              .name = "reboot",
494              .type = QEMU_OPT_STRING,
495          },{
496              .name = "panic",
497              .type = QEMU_OPT_STRING,
498          },{
499              .name = "watchdog",
500              .type = QEMU_OPT_STRING,
501          },
502          { /* end of list */ }
503      },
504  };
505  
506  const char *qemu_get_vm_name(void)
507  {
508      return qemu_name;
509  }
510  
511  static void default_driver_disable(const char *driver)
512  {
513      int i;
514  
515      if (!driver) {
516          return;
517      }
518  
519      for (i = 0; i < ARRAY_SIZE(default_list); i++) {
520          if (strcmp(default_list[i].driver, driver) != 0)
521              continue;
522          *(default_list[i].flag) = 0;
523      }
524  }
525  
526  static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
527  {
528      const char *driver = qemu_opt_get(opts, "driver");
529  
530      default_driver_disable(driver);
531      return 0;
532  }
533  
534  static void default_driver_check_json(void)
535  {
536      DeviceOption *opt;
537  
538      QTAILQ_FOREACH(opt, &device_opts, next) {
539          const char *driver = qdict_get_try_str(opt->opts, "driver");
540          default_driver_disable(driver);
541      }
542  }
543  
544  static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
545  {
546      const char *proc_name;
547  
548      if (qemu_opt_get(opts, "debug-threads")) {
549          qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
550      }
551      qemu_name = qemu_opt_get(opts, "guest");
552  
553      proc_name = qemu_opt_get(opts, "process");
554      if (proc_name) {
555          os_set_proc_name(proc_name);
556      }
557  
558      return 0;
559  }
560  
561  bool defaults_enabled(void)
562  {
563      return has_defaults;
564  }
565  
566  #ifndef _WIN32
567  static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
568  {
569      int fd, dupfd, flags;
570      int64_t fdset_id;
571      const char *fd_opaque = NULL;
572      AddfdInfo *fdinfo;
573  
574      fd = qemu_opt_get_number(opts, "fd", -1);
575      fdset_id = qemu_opt_get_number(opts, "set", -1);
576      fd_opaque = qemu_opt_get(opts, "opaque");
577  
578      if (fd < 0) {
579          error_setg(errp, "fd option is required and must be non-negative");
580          return -1;
581      }
582  
583      if (fd <= STDERR_FILENO) {
584          error_setg(errp, "fd cannot be a standard I/O stream");
585          return -1;
586      }
587  
588      /*
589       * All fds inherited across exec() necessarily have FD_CLOEXEC
590       * clear, while qemu sets FD_CLOEXEC on all other fds used internally.
591       */
592      flags = fcntl(fd, F_GETFD);
593      if (flags == -1 || (flags & FD_CLOEXEC)) {
594          error_setg(errp, "fd is not valid or already in use");
595          return -1;
596      }
597  
598      if (fdset_id < 0) {
599          error_setg(errp, "set option is required and must be non-negative");
600          return -1;
601      }
602  
603  #ifdef F_DUPFD_CLOEXEC
604      dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
605  #else
606      dupfd = dup(fd);
607      if (dupfd != -1) {
608          qemu_set_cloexec(dupfd);
609      }
610  #endif
611      if (dupfd == -1) {
612          error_setg(errp, "error duplicating fd: %s", strerror(errno));
613          return -1;
614      }
615  
616      /* add the duplicate fd, and optionally the opaque string, to the fd set */
617      fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, fd_opaque,
618                                    &error_abort);
619      g_free(fdinfo);
620  
621      return 0;
622  }
623  
624  static int cleanup_add_fd(void *opaque, QemuOpts *opts, Error **errp)
625  {
626      int fd;
627  
628      fd = qemu_opt_get_number(opts, "fd", -1);
629      close(fd);
630  
631      return 0;
632  }
633  #endif
634  
635  /***********************************************************/
636  /* QEMU Block devices */
637  
638  #define HD_OPTS "media=disk"
639  #define CDROM_OPTS "media=cdrom"
640  #define FD_OPTS ""
641  #define PFLASH_OPTS ""
642  #define MTD_OPTS ""
643  #define SD_OPTS ""
644  
645  static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
646  {
647      BlockInterfaceType *block_default_type = opaque;
648  
649      return drive_new(opts, *block_default_type, errp) == NULL;
650  }
651  
652  static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
653  {
654      if (qemu_opt_get(opts, "snapshot") == NULL) {
655          qemu_opt_set(opts, "snapshot", "on", &error_abort);
656      }
657      return 0;
658  }
659  
660  static void default_drive(int enable, int snapshot, BlockInterfaceType type,
661                            int index, const char *optstr)
662  {
663      QemuOpts *opts;
664      DriveInfo *dinfo;
665  
666      if (!enable || drive_get_by_index(type, index)) {
667          return;
668      }
669  
670      opts = drive_add(type, index, NULL, optstr);
671      if (snapshot) {
672          drive_enable_snapshot(NULL, opts, NULL);
673      }
674  
675      dinfo = drive_new(opts, type, &error_abort);
676      dinfo->is_default = true;
677  
678  }
679  
680  static void configure_blockdev(BlockdevOptionsQueue *bdo_queue,
681                                 MachineClass *machine_class, int snapshot)
682  {
683      /*
684       * If the currently selected machine wishes to override the
685       * units-per-bus property of its default HBA interface type, do so
686       * now.
687       */
688      if (machine_class->units_per_default_bus) {
689          override_max_devs(machine_class->block_default_type,
690                            machine_class->units_per_default_bus);
691      }
692  
693      /* open the virtual block devices */
694      while (!QSIMPLEQ_EMPTY(bdo_queue)) {
695          BlockdevOptionsQueueEntry *bdo = QSIMPLEQ_FIRST(bdo_queue);
696  
697          QSIMPLEQ_REMOVE_HEAD(bdo_queue, entry);
698          loc_push_restore(&bdo->loc);
699          qmp_blockdev_add(bdo->bdo, &error_fatal);
700          loc_pop(&bdo->loc);
701          qapi_free_BlockdevOptions(bdo->bdo);
702          g_free(bdo);
703      }
704      if (snapshot) {
705          qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
706                            NULL, NULL);
707      }
708      if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
709                            &machine_class->block_default_type, &error_fatal)) {
710          /* We printed help */
711          exit(0);
712      }
713  
714      default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
715                    CDROM_OPTS);
716      default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
717      default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
718  
719  }
720  
721  static QemuOptsList qemu_smp_opts = {
722      .name = "smp-opts",
723      .implied_opt_name = "cpus",
724      .merge_lists = true,
725      .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head),
726      .desc = {
727          {
728              .name = "cpus",
729              .type = QEMU_OPT_NUMBER,
730          }, {
731              .name = "drawers",
732              .type = QEMU_OPT_NUMBER,
733          }, {
734              .name = "books",
735              .type = QEMU_OPT_NUMBER,
736          }, {
737              .name = "sockets",
738              .type = QEMU_OPT_NUMBER,
739          }, {
740              .name = "dies",
741              .type = QEMU_OPT_NUMBER,
742          }, {
743              .name = "clusters",
744              .type = QEMU_OPT_NUMBER,
745          }, {
746              .name = "modules",
747              .type = QEMU_OPT_NUMBER,
748          }, {
749              .name = "cores",
750              .type = QEMU_OPT_NUMBER,
751          }, {
752              .name = "threads",
753              .type = QEMU_OPT_NUMBER,
754          }, {
755              .name = "maxcpus",
756              .type = QEMU_OPT_NUMBER,
757          },
758          { /*End of list */ }
759      },
760  };
761  
762  #if defined(CONFIG_POSIX)
763  static QemuOptsList qemu_run_with_opts = {
764      .name = "run-with",
765      .head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head),
766      .desc = {
767  #if defined(CONFIG_LINUX)
768          {
769              .name = "async-teardown",
770              .type = QEMU_OPT_BOOL,
771          },
772  #endif
773          {
774              .name = "chroot",
775              .type = QEMU_OPT_STRING,
776          },
777          {
778              .name = "user",
779              .type = QEMU_OPT_STRING,
780          },
781          { /* end of list */ }
782      },
783  };
784  
785  #define qemu_add_run_with_opts() qemu_add_opts(&qemu_run_with_opts)
786  
787  #else
788  
789  #define qemu_add_run_with_opts()
790  
791  #endif /* CONFIG_POSIX */
792  
793  static void realtime_init(void)
794  {
795      if (enable_mlock) {
796          if (os_mlock() < 0) {
797              error_report("locking memory failed");
798              exit(1);
799          }
800      }
801  }
802  
803  
804  static void configure_msg(QemuOpts *opts)
805  {
806      message_with_timestamp = qemu_opt_get_bool(opts, "timestamp", false);
807      error_with_guestname = qemu_opt_get_bool(opts, "guest-name", false);
808  }
809  
810  
811  /***********************************************************/
812  /* USB devices */
813  
814  static int usb_device_add(const char *devname)
815  {
816      USBDevice *dev = NULL;
817  
818      if (!machine_usb(current_machine)) {
819          return -1;
820      }
821  
822      dev = usbdevice_create(devname);
823      if (!dev)
824          return -1;
825  
826      return 0;
827  }
828  
829  static int usb_parse(const char *cmdline)
830  {
831      int r;
832      r = usb_device_add(cmdline);
833      if (r < 0) {
834          error_report("could not add USB device '%s'", cmdline);
835      }
836      return r;
837  }
838  
839  /***********************************************************/
840  /* machine registration */
841  
842  static MachineClass *find_machine(const char *name, GSList *machines)
843  {
844      GSList *el;
845  
846      for (el = machines; el; el = el->next) {
847          MachineClass *mc = el->data;
848  
849          if (!strcmp(mc->name, name) || !g_strcmp0(mc->alias, name)) {
850              return mc;
851          }
852      }
853  
854      return NULL;
855  }
856  
857  static MachineClass *find_default_machine(GSList *machines)
858  {
859      GSList *el;
860      MachineClass *default_machineclass = NULL;
861  
862      for (el = machines; el; el = el->next) {
863          MachineClass *mc = el->data;
864  
865          if (mc->is_default) {
866              assert(default_machineclass == NULL && "Multiple default machines");
867              default_machineclass = mc;
868          }
869      }
870  
871      return default_machineclass;
872  }
873  
874  static void version(void)
875  {
876      printf("QEMU emulator version " QEMU_FULL_VERSION "\n"
877             QEMU_COPYRIGHT "\n");
878  }
879  
880  static void help(int exitcode)
881  {
882      version();
883      printf("usage: %s [options] [disk_image]\n\n"
884             "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
885              g_get_prgname());
886  
887  #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)    \
888      if ((arch_mask) & arch_type)                               \
889          fputs(opt_help, stdout);
890  
891  #define ARCHHEADING(text, arch_mask) \
892      if ((arch_mask) & arch_type)    \
893          puts(stringify(text));
894  
895  #define DEFHEADING(text) ARCHHEADING(text, QEMU_ARCH_ALL)
896  
897  #include "qemu-options.def"
898  
899      printf("\nDuring emulation, the following keys are useful:\n"
900             "ctrl-alt-f      toggle full screen\n"
901             "ctrl-alt-n      switch to virtual console 'n'\n"
902             "ctrl-alt-g      toggle mouse and keyboard grab\n"
903             "\n"
904             "When using -nographic, press 'ctrl-a h' to get some help.\n"
905             "\n"
906             QEMU_HELP_BOTTOM "\n");
907  
908      exit(exitcode);
909  }
910  
911  enum {
912  
913  #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)     \
914      opt_enum,
915  #define DEFHEADING(text)
916  #define ARCHHEADING(text, arch_mask)
917  
918  #include "qemu-options.def"
919  };
920  
921  #define HAS_ARG 0x0001
922  
923  typedef struct QEMUOption {
924      const char *name;
925      int flags;
926      int index;
927      uint32_t arch_mask;
928  } QEMUOption;
929  
930  static const QEMUOption qemu_options[] = {
931      { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
932  
933  #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)     \
934      { option, opt_arg, opt_enum, arch_mask },
935  #define DEFHEADING(text)
936  #define ARCHHEADING(text, arch_mask)
937  
938  #include "qemu-options.def"
939      { /* end of list */ }
940  };
941  
942  typedef struct VGAInterfaceInfo {
943      const char *opt_name;    /* option name */
944      const char *name;        /* human-readable name */
945      /* Class names indicating that support is available.
946       * If no class is specified, the interface is always available */
947      const char *class_names[2];
948  } VGAInterfaceInfo;
949  
950  static const VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
951      [VGA_NONE] = {
952          .opt_name = "none",
953          .name = "no graphic card",
954      },
955      [VGA_STD] = {
956          .opt_name = "std",
957          .name = "standard VGA",
958          .class_names = { "VGA", "isa-vga" },
959      },
960      [VGA_CIRRUS] = {
961          .opt_name = "cirrus",
962          .name = "Cirrus VGA",
963          .class_names = { "cirrus-vga", "isa-cirrus-vga" },
964      },
965      [VGA_VMWARE] = {
966          .opt_name = "vmware",
967          .name = "VMWare SVGA",
968          .class_names = { "vmware-svga" },
969      },
970      [VGA_VIRTIO] = {
971          .opt_name = "virtio",
972          .name = "Virtio VGA",
973          .class_names = { "virtio-vga" },
974      },
975      [VGA_QXL] = {
976          .opt_name = "qxl",
977          .name = "QXL VGA",
978          .class_names = { "qxl-vga" },
979      },
980      [VGA_TCX] = {
981          .opt_name = "tcx",
982          .name = "TCX framebuffer",
983          .class_names = { "sun-tcx" },
984      },
985      [VGA_CG3] = {
986          .opt_name = "cg3",
987          .name = "CG3 framebuffer",
988          .class_names = { "cgthree" },
989      },
990  #ifdef CONFIG_XEN_BACKEND
991      [VGA_XENFB] = {
992          .opt_name = "xenfb",
993          .name = "Xen paravirtualized framebuffer",
994      },
995  #endif
996  };
997  
998  static bool vga_interface_available(VGAInterfaceType t)
999  {
1000      const VGAInterfaceInfo *ti = &vga_interfaces[t];
1001  
1002      assert(t < VGA_TYPE_MAX);
1003  
1004      if (!ti->class_names[0] || module_object_class_by_name(ti->class_names[0])) {
1005          return true;
1006      }
1007  
1008      if (ti->class_names[1] && module_object_class_by_name(ti->class_names[1])) {
1009          return true;
1010      }
1011  
1012      return false;
1013  }
1014  
1015  static const char *
1016  get_default_vga_model(const MachineClass *machine_class)
1017  {
1018      if (machine_class->default_display) {
1019          for (int t = 0; t < VGA_TYPE_MAX; t++) {
1020              const VGAInterfaceInfo *ti = &vga_interfaces[t];
1021  
1022              if (ti->opt_name && vga_interface_available(t) &&
1023                  g_str_equal(ti->opt_name, machine_class->default_display)) {
1024                  return machine_class->default_display;
1025              }
1026          }
1027  
1028          warn_report_once("Default display '%s' is not available in this binary",
1029                           machine_class->default_display);
1030          return NULL;
1031      } else if (vga_interface_available(VGA_CIRRUS)) {
1032          return "cirrus";
1033      } else if (vga_interface_available(VGA_STD)) {
1034          return "std";
1035      }
1036  
1037      return NULL;
1038  }
1039  
1040  static void select_vgahw(const MachineClass *machine_class, const char *p)
1041  {
1042      const char *opts;
1043      int t;
1044  
1045      if (g_str_equal(p, "help")) {
1046          const char *def = get_default_vga_model(machine_class);
1047  
1048          for (t = 0; t < VGA_TYPE_MAX; t++) {
1049              const VGAInterfaceInfo *ti = &vga_interfaces[t];
1050  
1051              if (vga_interface_available(t) && ti->opt_name) {
1052                  printf("%-20s %s%s\n", ti->opt_name, ti->name ?: "",
1053                          (def && g_str_equal(ti->opt_name, def)) ?
1054                          " (default)" : "");
1055              }
1056          }
1057          exit(0);
1058      }
1059  
1060      assert(vga_interface_type == VGA_NONE);
1061      for (t = 0; t < VGA_TYPE_MAX; t++) {
1062          const VGAInterfaceInfo *ti = &vga_interfaces[t];
1063          if (ti->opt_name && strstart(p, ti->opt_name, &opts)) {
1064              if (!vga_interface_available(t)) {
1065                  error_report("%s not available", ti->name);
1066                  exit(1);
1067              }
1068              vga_interface_type = t;
1069              break;
1070          }
1071      }
1072      if (t == VGA_TYPE_MAX) {
1073      invalid_vga:
1074          error_report("unknown vga type: %s", p);
1075          exit(1);
1076      }
1077      while (*opts) {
1078          const char *nextopt;
1079  
1080          if (strstart(opts, ",retrace=", &nextopt)) {
1081              opts = nextopt;
1082              if (strstart(opts, "dumb", &nextopt))
1083                  vga_retrace_method = VGA_RETRACE_DUMB;
1084              else if (strstart(opts, "precise", &nextopt))
1085                  vga_retrace_method = VGA_RETRACE_PRECISE;
1086              else goto invalid_vga;
1087          } else goto invalid_vga;
1088          opts = nextopt;
1089      }
1090  }
1091  
1092  static void parse_display_qapi(const char *str)
1093  {
1094      DisplayOptions *opts;
1095      Visitor *v;
1096  
1097      v = qobject_input_visitor_new_str(str, "type", &error_fatal);
1098  
1099      visit_type_DisplayOptions(v, NULL, &opts, &error_fatal);
1100      QAPI_CLONE_MEMBERS(DisplayOptions, &dpy, opts);
1101  
1102      qapi_free_DisplayOptions(opts);
1103      visit_free(v);
1104  }
1105  
1106  DisplayOptions *qmp_query_display_options(Error **errp)
1107  {
1108      return QAPI_CLONE(DisplayOptions, &dpy);
1109  }
1110  
1111  static void parse_display(const char *p)
1112  {
1113      if (is_help_option(p)) {
1114          qemu_display_help();
1115          exit(0);
1116      }
1117  
1118  #ifdef CONFIG_VNC
1119      const char *opts;
1120  
1121      if (strstart(p, "vnc", &opts)) {
1122          /*
1123           * vnc isn't a (local) DisplayType but a protocol for remote
1124           * display access.
1125           */
1126          if (*opts == '=') {
1127              vnc_parse(opts + 1);
1128              display_remote++;
1129          } else {
1130              error_report("VNC requires a display argument vnc=<display>");
1131              exit(1);
1132          }
1133          return;
1134      }
1135  #endif
1136  
1137      parse_display_qapi(p);
1138  }
1139  
1140  static inline bool nonempty_str(const char *str)
1141  {
1142      return str && *str;
1143  }
1144  
1145  static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
1146  {
1147      gchar *buf;
1148      size_t size;
1149      const char *name, *file, *str, *gen_id;
1150      FWCfgState *fw_cfg = (FWCfgState *) opaque;
1151  
1152      if (fw_cfg == NULL) {
1153          error_setg(errp, "fw_cfg device not available");
1154          return -1;
1155      }
1156      name = qemu_opt_get(opts, "name");
1157      file = qemu_opt_get(opts, "file");
1158      str = qemu_opt_get(opts, "string");
1159      gen_id = qemu_opt_get(opts, "gen_id");
1160  
1161      /* we need the name, and exactly one of: file, content string, gen_id */
1162      if (!nonempty_str(name) ||
1163          nonempty_str(file) + nonempty_str(str) + nonempty_str(gen_id) != 1) {
1164          error_setg(errp, "name, plus exactly one of file,"
1165                           " string and gen_id, are needed");
1166          return -1;
1167      }
1168      if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) {
1169          error_setg(errp, "name too long (max. %d char)",
1170                     FW_CFG_MAX_FILE_PATH - 1);
1171          return -1;
1172      }
1173      if (nonempty_str(gen_id)) {
1174          /*
1175           * In this particular case where the content is populated
1176           * internally, the "etc/" namespace protection is relaxed,
1177           * so do not emit a warning.
1178           */
1179      } else if (strncmp(name, "opt/", 4) != 0) {
1180          warn_report("externally provided fw_cfg item names "
1181                      "should be prefixed with \"opt/\"");
1182      }
1183      if (nonempty_str(str)) {
1184          size = strlen(str); /* NUL terminator NOT included in fw_cfg blob */
1185          buf = g_memdup(str, size);
1186      } else if (nonempty_str(gen_id)) {
1187          if (!fw_cfg_add_from_generator(fw_cfg, name, gen_id, errp)) {
1188              return -1;
1189          }
1190          return 0;
1191      } else {
1192          GError *err = NULL;
1193          if (!g_file_get_contents(file, &buf, &size, &err)) {
1194              error_setg(errp, "can't load %s: %s", file, err->message);
1195              g_error_free(err);
1196              return -1;
1197          }
1198      }
1199      /* For legacy, keep user files in a specific global order. */
1200      fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER);
1201      fw_cfg_add_file(fw_cfg, name, buf, size);
1202      fw_cfg_reset_order_override(fw_cfg);
1203      return 0;
1204  }
1205  
1206  static int device_help_func(void *opaque, QemuOpts *opts, Error **errp)
1207  {
1208      return qdev_device_help(opts);
1209  }
1210  
1211  static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
1212  {
1213      DeviceState *dev;
1214  
1215      dev = qdev_device_add(opts, errp);
1216      if (!dev && *errp) {
1217          error_report_err(*errp);
1218          return -1;
1219      } else if (dev) {
1220          object_unref(OBJECT(dev));
1221      }
1222      return 0;
1223  }
1224  
1225  static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
1226  {
1227      Error *local_err = NULL;
1228  
1229      if (!qemu_chr_new_from_opts(opts, NULL, &local_err)) {
1230          if (local_err) {
1231              error_propagate(errp, local_err);
1232              return -1;
1233          }
1234          exit(0);
1235      }
1236      return 0;
1237  }
1238  
1239  #ifdef CONFIG_VIRTFS
1240  static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
1241  {
1242      return qemu_fsdev_add(opts, errp);
1243  }
1244  #endif
1245  
1246  static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
1247  {
1248      return monitor_init_opts(opts, errp);
1249  }
1250  
1251  static void monitor_parse(const char *str, const char *mode, bool pretty)
1252  {
1253      static int monitor_device_index = 0;
1254      QemuOpts *opts;
1255      const char *p;
1256      char label[32];
1257  
1258      if (strstart(str, "chardev:", &p)) {
1259          snprintf(label, sizeof(label), "%s", p);
1260      } else {
1261          snprintf(label, sizeof(label), "compat_monitor%d",
1262                   monitor_device_index);
1263          opts = qemu_chr_parse_compat(label, str, true);
1264          if (!opts) {
1265              error_report("parse error: %s", str);
1266              exit(1);
1267          }
1268      }
1269  
1270      opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, &error_fatal);
1271      qemu_opt_set(opts, "mode", mode, &error_abort);
1272      qemu_opt_set(opts, "chardev", label, &error_abort);
1273      if (!strcmp(mode, "control")) {
1274          qemu_opt_set_bool(opts, "pretty", pretty, &error_abort);
1275      } else {
1276          assert(pretty == false);
1277      }
1278      monitor_device_index++;
1279  }
1280  
1281  struct device_config {
1282      enum {
1283          DEV_USB,       /* -usbdevice     */
1284          DEV_SERIAL,    /* -serial        */
1285          DEV_PARALLEL,  /* -parallel      */
1286          DEV_DEBUGCON,  /* -debugcon */
1287          DEV_GDB,       /* -gdb, -s */
1288          DEV_SCLP,      /* s390 sclp */
1289      } type;
1290      const char *cmdline;
1291      Location loc;
1292      QTAILQ_ENTRY(device_config) next;
1293  };
1294  
1295  static QTAILQ_HEAD(, device_config) device_configs =
1296      QTAILQ_HEAD_INITIALIZER(device_configs);
1297  
1298  static void add_device_config(int type, const char *cmdline)
1299  {
1300      struct device_config *conf;
1301  
1302      conf = g_malloc0(sizeof(*conf));
1303      conf->type = type;
1304      conf->cmdline = cmdline;
1305      loc_save(&conf->loc);
1306      QTAILQ_INSERT_TAIL(&device_configs, conf, next);
1307  }
1308  
1309  static int foreach_device_config(int type, int (*func)(const char *cmdline))
1310  {
1311      struct device_config *conf;
1312      int rc;
1313  
1314      QTAILQ_FOREACH(conf, &device_configs, next) {
1315          if (conf->type != type)
1316              continue;
1317          loc_push_restore(&conf->loc);
1318          rc = func(conf->cmdline);
1319          loc_pop(&conf->loc);
1320          if (rc) {
1321              return rc;
1322          }
1323      }
1324      return 0;
1325  }
1326  
1327  static void qemu_disable_default_devices(void)
1328  {
1329      MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
1330  
1331      default_driver_check_json();
1332      qemu_opts_foreach(qemu_find_opts("device"),
1333                        default_driver_check, NULL, NULL);
1334      qemu_opts_foreach(qemu_find_opts("global"),
1335                        default_driver_check, NULL, NULL);
1336  
1337      if (!vga_model && !default_vga) {
1338          vga_interface_type = VGA_DEVICE;
1339          vga_interface_created = true;
1340      }
1341      if (!has_defaults || machine_class->no_serial) {
1342          default_serial = 0;
1343      }
1344      if (!has_defaults || machine_class->no_parallel) {
1345          default_parallel = 0;
1346      }
1347      if (!has_defaults || machine_class->no_floppy) {
1348          default_floppy = 0;
1349      }
1350      if (!has_defaults || machine_class->no_cdrom) {
1351          default_cdrom = 0;
1352      }
1353      if (!has_defaults || machine_class->no_sdcard) {
1354          default_sdcard = 0;
1355      }
1356      if (!has_defaults) {
1357          default_audio = 0;
1358          default_monitor = 0;
1359          default_net = 0;
1360          default_vga = 0;
1361      } else {
1362          if (default_net && machine_class->default_nic &&
1363              !module_object_class_by_name(machine_class->default_nic)) {
1364              warn_report("Default NIC '%s' is not available in this binary",
1365                          machine_class->default_nic);
1366              default_net = 0;
1367          }
1368      }
1369  }
1370  
1371  static void qemu_setup_display(void)
1372  {
1373      if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
1374          if (!qemu_display_find_default(&dpy)) {
1375              dpy.type = DISPLAY_TYPE_NONE;
1376  #if defined(CONFIG_VNC)
1377              vnc_parse("localhost:0,to=99,id=default");
1378              display_remote++;
1379  #endif
1380          }
1381      }
1382      if (dpy.type == DISPLAY_TYPE_DEFAULT) {
1383          dpy.type = DISPLAY_TYPE_NONE;
1384      }
1385  
1386      qemu_display_early_init(&dpy);
1387  }
1388  
1389  static void qemu_create_default_devices(void)
1390  {
1391      MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
1392      const char *vc = qemu_display_get_vc(&dpy);
1393  
1394      if (is_daemonized()) {
1395          /* According to documentation and historically, -nographic redirects
1396           * serial port, parallel port and monitor to stdio, which does not work
1397           * with -daemonize.  We can redirect these to null instead, but since
1398           * -nographic is legacy, let's just error out.
1399           * We disallow -nographic only if all other ports are not redirected
1400           * explicitly, to not break existing legacy setups which uses
1401           * -nographic _and_ redirects all ports explicitly - this is valid
1402           * usage, -nographic is just a no-op in this case.
1403           */
1404          if (nographic
1405              && (default_parallel || default_serial || default_monitor)) {
1406              error_report("-nographic cannot be used with -daemonize");
1407              exit(1);
1408          }
1409      }
1410  
1411      if (nographic) {
1412          if (default_parallel) {
1413              add_device_config(DEV_PARALLEL, "null");
1414          }
1415          if (default_serial && default_monitor) {
1416              add_device_config(DEV_SERIAL, "mon:stdio");
1417          } else {
1418              if (default_serial) {
1419                  add_device_config(DEV_SERIAL, "stdio");
1420              }
1421              if (default_monitor) {
1422                  monitor_parse("stdio", "readline", false);
1423              }
1424          }
1425      } else {
1426          if (default_serial) {
1427              add_device_config(DEV_SERIAL, vc ?: "null");
1428          }
1429          if (default_parallel) {
1430              add_device_config(DEV_PARALLEL, vc ?: "null");
1431          }
1432          if (default_monitor && vc) {
1433              monitor_parse(vc, "readline", false);
1434          }
1435      }
1436  
1437      if (default_net) {
1438          QemuOptsList *net = qemu_find_opts("net");
1439          qemu_opts_parse(net, "nic", true, &error_abort);
1440  #ifdef CONFIG_SLIRP
1441          qemu_opts_parse(net, "user", true, &error_abort);
1442  #endif
1443      }
1444  
1445      /* If no default VGA is requested, the default is "none".  */
1446      if (default_vga) {
1447          vga_model = get_default_vga_model(machine_class);
1448      }
1449      if (vga_model) {
1450          select_vgahw(machine_class, vga_model);
1451      }
1452  }
1453  
1454  static int serial_parse(const char *devname)
1455  {
1456      int index = num_serial_hds;
1457  
1458      serial_hds = g_renew(Chardev *, serial_hds, index + 1);
1459  
1460      if (strcmp(devname, "none") == 0) {
1461          /* Don't allocate a serial device for this index */
1462          serial_hds[index] = NULL;
1463      } else {
1464          char label[32];
1465          snprintf(label, sizeof(label), "serial%d", index);
1466  
1467          serial_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL);
1468          if (!serial_hds[index]) {
1469              error_report("could not connect serial device"
1470                           " to character backend '%s'", devname);
1471              return -1;
1472          }
1473      }
1474      num_serial_hds++;
1475      return 0;
1476  }
1477  
1478  Chardev *serial_hd(int i)
1479  {
1480      assert(i >= 0);
1481      if (i < num_serial_hds) {
1482          return serial_hds[i];
1483      }
1484      return NULL;
1485  }
1486  
1487  static int parallel_parse(const char *devname)
1488  {
1489      static int index = 0;
1490      char label[32];
1491  
1492      if (strcmp(devname, "none") == 0)
1493          return 0;
1494      if (index == MAX_PARALLEL_PORTS) {
1495          error_report("too many parallel ports");
1496          exit(1);
1497      }
1498      snprintf(label, sizeof(label), "parallel%d", index);
1499      parallel_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL);
1500      if (!parallel_hds[index]) {
1501          error_report("could not connect parallel device"
1502                       " to character backend '%s'", devname);
1503          return -1;
1504      }
1505      index++;
1506      return 0;
1507  }
1508  
1509  static int debugcon_parse(const char *devname)
1510  {
1511      QemuOpts *opts;
1512  
1513      if (!qemu_chr_new_mux_mon("debugcon", devname, NULL)) {
1514          error_report("invalid character backend '%s'", devname);
1515          exit(1);
1516      }
1517      opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
1518      if (!opts) {
1519          error_report("already have a debugcon device");
1520          exit(1);
1521      }
1522      qemu_opt_set(opts, "driver", "isa-debugcon", &error_abort);
1523      qemu_opt_set(opts, "chardev", "debugcon", &error_abort);
1524      return 0;
1525  }
1526  
1527  static gint machine_class_cmp(gconstpointer a, gconstpointer b)
1528  {
1529      const MachineClass *mc1 = a, *mc2 = b;
1530      int res;
1531  
1532      if (mc1->family == NULL) {
1533          if (mc2->family == NULL) {
1534              /* Compare standalone machine types against each other; they sort
1535               * in increasing order.
1536               */
1537              return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
1538                            object_class_get_name(OBJECT_CLASS(mc2)));
1539          }
1540  
1541          /* Standalone machine types sort after families. */
1542          return 1;
1543      }
1544  
1545      if (mc2->family == NULL) {
1546          /* Families sort before standalone machine types. */
1547          return -1;
1548      }
1549  
1550      /* Families sort between each other alphabetically increasingly. */
1551      res = strcmp(mc1->family, mc2->family);
1552      if (res != 0) {
1553          return res;
1554      }
1555  
1556      /* Within the same family, machine types sort in decreasing order. */
1557      return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
1558                    object_class_get_name(OBJECT_CLASS(mc1)));
1559  }
1560  
1561  static void machine_help_func(const QDict *qdict)
1562  {
1563      g_autoptr(GSList) machines = NULL;
1564      GSList *el;
1565      const char *type = qdict_get_try_str(qdict, "type");
1566  
1567      machines = object_class_get_list(TYPE_MACHINE, false);
1568      if (type) {
1569          ObjectClass *machine_class = OBJECT_CLASS(find_machine(type, machines));
1570          if (machine_class) {
1571              type_print_class_properties(object_class_get_name(machine_class));
1572              return;
1573          }
1574      }
1575  
1576      printf("Supported machines are:\n");
1577      machines = g_slist_sort(machines, machine_class_cmp);
1578      for (el = machines; el; el = el->next) {
1579          MachineClass *mc = el->data;
1580          if (mc->alias) {
1581              printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
1582          }
1583          printf("%-20s %s%s%s\n", mc->name, mc->desc,
1584                 mc->is_default ? " (default)" : "",
1585                 mc->deprecation_reason ? " (deprecated)" : "");
1586      }
1587  }
1588  
1589  static void
1590  machine_merge_property(const char *propname, QDict *prop, Error **errp)
1591  {
1592      QDict *opts;
1593  
1594      opts = qdict_new();
1595      /* Preserve the caller's reference to prop.  */
1596      qobject_ref(prop);
1597      qdict_put(opts, propname, prop);
1598      keyval_merge(machine_opts_dict, opts, errp);
1599      qobject_unref(opts);
1600  }
1601  
1602  static void
1603  machine_parse_property_opt(QemuOptsList *opts_list, const char *propname,
1604                             const char *arg)
1605  {
1606      QDict *prop = NULL;
1607      bool help = false;
1608  
1609      prop = keyval_parse(arg, opts_list->implied_opt_name, &help, &error_fatal);
1610      if (help) {
1611          qemu_opts_print_help(opts_list, true);
1612          exit(0);
1613      }
1614      machine_merge_property(propname, prop, &error_fatal);
1615      qobject_unref(prop);
1616  }
1617  
1618  static const char *pid_file;
1619  struct UnlinkPidfileNotifier {
1620      Notifier notifier;
1621      char *pid_file_realpath;
1622  };
1623  static struct UnlinkPidfileNotifier qemu_unlink_pidfile_notifier;
1624  
1625  static void qemu_unlink_pidfile(Notifier *n, void *data)
1626  {
1627      struct UnlinkPidfileNotifier *upn;
1628  
1629      upn = DO_UPCAST(struct UnlinkPidfileNotifier, notifier, n);
1630      unlink(upn->pid_file_realpath);
1631  }
1632  
1633  static const QEMUOption *lookup_opt(int argc, char **argv,
1634                                      const char **poptarg, int *poptind)
1635  {
1636      const QEMUOption *popt;
1637      int optind = *poptind;
1638      char *r = argv[optind];
1639      const char *optarg;
1640  
1641      loc_set_cmdline(argv, optind, 1);
1642      optind++;
1643      /* Treat --foo the same as -foo.  */
1644      if (r[1] == '-')
1645          r++;
1646      popt = qemu_options;
1647      for(;;) {
1648          if (!popt->name) {
1649              error_report("invalid option");
1650              exit(1);
1651          }
1652          if (!strcmp(popt->name, r + 1))
1653              break;
1654          popt++;
1655      }
1656      if (popt->flags & HAS_ARG) {
1657          if (optind >= argc) {
1658              error_report("requires an argument");
1659              exit(1);
1660          }
1661          optarg = argv[optind++];
1662          loc_set_cmdline(argv, optind - 2, 2);
1663      } else {
1664          optarg = NULL;
1665      }
1666  
1667      *poptarg = optarg;
1668      *poptind = optind;
1669  
1670      return popt;
1671  }
1672  
1673  static MachineClass *select_machine(QDict *qdict, Error **errp)
1674  {
1675      ERRP_GUARD();
1676      const char *machine_type = qdict_get_try_str(qdict, "type");
1677      g_autoptr(GSList) machines = object_class_get_list(TYPE_MACHINE, false);
1678      MachineClass *machine_class = NULL;
1679  
1680      if (machine_type) {
1681          machine_class = find_machine(machine_type, machines);
1682          if (!machine_class) {
1683              error_setg(errp, "unsupported machine type: \"%s\"", machine_type);
1684          }
1685          qdict_del(qdict, "type");
1686      } else {
1687          machine_class = find_default_machine(machines);
1688          if (!machine_class) {
1689              error_setg(errp, "No machine specified, and there is no default");
1690          }
1691      }
1692  
1693      if (!machine_class) {
1694          error_append_hint(errp,
1695                            "Use -machine help to list supported machines\n");
1696      }
1697      return machine_class;
1698  }
1699  
1700  static int object_parse_property_opt(Object *obj,
1701                                       const char *name, const char *value,
1702                                       const char *skip, Error **errp)
1703  {
1704      if (g_str_equal(name, skip)) {
1705          return 0;
1706      }
1707  
1708      if (!object_property_parse(obj, name, value, errp)) {
1709          return -1;
1710      }
1711  
1712      return 0;
1713  }
1714  
1715  /* *Non*recursively replace underscores with dashes in QDict keys.  */
1716  static void keyval_dashify(QDict *qdict, Error **errp)
1717  {
1718      const QDictEntry *ent, *next;
1719      char *p;
1720  
1721      for (ent = qdict_first(qdict); ent; ent = next) {
1722          g_autofree char *new_key = NULL;
1723  
1724          next = qdict_next(qdict, ent);
1725          if (!strchr(ent->key, '_')) {
1726              continue;
1727          }
1728          new_key = g_strdup(ent->key);
1729          for (p = new_key; *p; p++) {
1730              if (*p == '_') {
1731                  *p = '-';
1732              }
1733          }
1734          if (qdict_haskey(qdict, new_key)) {
1735              error_setg(errp, "Conflict between '%s' and '%s'", ent->key, new_key);
1736              return;
1737          }
1738          qobject_ref(ent->value);
1739          qdict_put_obj(qdict, new_key, ent->value);
1740          qdict_del(qdict, ent->key);
1741      }
1742  }
1743  
1744  static void qemu_apply_legacy_machine_options(QDict *qdict)
1745  {
1746      const char *value;
1747      QObject *prop;
1748  
1749      keyval_dashify(qdict, &error_fatal);
1750  
1751      /* Legacy options do not correspond to MachineState properties.  */
1752      value = qdict_get_try_str(qdict, "accel");
1753      if (value) {
1754          accelerators = g_strdup(value);
1755          qdict_del(qdict, "accel");
1756      }
1757  
1758      value = qdict_get_try_str(qdict, "igd-passthru");
1759      if (value) {
1760          object_register_sugar_prop(ACCEL_CLASS_NAME("xen"), "igd-passthru", value,
1761                                     false);
1762          qdict_del(qdict, "igd-passthru");
1763      }
1764  
1765      value = qdict_get_try_str(qdict, "kvm-shadow-mem");
1766      if (value) {
1767          object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kvm-shadow-mem", value,
1768                                     false);
1769          qdict_del(qdict, "kvm-shadow-mem");
1770      }
1771  
1772      value = qdict_get_try_str(qdict, "kernel-irqchip");
1773      if (value) {
1774          object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kernel-irqchip", value,
1775                                     false);
1776          object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqchip", value,
1777                                     false);
1778          qdict_del(qdict, "kernel-irqchip");
1779      }
1780  
1781      value = qdict_get_try_str(qdict, "memory-backend");
1782      if (value) {
1783          if (mem_path) {
1784              error_report("'-mem-path' can't be used together with"
1785                           "'-machine memory-backend'");
1786              exit(EXIT_FAILURE);
1787          }
1788  
1789          /* Resolved later.  */
1790          ram_memdev_id = g_strdup(value);
1791          qdict_del(qdict, "memory-backend");
1792      }
1793  
1794      prop = qdict_get(qdict, "memory");
1795      if (prop) {
1796          have_custom_ram_size =
1797              qobject_type(prop) == QTYPE_QDICT &&
1798              qdict_haskey(qobject_to(QDict, prop), "size");
1799      }
1800  }
1801  
1802  static void object_option_foreach_add(bool (*type_opt_predicate)(const char *))
1803  {
1804      ObjectOption *opt, *next;
1805  
1806      QTAILQ_FOREACH_SAFE(opt, &object_opts, next, next) {
1807          const char *type = ObjectType_str(opt->opts->qom_type);
1808          if (type_opt_predicate(type)) {
1809              user_creatable_add_qapi(opt->opts, &error_fatal);
1810              qapi_free_ObjectOptions(opt->opts);
1811              QTAILQ_REMOVE(&object_opts, opt, next);
1812              g_free(opt);
1813          }
1814      }
1815  }
1816  
1817  static void object_option_add_visitor(Visitor *v)
1818  {
1819      ObjectOption *opt = g_new0(ObjectOption, 1);
1820      visit_type_ObjectOptions(v, NULL, &opt->opts, &error_fatal);
1821      QTAILQ_INSERT_TAIL(&object_opts, opt, next);
1822  }
1823  
1824  static void object_option_parse(const char *str)
1825  {
1826      QemuOpts *opts;
1827      const char *type;
1828      Visitor *v;
1829  
1830      if (str[0] == '{') {
1831          QObject *obj = qobject_from_json(str, &error_fatal);
1832  
1833          v = qobject_input_visitor_new(obj);
1834          qobject_unref(obj);
1835      } else {
1836          opts = qemu_opts_parse_noisily(qemu_find_opts("object"),
1837                                         str, true);
1838          if (!opts) {
1839              exit(1);
1840          }
1841  
1842          type = qemu_opt_get(opts, "qom-type");
1843          if (!type) {
1844              error_report(QERR_MISSING_PARAMETER, "qom-type");
1845              exit(1);
1846          }
1847          if (user_creatable_print_help(type, opts)) {
1848              exit(0);
1849          }
1850  
1851          v = opts_visitor_new(opts);
1852      }
1853  
1854      object_option_add_visitor(v);
1855      visit_free(v);
1856  }
1857  
1858  /*
1859   * Very early object creation, before the sandbox options have been activated.
1860   */
1861  static bool object_create_pre_sandbox(const char *type)
1862  {
1863      /*
1864       * Objects should in general not get initialized "too early" without
1865       * a reason. If you add one, state the reason in a comment!
1866       */
1867  
1868      /*
1869       * Reason: -sandbox on,resourcecontrol=deny disallows setting CPU
1870       * affinity of threads.
1871       */
1872      if (g_str_equal(type, "thread-context")) {
1873          return true;
1874      }
1875  
1876      return false;
1877  }
1878  
1879  /*
1880   * Initial object creation happens before all other
1881   * QEMU data types are created. The majority of objects
1882   * can be created at this point. The rng-egd object
1883   * cannot be created here, as it depends on the chardev
1884   * already existing.
1885   */
1886  static bool object_create_early(const char *type)
1887  {
1888      /*
1889       * Objects should not be made "delayed" without a reason.  If you
1890       * add one, state the reason in a comment!
1891       */
1892  
1893      /* Reason: already created. */
1894      if (object_create_pre_sandbox(type)) {
1895          return false;
1896      }
1897  
1898      /* Reason: property "chardev" */
1899      if (g_str_equal(type, "rng-egd") ||
1900          g_str_equal(type, "qtest")) {
1901          return false;
1902      }
1903  
1904  #if defined(CONFIG_VHOST_USER) && defined(CONFIG_LINUX)
1905      /* Reason: cryptodev-vhost-user property "chardev" */
1906      if (g_str_equal(type, "cryptodev-vhost-user")) {
1907          return false;
1908      }
1909  #endif
1910  
1911      /* Reason: vhost-user-blk-server property "node-name" */
1912      if (g_str_equal(type, "vhost-user-blk-server")) {
1913          return false;
1914      }
1915      /*
1916       * Reason: filter-* property "netdev" etc.
1917       */
1918      if (g_str_equal(type, "filter-buffer") ||
1919          g_str_equal(type, "filter-dump") ||
1920          g_str_equal(type, "filter-mirror") ||
1921          g_str_equal(type, "filter-redirector") ||
1922          g_str_equal(type, "colo-compare") ||
1923          g_str_equal(type, "filter-rewriter") ||
1924          g_str_equal(type, "filter-replay")) {
1925          return false;
1926      }
1927  
1928      /*
1929       * Allocation of large amounts of memory may delay
1930       * chardev initialization for too long, and trigger timeouts
1931       * on software that waits for a monitor socket to be created
1932       */
1933      if (g_str_has_prefix(type, "memory-backend-")) {
1934          return false;
1935      }
1936  
1937      return true;
1938  }
1939  
1940  static void qemu_apply_machine_options(QDict *qdict)
1941  {
1942      object_set_properties_from_keyval(OBJECT(current_machine), qdict, false, &error_fatal);
1943  
1944      if (semihosting_enabled(false) && !semihosting_get_argc()) {
1945          /* fall back to the -kernel/-append */
1946          semihosting_arg_fallback(current_machine->kernel_filename, current_machine->kernel_cmdline);
1947      }
1948  
1949      if (current_machine->smp.cpus > 1) {
1950          replay_add_blocker("multiple CPUs");
1951      }
1952  }
1953  
1954  static void qemu_create_early_backends(void)
1955  {
1956      MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
1957  #if defined(CONFIG_SDL)
1958      const bool use_sdl = (dpy.type == DISPLAY_TYPE_SDL);
1959  #else
1960      const bool use_sdl = false;
1961  #endif
1962  #if defined(CONFIG_GTK)
1963      const bool use_gtk = (dpy.type == DISPLAY_TYPE_GTK);
1964  #else
1965      const bool use_gtk = false;
1966  #endif
1967  
1968      if (dpy.has_window_close && !use_gtk && !use_sdl) {
1969          error_report("window-close is only valid for GTK and SDL, "
1970                       "ignoring option");
1971      }
1972  
1973      qemu_console_early_init();
1974  
1975      if (dpy.has_gl && dpy.gl != DISPLAY_GL_MODE_OFF && display_opengl == 0) {
1976  #if defined(CONFIG_OPENGL)
1977          error_report("OpenGL is not supported by display backend '%s'",
1978                       DisplayType_str(dpy.type));
1979  #else
1980          error_report("OpenGL support was not enabled in this build of QEMU");
1981  #endif
1982          exit(1);
1983      }
1984  
1985      object_option_foreach_add(object_create_early);
1986  
1987      /* spice needs the timers to be initialized by this point */
1988      /* spice must initialize before audio as it changes the default audiodev */
1989      /* spice must initialize before chardevs (for spicevmc and spiceport) */
1990      qemu_spice.init();
1991  
1992      qemu_opts_foreach(qemu_find_opts("chardev"),
1993                        chardev_init_func, NULL, &error_fatal);
1994  
1995  #ifdef CONFIG_VIRTFS
1996      qemu_opts_foreach(qemu_find_opts("fsdev"),
1997                        fsdev_init_func, NULL, &error_fatal);
1998  #endif
1999  
2000      /*
2001       * Note: we need to create audio and block backends before
2002       * setting machine properties, so they can be referred to.
2003       */
2004      configure_blockdev(&bdo_queue, machine_class, snapshot);
2005      audio_init_audiodevs();
2006      if (default_audio) {
2007          audio_create_default_audiodevs();
2008      }
2009  }
2010  
2011  
2012  /*
2013   * The remainder of object creation happens after the
2014   * creation of chardev, fsdev, net clients and device data types.
2015   */
2016  static bool object_create_late(const char *type)
2017  {
2018      return !object_create_early(type) && !object_create_pre_sandbox(type);
2019  }
2020  
2021  static void qemu_create_late_backends(void)
2022  {
2023      if (qtest_chrdev) {
2024          qtest_server_init(qtest_chrdev, qtest_log, &error_fatal);
2025      }
2026  
2027      net_init_clients();
2028  
2029      object_option_foreach_add(object_create_late);
2030  
2031      /*
2032       * Wait for any outstanding memory prealloc from created memory
2033       * backends to complete.
2034       */
2035      if (!qemu_finish_async_prealloc_mem(&error_fatal)) {
2036          exit(1);
2037      }
2038  
2039      if (tpm_init() < 0) {
2040          exit(1);
2041      }
2042  
2043      qemu_opts_foreach(qemu_find_opts("mon"),
2044                        mon_init_func, NULL, &error_fatal);
2045  
2046      if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
2047          exit(1);
2048      if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
2049          exit(1);
2050      if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
2051          exit(1);
2052  
2053      /* now chardevs have been created we may have semihosting to connect */
2054      qemu_semihosting_chardev_init();
2055  }
2056  
2057  static void qemu_resolve_machine_memdev(void)
2058  {
2059      if (ram_memdev_id) {
2060          Object *backend;
2061          ram_addr_t backend_size;
2062  
2063          backend = object_resolve_path_type(ram_memdev_id,
2064                                             TYPE_MEMORY_BACKEND, NULL);
2065          if (!backend) {
2066              error_report("Memory backend '%s' not found", ram_memdev_id);
2067              exit(EXIT_FAILURE);
2068          }
2069          if (!have_custom_ram_size) {
2070              backend_size = object_property_get_uint(backend, "size",  &error_abort);
2071              current_machine->ram_size = backend_size;
2072          }
2073          object_property_set_link(OBJECT(current_machine),
2074                                   "memory-backend", backend, &error_fatal);
2075      }
2076  }
2077  
2078  static void parse_memory_options(void)
2079  {
2080      QemuOpts *opts = qemu_find_opts_singleton("memory");
2081      QDict *dict, *prop;
2082      const char *mem_str;
2083      Location loc;
2084  
2085      loc_push_none(&loc);
2086      qemu_opts_loc_restore(opts);
2087  
2088      prop = qdict_new();
2089  
2090      if (qemu_opt_get_size(opts, "size", 0) != 0) {
2091          /* Fix up legacy suffix-less format */
2092          mem_str = qemu_opt_get(opts, "size");
2093          if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
2094              g_autofree char *mib_str = g_strdup_printf("%sM", mem_str);
2095              qdict_put_str(prop, "size", mib_str);
2096          } else {
2097              qdict_put_str(prop, "size", mem_str);
2098          }
2099      }
2100  
2101      if (qemu_opt_get(opts, "maxmem")) {
2102          qdict_put_str(prop, "max-size", qemu_opt_get(opts, "maxmem"));
2103      }
2104      if (qemu_opt_get(opts, "slots")) {
2105          qdict_put_str(prop, "slots", qemu_opt_get(opts, "slots"));
2106      }
2107  
2108      dict = qdict_new();
2109      qdict_put(dict, "memory", prop);
2110      keyval_merge(machine_opts_dict, dict, &error_fatal);
2111      qobject_unref(dict);
2112      loc_pop(&loc);
2113  }
2114  
2115  static void qemu_create_machine(QDict *qdict)
2116  {
2117      MachineClass *machine_class = select_machine(qdict, &error_fatal);
2118      object_set_machine_compat_props(machine_class->compat_props);
2119  
2120      current_machine = MACHINE(object_new_with_class(OBJECT_CLASS(machine_class)));
2121      object_property_add_child(object_get_root(), "machine",
2122                                OBJECT(current_machine));
2123      object_property_add_child(container_get(OBJECT(current_machine),
2124                                              "/unattached"),
2125                                "sysbus", OBJECT(sysbus_get_default()));
2126  
2127      if (machine_class->minimum_page_bits) {
2128          if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
2129              /* This would be a board error: specifying a minimum smaller than
2130               * a target's compile-time fixed setting.
2131               */
2132              g_assert_not_reached();
2133          }
2134      }
2135  
2136      cpu_exec_init_all();
2137  
2138      if (machine_class->hw_version) {
2139          qemu_set_hw_version(machine_class->hw_version);
2140      }
2141  
2142      /*
2143       * Get the default machine options from the machine if it is not already
2144       * specified either by the configuration file or by the command line.
2145       */
2146      if (machine_class->default_machine_opts) {
2147          QDict *default_opts =
2148              keyval_parse(machine_class->default_machine_opts, NULL, NULL,
2149                           &error_abort);
2150          qemu_apply_legacy_machine_options(default_opts);
2151          object_set_properties_from_keyval(OBJECT(current_machine), default_opts,
2152                                            false, &error_abort);
2153          qobject_unref(default_opts);
2154      }
2155  }
2156  
2157  static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
2158  {
2159      GlobalProperty *g;
2160  
2161      g = g_malloc0(sizeof(*g));
2162      g->driver   = qemu_opt_get(opts, "driver");
2163      g->property = qemu_opt_get(opts, "property");
2164      g->value    = qemu_opt_get(opts, "value");
2165      qdev_prop_register_global(g);
2166      return 0;
2167  }
2168  
2169  /*
2170   * Return whether configuration group @group is stored in QemuOpts, or
2171   * recorded as one or more QDicts by qemu_record_config_group.
2172   */
2173  static bool is_qemuopts_group(const char *group)
2174  {
2175      if (g_str_equal(group, "object") ||
2176          g_str_equal(group, "audiodev") ||
2177          g_str_equal(group, "machine") ||
2178          g_str_equal(group, "smp-opts") ||
2179          g_str_equal(group, "boot-opts")) {
2180          return false;
2181      }
2182      return true;
2183  }
2184  
2185  static void qemu_record_config_group(const char *group, QDict *dict,
2186                                       bool from_json, Error **errp)
2187  {
2188      if (g_str_equal(group, "object")) {
2189          Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict));
2190          object_option_add_visitor(v);
2191          visit_free(v);
2192  
2193      } else if (g_str_equal(group, "audiodev")) {
2194          Audiodev *dev = NULL;
2195          Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict));
2196          if (visit_type_Audiodev(v, NULL, &dev, errp)) {
2197              audio_define(dev);
2198          }
2199          visit_free(v);
2200  
2201      } else if (g_str_equal(group, "machine")) {
2202          /*
2203           * Cannot merge string-valued and type-safe dictionaries, so JSON
2204           * is not accepted yet for -M.
2205           */
2206          assert(!from_json);
2207          keyval_merge(machine_opts_dict, dict, errp);
2208      } else if (g_str_equal(group, "smp-opts")) {
2209          machine_merge_property("smp", dict, &error_fatal);
2210      } else if (g_str_equal(group, "boot-opts")) {
2211          machine_merge_property("boot", dict, &error_fatal);
2212      } else {
2213          abort();
2214      }
2215  }
2216  
2217  /*
2218   * Parse non-QemuOpts config file groups, pass the rest to
2219   * qemu_config_do_parse.
2220   */
2221  static void qemu_parse_config_group(const char *group, QDict *qdict,
2222                                      void *opaque, Error **errp)
2223  {
2224      QObject *crumpled;
2225      if (is_qemuopts_group(group)) {
2226          qemu_config_do_parse(group, qdict, opaque, errp);
2227          return;
2228      }
2229  
2230      crumpled = qdict_crumple(qdict, errp);
2231      if (!crumpled) {
2232          return;
2233      }
2234      switch (qobject_type(crumpled)) {
2235      case QTYPE_QDICT:
2236          qemu_record_config_group(group, qobject_to(QDict, crumpled), false, errp);
2237          break;
2238      case QTYPE_QLIST:
2239          error_setg(errp, "Lists cannot be at top level of a configuration section");
2240          break;
2241      default:
2242          g_assert_not_reached();
2243      }
2244      qobject_unref(crumpled);
2245  }
2246  
2247  static void qemu_read_default_config_file(Error **errp)
2248  {
2249      ERRP_GUARD();
2250      int ret;
2251      g_autofree char *file = get_relocated_path(CONFIG_QEMU_CONFDIR "/qemu.conf");
2252  
2253      ret = qemu_read_config_file(file, qemu_parse_config_group, errp);
2254      if (ret < 0) {
2255          if (ret == -ENOENT) {
2256              error_free(*errp);
2257              *errp = NULL;
2258          }
2259      }
2260  }
2261  
2262  static void qemu_set_option(const char *str, Error **errp)
2263  {
2264      char group[64], id[64], arg[64];
2265      QemuOptsList *list;
2266      QemuOpts *opts;
2267      int rc, offset;
2268  
2269      rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
2270      if (rc < 3 || str[offset] != '=') {
2271          error_setg(errp, "can't parse: \"%s\"", str);
2272          return;
2273      }
2274  
2275      if (!is_qemuopts_group(group)) {
2276          error_setg(errp, "-set is not supported with %s", group);
2277      } else {
2278          list = qemu_find_opts_err(group, errp);
2279          if (list) {
2280              opts = qemu_opts_find(list, id);
2281              if (!opts) {
2282                  error_setg(errp, "there is no %s \"%s\" defined", group, id);
2283                  return;
2284              }
2285              qemu_opt_set(opts, arg, str + offset + 1, errp);
2286          }
2287      }
2288  }
2289  
2290  static void user_register_global_props(void)
2291  {
2292      qemu_opts_foreach(qemu_find_opts("global"),
2293                        global_init_func, NULL, NULL);
2294  }
2295  
2296  static int do_configure_icount(void *opaque, QemuOpts *opts, Error **errp)
2297  {
2298      return !icount_configure(opts, errp);
2299  }
2300  
2301  static int accelerator_set_property(void *opaque,
2302                                  const char *name, const char *value,
2303                                  Error **errp)
2304  {
2305      return object_parse_property_opt(opaque, name, value, "accel", errp);
2306  }
2307  
2308  static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
2309  {
2310      bool *p_init_failed = opaque;
2311      const char *acc = qemu_opt_get(opts, "accel");
2312      AccelClass *ac = accel_find(acc);
2313      AccelState *accel;
2314      int ret;
2315      bool qtest_with_kvm;
2316  
2317      if (!acc) {
2318          error_setg(errp, QERR_MISSING_PARAMETER, "accel");
2319          goto bad;
2320      }
2321  
2322      qtest_with_kvm = g_str_equal(acc, "kvm") && qtest_chrdev != NULL;
2323  
2324      if (!ac) {
2325          if (!qtest_with_kvm) {
2326              error_report("invalid accelerator %s", acc);
2327          }
2328          goto bad;
2329      }
2330      accel = ACCEL(object_new_with_class(OBJECT_CLASS(ac)));
2331      object_apply_compat_props(OBJECT(accel));
2332      qemu_opt_foreach(opts, accelerator_set_property,
2333                       accel,
2334                       &error_fatal);
2335  
2336      ret = accel_init_machine(accel, current_machine);
2337      if (ret < 0) {
2338          if (!qtest_with_kvm || ret != -ENOENT) {
2339              error_report("failed to initialize %s: %s", acc, strerror(-ret));
2340          }
2341          goto bad;
2342      }
2343  
2344      return 1;
2345  
2346  bad:
2347      *p_init_failed = true;
2348      return 0;
2349  }
2350  
2351  static void configure_accelerators(const char *progname)
2352  {
2353      bool init_failed = false;
2354  
2355      qemu_opts_foreach(qemu_find_opts("icount"),
2356                        do_configure_icount, NULL, &error_fatal);
2357  
2358      if (QTAILQ_EMPTY(&qemu_accel_opts.head)) {
2359          char **accel_list, **tmp;
2360  
2361          if (accelerators == NULL) {
2362              /* Select the default accelerator */
2363              bool have_tcg = accel_find("tcg");
2364              bool have_kvm = accel_find("kvm");
2365  
2366              if (have_tcg && have_kvm) {
2367                  if (g_str_has_suffix(progname, "kvm")) {
2368                      /* If the program name ends with "kvm", we prefer KVM */
2369                      accelerators = "kvm:tcg";
2370                  } else {
2371                      accelerators = "tcg:kvm";
2372                  }
2373              } else if (have_kvm) {
2374                  accelerators = "kvm";
2375              } else if (have_tcg) {
2376                  accelerators = "tcg";
2377              } else {
2378                  error_report("No accelerator selected and"
2379                               " no default accelerator available");
2380                  exit(1);
2381              }
2382          }
2383          accel_list = g_strsplit(accelerators, ":", 0);
2384  
2385          for (tmp = accel_list; *tmp; tmp++) {
2386              /*
2387               * Filter invalid accelerators here, to prevent obscenities
2388               * such as "-machine accel=tcg,,thread=single".
2389               */
2390              if (accel_find(*tmp)) {
2391                  qemu_opts_parse_noisily(qemu_find_opts("accel"), *tmp, true);
2392              } else {
2393                  init_failed = true;
2394                  error_report("invalid accelerator %s", *tmp);
2395              }
2396          }
2397          g_strfreev(accel_list);
2398      } else {
2399          if (accelerators != NULL) {
2400              error_report("The -accel and \"-machine accel=\" options are incompatible");
2401              exit(1);
2402          }
2403      }
2404  
2405      if (!qemu_opts_foreach(qemu_find_opts("accel"),
2406                             do_configure_accelerator, &init_failed, &error_fatal)) {
2407          if (!init_failed) {
2408              error_report("no accelerator found");
2409          }
2410          exit(1);
2411      }
2412  
2413      if (init_failed && !qtest_chrdev) {
2414          error_report("falling back to %s", current_accel_name());
2415      }
2416  
2417      if (icount_enabled() && !tcg_enabled()) {
2418          error_report("-icount is not allowed with hardware virtualization");
2419          exit(1);
2420      }
2421  }
2422  
2423  static void qemu_validate_options(const QDict *machine_opts)
2424  {
2425      const char *kernel_filename = qdict_get_try_str(machine_opts, "kernel");
2426      const char *initrd_filename = qdict_get_try_str(machine_opts, "initrd");
2427      const char *kernel_cmdline = qdict_get_try_str(machine_opts, "append");
2428  
2429      if (kernel_filename == NULL) {
2430           if (kernel_cmdline != NULL) {
2431                error_report("-append only allowed with -kernel option");
2432                exit(1);
2433            }
2434  
2435            if (initrd_filename != NULL) {
2436                error_report("-initrd only allowed with -kernel option");
2437                exit(1);
2438            }
2439      }
2440  
2441      if (loadvm && incoming) {
2442          error_report("'incoming' and 'loadvm' options are mutually exclusive");
2443          exit(EXIT_FAILURE);
2444      }
2445      if (loadvm && preconfig_requested) {
2446          error_report("'preconfig' and 'loadvm' options are "
2447                       "mutually exclusive");
2448          exit(EXIT_FAILURE);
2449      }
2450      if (incoming && preconfig_requested && strcmp(incoming, "defer") != 0) {
2451          error_report("'preconfig' supports '-incoming defer' only");
2452          exit(EXIT_FAILURE);
2453      }
2454  
2455  #ifdef CONFIG_CURSES
2456      if (is_daemonized() && dpy.type == DISPLAY_TYPE_CURSES) {
2457          error_report("curses display cannot be used with -daemonize");
2458          exit(1);
2459      }
2460  #endif
2461  }
2462  
2463  static void qemu_process_sugar_options(void)
2464  {
2465      if (mem_prealloc) {
2466          QObject *smp = qdict_get(machine_opts_dict, "smp");
2467          if (smp && qobject_type(smp) == QTYPE_QDICT) {
2468              QObject *cpus = qdict_get(qobject_to(QDict, smp), "cpus");
2469              if (cpus && qobject_type(cpus) == QTYPE_QSTRING) {
2470                  const char *val = qstring_get_str(qobject_to(QString, cpus));
2471                  object_register_sugar_prop("memory-backend", "prealloc-threads",
2472                                             val, false);
2473              }
2474          }
2475          object_register_sugar_prop("memory-backend", "prealloc", "on", false);
2476      }
2477  }
2478  
2479  /* -action processing */
2480  
2481  /*
2482   * Process all the -action parameters parsed from cmdline.
2483   */
2484  static int process_runstate_actions(void *opaque, QemuOpts *opts, Error **errp)
2485  {
2486      Error *local_err = NULL;
2487      QDict *qdict = qemu_opts_to_qdict(opts, NULL);
2488      QObject *ret = NULL;
2489      qmp_marshal_set_action(qdict, &ret, &local_err);
2490      qobject_unref(ret);
2491      qobject_unref(qdict);
2492      if (local_err) {
2493          error_propagate(errp, local_err);
2494          return 1;
2495      }
2496      return 0;
2497  }
2498  
2499  static void qemu_process_early_options(void)
2500  {
2501      qemu_opts_foreach(qemu_find_opts("name"),
2502                        parse_name, NULL, &error_fatal);
2503  
2504      object_option_foreach_add(object_create_pre_sandbox);
2505  
2506  #ifdef CONFIG_SECCOMP
2507      QemuOptsList *olist = qemu_find_opts_err("sandbox", NULL);
2508      if (olist) {
2509          qemu_opts_foreach(olist, parse_sandbox, NULL, &error_fatal);
2510      }
2511  #endif
2512  
2513      if (qemu_opts_foreach(qemu_find_opts("action"),
2514                            process_runstate_actions, NULL, &error_fatal)) {
2515          exit(1);
2516      }
2517  
2518  #ifndef _WIN32
2519      qemu_opts_foreach(qemu_find_opts("add-fd"),
2520                        parse_add_fd, NULL, &error_fatal);
2521  
2522      qemu_opts_foreach(qemu_find_opts("add-fd"),
2523                        cleanup_add_fd, NULL, &error_fatal);
2524  #endif
2525  
2526      /* Open the logfile at this point and set the log mask if necessary.  */
2527      {
2528          int mask = 0;
2529          if (log_mask) {
2530              mask = qemu_str_to_log_mask(log_mask);
2531              if (!mask) {
2532                  qemu_print_log_usage(stdout);
2533                  exit(1);
2534              }
2535          }
2536          qemu_set_log_filename_flags(log_file, mask, &error_fatal);
2537      }
2538  
2539      qemu_add_default_firmwarepath();
2540  }
2541  
2542  static void qemu_process_help_options(void)
2543  {
2544      /*
2545       * Check for -cpu help and -device help before we call select_machine(),
2546       * which will return an error if the architecture has no default machine
2547       * type and the user did not specify one, so that the user doesn't need
2548       * to say '-cpu help -machine something'.
2549       */
2550      if (cpu_option && is_help_option(cpu_option)) {
2551          list_cpus();
2552          exit(0);
2553      }
2554  
2555      if (qemu_opts_foreach(qemu_find_opts("device"),
2556                            device_help_func, NULL, NULL)) {
2557          exit(0);
2558      }
2559  
2560      /* -L help lists the data directories and exits. */
2561      if (list_data_dirs) {
2562          qemu_list_data_dirs();
2563          exit(0);
2564      }
2565  }
2566  
2567  static void qemu_maybe_daemonize(const char *pid_file)
2568  {
2569      Error *err = NULL;
2570  
2571      os_daemonize();
2572      rcu_disable_atfork();
2573  
2574      if (pid_file) {
2575          char *pid_file_realpath = NULL;
2576  
2577          if (!qemu_write_pidfile(pid_file, &err)) {
2578              error_reportf_err(err, "cannot create PID file: ");
2579              exit(1);
2580          }
2581  
2582          pid_file_realpath = g_malloc0(PATH_MAX);
2583          if (!realpath(pid_file, pid_file_realpath)) {
2584              if (errno != ENOENT) {
2585                  warn_report("not removing PID file on exit: cannot resolve PID "
2586                              "file path: %s: %s", pid_file, strerror(errno));
2587              }
2588              return;
2589          }
2590  
2591          qemu_unlink_pidfile_notifier = (struct UnlinkPidfileNotifier) {
2592              .notifier = {
2593                  .notify = qemu_unlink_pidfile,
2594              },
2595              .pid_file_realpath = pid_file_realpath,
2596          };
2597          qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier.notifier);
2598      }
2599  }
2600  
2601  static void qemu_init_displays(void)
2602  {
2603      DisplayState *ds;
2604  
2605      /* init local displays */
2606      ds = init_displaystate();
2607      qemu_display_init(ds, &dpy);
2608  
2609      /* must be after terminal init, SDL library changes signal handlers */
2610      os_setup_signal_handling();
2611  
2612      /* init remote displays */
2613  #ifdef CONFIG_VNC
2614      qemu_opts_foreach(qemu_find_opts("vnc"),
2615                        vnc_init_func, NULL, &error_fatal);
2616  #endif
2617  
2618      if (using_spice) {
2619          qemu_spice.display_init();
2620      }
2621  }
2622  
2623  static void qemu_init_board(void)
2624  {
2625      /* process plugin before CPUs are created, but once -smp has been parsed */
2626      qemu_plugin_load_list(&plugin_list, &error_fatal);
2627  
2628      /* From here on we enter MACHINE_PHASE_INITIALIZED.  */
2629      machine_run_board_init(current_machine, mem_path, &error_fatal);
2630  
2631      drive_check_orphaned();
2632  
2633      realtime_init();
2634  }
2635  
2636  static void qemu_create_cli_devices(void)
2637  {
2638      DeviceOption *opt;
2639  
2640      soundhw_init();
2641  
2642      qemu_opts_foreach(qemu_find_opts("fw_cfg"),
2643                        parse_fw_cfg, fw_cfg_find(), &error_fatal);
2644  
2645      /* init USB devices */
2646      if (machine_usb(current_machine)) {
2647          if (foreach_device_config(DEV_USB, usb_parse) < 0)
2648              exit(1);
2649      }
2650  
2651      /* init generic devices */
2652      rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
2653      qemu_opts_foreach(qemu_find_opts("device"),
2654                        device_init_func, NULL, &error_fatal);
2655      QTAILQ_FOREACH(opt, &device_opts, next) {
2656          DeviceState *dev;
2657          loc_push_restore(&opt->loc);
2658          /*
2659           * TODO Eventually we should call qmp_device_add() here to make sure it
2660           * behaves the same, but QMP still has to accept incorrectly typed
2661           * options until libvirt is fixed and we want to be strict on the CLI
2662           * from the start, so call qdev_device_add_from_qdict() directly for
2663           * now.
2664           */
2665          dev = qdev_device_add_from_qdict(opt->opts, true, &error_fatal);
2666          object_unref(OBJECT(dev));
2667          loc_pop(&opt->loc);
2668      }
2669      rom_reset_order_override();
2670  }
2671  
2672  static bool qemu_machine_creation_done(Error **errp)
2673  {
2674      MachineState *machine = MACHINE(qdev_get_machine());
2675  
2676      /* Did we create any drives that we failed to create a device for? */
2677      drive_check_orphaned();
2678  
2679      /* Don't warn about the default network setup that you get if
2680       * no command line -net or -netdev options are specified. There
2681       * are two cases that we would otherwise complain about:
2682       * (1) board doesn't support a NIC but the implicit "-net nic"
2683       * requested one
2684       * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic"
2685       * sets up a nic that isn't connected to anything.
2686       */
2687      if (!default_net && (!qtest_enabled() || has_defaults)) {
2688          net_check_clients();
2689      }
2690  
2691      qdev_prop_check_globals();
2692  
2693      qdev_machine_creation_done();
2694  
2695      if (machine->cgs && !machine->cgs->ready) {
2696          error_setg(errp, "accelerator does not support confidential guest %s",
2697                     object_get_typename(OBJECT(machine->cgs)));
2698          exit(1);
2699      }
2700  
2701      if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
2702          error_setg(errp, "could not start gdbserver");
2703          return false;
2704      }
2705      if (!vga_interface_created && !default_vga &&
2706          vga_interface_type != VGA_NONE) {
2707          warn_report("A -vga option was passed but this machine "
2708                      "type does not use that option; "
2709                      "No VGA device has been created");
2710      }
2711      return true;
2712  }
2713  
2714  void qmp_x_exit_preconfig(Error **errp)
2715  {
2716      if (phase_check(PHASE_MACHINE_INITIALIZED)) {
2717          error_setg(errp, "The command is permitted only before machine initialization");
2718          return;
2719      }
2720  
2721      qemu_init_board();
2722      qemu_create_cli_devices();
2723      if (!qemu_machine_creation_done(errp)) {
2724          return;
2725      }
2726  
2727      if (loadvm) {
2728          RunState state = autostart ? RUN_STATE_RUNNING : runstate_get();
2729          load_snapshot(loadvm, NULL, false, NULL, &error_fatal);
2730          load_snapshot_resume(state);
2731      }
2732      if (replay_mode != REPLAY_MODE_NONE) {
2733          replay_vmstate_init();
2734      }
2735  
2736      if (incoming) {
2737          Error *local_err = NULL;
2738          if (strcmp(incoming, "defer") != 0) {
2739              qmp_migrate_incoming(incoming, false, NULL, true, true,
2740                                   &local_err);
2741              if (local_err) {
2742                  error_reportf_err(local_err, "-incoming %s: ", incoming);
2743                  exit(1);
2744              }
2745          }
2746      } else if (autostart) {
2747          qmp_cont(NULL);
2748      }
2749  }
2750  
2751  void qemu_init(int argc, char **argv)
2752  {
2753      QemuOpts *opts;
2754      QemuOpts *icount_opts = NULL, *accel_opts = NULL;
2755      QemuOptsList *olist;
2756      int optind;
2757      const char *optarg;
2758      MachineClass *machine_class;
2759      bool userconfig = true;
2760      FILE *vmstate_dump_file = NULL;
2761  
2762      qemu_add_opts(&qemu_drive_opts);
2763      qemu_add_drive_opts(&qemu_legacy_drive_opts);
2764      qemu_add_drive_opts(&qemu_common_drive_opts);
2765      qemu_add_drive_opts(&qemu_drive_opts);
2766      qemu_add_drive_opts(&bdrv_runtime_opts);
2767      qemu_add_opts(&qemu_chardev_opts);
2768      qemu_add_opts(&qemu_device_opts);
2769      qemu_add_opts(&qemu_netdev_opts);
2770      qemu_add_opts(&qemu_nic_opts);
2771      qemu_add_opts(&qemu_net_opts);
2772      qemu_add_opts(&qemu_rtc_opts);
2773      qemu_add_opts(&qemu_global_opts);
2774      qemu_add_opts(&qemu_mon_opts);
2775      qemu_add_opts(&qemu_trace_opts);
2776      qemu_plugin_add_opts();
2777      qemu_add_opts(&qemu_option_rom_opts);
2778      qemu_add_opts(&qemu_accel_opts);
2779      qemu_add_opts(&qemu_mem_opts);
2780      qemu_add_opts(&qemu_smp_opts);
2781      qemu_add_opts(&qemu_boot_opts);
2782      qemu_add_opts(&qemu_add_fd_opts);
2783      qemu_add_opts(&qemu_object_opts);
2784      qemu_add_opts(&qemu_tpmdev_opts);
2785      qemu_add_opts(&qemu_overcommit_opts);
2786      qemu_add_opts(&qemu_msg_opts);
2787      qemu_add_opts(&qemu_name_opts);
2788      qemu_add_opts(&qemu_numa_opts);
2789      qemu_add_opts(&qemu_icount_opts);
2790      qemu_add_opts(&qemu_semihosting_config_opts);
2791      qemu_add_opts(&qemu_fw_cfg_opts);
2792      qemu_add_opts(&qemu_action_opts);
2793      qemu_add_run_with_opts();
2794      module_call_init(MODULE_INIT_OPTS);
2795  
2796      error_init(argv[0]);
2797      qemu_init_exec_dir(argv[0]);
2798  
2799      os_setup_limits();
2800  
2801      qemu_init_arch_modules();
2802  
2803      qemu_init_subsystems();
2804  
2805      /* first pass of option parsing */
2806      optind = 1;
2807      while (optind < argc) {
2808          if (argv[optind][0] != '-') {
2809              /* disk image */
2810              optind++;
2811          } else {
2812              const QEMUOption *popt;
2813  
2814              popt = lookup_opt(argc, argv, &optarg, &optind);
2815              switch (popt->index) {
2816              case QEMU_OPTION_nouserconfig:
2817                  userconfig = false;
2818                  break;
2819              }
2820          }
2821      }
2822  
2823      machine_opts_dict = qdict_new();
2824      if (userconfig) {
2825          qemu_read_default_config_file(&error_fatal);
2826      }
2827  
2828      /* second pass of option parsing */
2829      optind = 1;
2830      for(;;) {
2831          if (optind >= argc)
2832              break;
2833          if (argv[optind][0] != '-') {
2834              loc_set_cmdline(argv, optind, 1);
2835              drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
2836          } else {
2837              const QEMUOption *popt;
2838  
2839              popt = lookup_opt(argc, argv, &optarg, &optind);
2840              if (!(popt->arch_mask & arch_type)) {
2841                  error_report("Option not supported for this target");
2842                  exit(1);
2843              }
2844              switch(popt->index) {
2845              case QEMU_OPTION_cpu:
2846                  /* hw initialization will check this */
2847                  cpu_option = optarg;
2848                  break;
2849              case QEMU_OPTION_hda:
2850              case QEMU_OPTION_hdb:
2851              case QEMU_OPTION_hdc:
2852              case QEMU_OPTION_hdd:
2853                  drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
2854                            HD_OPTS);
2855                  break;
2856              case QEMU_OPTION_blockdev:
2857                  {
2858                      Visitor *v;
2859                      BlockdevOptionsQueueEntry *bdo;
2860  
2861                      v = qobject_input_visitor_new_str(optarg, "driver",
2862                                                        &error_fatal);
2863  
2864                      bdo = g_new(BlockdevOptionsQueueEntry, 1);
2865                      visit_type_BlockdevOptions(v, NULL, &bdo->bdo,
2866                                                 &error_fatal);
2867                      visit_free(v);
2868                      loc_save(&bdo->loc);
2869                      QSIMPLEQ_INSERT_TAIL(&bdo_queue, bdo, entry);
2870                      break;
2871                  }
2872              case QEMU_OPTION_drive:
2873                  opts = qemu_opts_parse_noisily(qemu_find_opts("drive"),
2874                                                 optarg, false);
2875                  if (opts == NULL) {
2876                      exit(1);
2877                  }
2878                  break;
2879              case QEMU_OPTION_set:
2880                  qemu_set_option(optarg, &error_fatal);
2881                  break;
2882              case QEMU_OPTION_global:
2883                  if (qemu_global_option(optarg) != 0)
2884                      exit(1);
2885                  break;
2886              case QEMU_OPTION_mtdblock:
2887                  drive_add(IF_MTD, -1, optarg, MTD_OPTS);
2888                  break;
2889              case QEMU_OPTION_sd:
2890                  drive_add(IF_SD, -1, optarg, SD_OPTS);
2891                  break;
2892              case QEMU_OPTION_pflash:
2893                  drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
2894                  break;
2895              case QEMU_OPTION_snapshot:
2896                  snapshot = 1;
2897                  replay_add_blocker("-snapshot");
2898                  break;
2899              case QEMU_OPTION_numa:
2900                  opts = qemu_opts_parse_noisily(qemu_find_opts("numa"),
2901                                                 optarg, true);
2902                  if (!opts) {
2903                      exit(1);
2904                  }
2905                  break;
2906              case QEMU_OPTION_display:
2907                  parse_display(optarg);
2908                  break;
2909              case QEMU_OPTION_nographic:
2910                  qdict_put_str(machine_opts_dict, "graphics", "off");
2911                  nographic = true;
2912                  dpy.type = DISPLAY_TYPE_NONE;
2913                  break;
2914              case QEMU_OPTION_kernel:
2915                  qdict_put_str(machine_opts_dict, "kernel", optarg);
2916                  break;
2917              case QEMU_OPTION_initrd:
2918                  qdict_put_str(machine_opts_dict, "initrd", optarg);
2919                  break;
2920              case QEMU_OPTION_append:
2921                  qdict_put_str(machine_opts_dict, "append", optarg);
2922                  break;
2923              case QEMU_OPTION_dtb:
2924                  qdict_put_str(machine_opts_dict, "dtb", optarg);
2925                  break;
2926              case QEMU_OPTION_cdrom:
2927                  drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
2928                  break;
2929              case QEMU_OPTION_boot:
2930                  machine_parse_property_opt(qemu_find_opts("boot-opts"), "boot", optarg);
2931                  break;
2932              case QEMU_OPTION_fda:
2933              case QEMU_OPTION_fdb:
2934                  drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
2935                            optarg, FD_OPTS);
2936                  break;
2937              case QEMU_OPTION_no_fd_bootchk:
2938                  qdict_put_str(machine_opts_dict, "fd-bootchk", "off");
2939                  break;
2940              case QEMU_OPTION_netdev:
2941                  default_net = 0;
2942                  if (netdev_is_modern(optarg)) {
2943                      netdev_parse_modern(optarg);
2944                  } else {
2945                      net_client_parse(qemu_find_opts("netdev"), optarg);
2946                  }
2947                  break;
2948              case QEMU_OPTION_nic:
2949                  default_net = 0;
2950                  net_client_parse(qemu_find_opts("nic"), optarg);
2951                  break;
2952              case QEMU_OPTION_net:
2953                  default_net = 0;
2954                  net_client_parse(qemu_find_opts("net"), optarg);
2955                  break;
2956  #ifdef CONFIG_LIBISCSI
2957              case QEMU_OPTION_iscsi:
2958                  opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"),
2959                                                 optarg, false);
2960                  if (!opts) {
2961                      exit(1);
2962                  }
2963                  break;
2964  #endif
2965              case QEMU_OPTION_audiodev:
2966                  default_audio = 0;
2967                  audio_parse_option(optarg);
2968                  break;
2969              case QEMU_OPTION_audio: {
2970                  bool help;
2971                  char *model = NULL;
2972                  Audiodev *dev = NULL;
2973                  Visitor *v;
2974                  QDict *dict = keyval_parse(optarg, "driver", &help, &error_fatal);
2975                  default_audio = 0;
2976                  if (help || (qdict_haskey(dict, "driver") &&
2977                               is_help_option(qdict_get_str(dict, "driver")))) {
2978                      audio_help();
2979                      exit(EXIT_SUCCESS);
2980                  }
2981                  if (!qdict_haskey(dict, "id")) {
2982                      qdict_put_str(dict, "id", "audiodev0");
2983                  }
2984                  if (qdict_haskey(dict, "model")) {
2985                      model = g_strdup(qdict_get_str(dict, "model"));
2986                      qdict_del(dict, "model");
2987                      if (is_help_option(model)) {
2988                          show_valid_soundhw();
2989                          exit(0);
2990                      }
2991                  }
2992                  v = qobject_input_visitor_new_keyval(QOBJECT(dict));
2993                  qobject_unref(dict);
2994                  visit_type_Audiodev(v, NULL, &dev, &error_fatal);
2995                  visit_free(v);
2996                  if (model) {
2997                      audio_define(dev);
2998                      select_soundhw(model, dev->id);
2999                      g_free(model);
3000                  } else {
3001                      audio_define_default(dev, &error_fatal);
3002                  }
3003                  break;
3004              }
3005              case QEMU_OPTION_h:
3006                  help(0);
3007                  break;
3008              case QEMU_OPTION_version:
3009                  version();
3010                  exit(0);
3011                  break;
3012              case QEMU_OPTION_m:
3013                  opts = qemu_opts_parse_noisily(qemu_find_opts("memory"), optarg, true);
3014                  if (opts == NULL) {
3015                      exit(1);
3016                  }
3017                  break;
3018  #ifdef CONFIG_TPM
3019              case QEMU_OPTION_tpmdev:
3020                  if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) {
3021                      exit(1);
3022                  }
3023                  break;
3024  #endif
3025              case QEMU_OPTION_mempath:
3026                  mem_path = optarg;
3027                  break;
3028              case QEMU_OPTION_mem_prealloc:
3029                  mem_prealloc = 1;
3030                  break;
3031              case QEMU_OPTION_d:
3032                  log_mask = optarg;
3033                  break;
3034              case QEMU_OPTION_D:
3035                  log_file = optarg;
3036                  break;
3037              case QEMU_OPTION_DFILTER:
3038                  qemu_set_dfilter_ranges(optarg, &error_fatal);
3039                  break;
3040  #if defined(CONFIG_TCG) && defined(CONFIG_LINUX)
3041              case QEMU_OPTION_perfmap:
3042                  perf_enable_perfmap();
3043                  break;
3044              case QEMU_OPTION_jitdump:
3045                  perf_enable_jitdump();
3046                  break;
3047  #endif
3048              case QEMU_OPTION_seed:
3049                  qemu_guest_random_seed_main(optarg, &error_fatal);
3050                  break;
3051              case QEMU_OPTION_s:
3052                  add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
3053                  break;
3054              case QEMU_OPTION_gdb:
3055                  add_device_config(DEV_GDB, optarg);
3056                  break;
3057              case QEMU_OPTION_L:
3058                  if (is_help_option(optarg)) {
3059                      list_data_dirs = true;
3060                  } else {
3061                      qemu_add_data_dir(g_strdup(optarg));
3062                  }
3063                  break;
3064              case QEMU_OPTION_bios:
3065                  qdict_put_str(machine_opts_dict, "firmware", optarg);
3066                  break;
3067              case QEMU_OPTION_S:
3068                  autostart = 0;
3069                  break;
3070              case QEMU_OPTION_k:
3071                  keyboard_layout = optarg;
3072                  break;
3073              case QEMU_OPTION_vga:
3074                  vga_model = optarg;
3075                  default_vga = 0;
3076                  break;
3077              case QEMU_OPTION_g:
3078                  {
3079                      const char *p;
3080                      int w, h, depth;
3081                      p = optarg;
3082                      w = strtol(p, (char **)&p, 10);
3083                      if (w <= 0) {
3084                      graphic_error:
3085                          error_report("invalid resolution or depth");
3086                          exit(1);
3087                      }
3088                      if (*p != 'x')
3089                          goto graphic_error;
3090                      p++;
3091                      h = strtol(p, (char **)&p, 10);
3092                      if (h <= 0)
3093                          goto graphic_error;
3094                      if (*p == 'x') {
3095                          p++;
3096                          depth = strtol(p, (char **)&p, 10);
3097                          if (depth != 1 && depth != 2 && depth != 4 &&
3098                              depth != 8 && depth != 15 && depth != 16 &&
3099                              depth != 24 && depth != 32)
3100                              goto graphic_error;
3101                      } else if (*p == '\0') {
3102                          depth = graphic_depth;
3103                      } else {
3104                          goto graphic_error;
3105                      }
3106  
3107                      graphic_width = w;
3108                      graphic_height = h;
3109                      graphic_depth = depth;
3110                  }
3111                  break;
3112              case QEMU_OPTION_echr:
3113                  {
3114                      char *r;
3115                      term_escape_char = strtol(optarg, &r, 0);
3116                      if (r == optarg)
3117                          printf("Bad argument to echr\n");
3118                      break;
3119                  }
3120              case QEMU_OPTION_monitor:
3121                  default_monitor = 0;
3122                  if (strncmp(optarg, "none", 4)) {
3123                      monitor_parse(optarg, "readline", false);
3124                  }
3125                  break;
3126              case QEMU_OPTION_qmp:
3127                  monitor_parse(optarg, "control", false);
3128                  default_monitor = 0;
3129                  break;
3130              case QEMU_OPTION_qmp_pretty:
3131                  monitor_parse(optarg, "control", true);
3132                  default_monitor = 0;
3133                  break;
3134              case QEMU_OPTION_mon:
3135                  opts = qemu_opts_parse_noisily(qemu_find_opts("mon"), optarg,
3136                                                 true);
3137                  if (!opts) {
3138                      exit(1);
3139                  }
3140                  default_monitor = 0;
3141                  break;
3142              case QEMU_OPTION_chardev:
3143                  opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"),
3144                                                 optarg, true);
3145                  if (!opts) {
3146                      exit(1);
3147                  }
3148                  break;
3149              case QEMU_OPTION_fsdev:
3150                  olist = qemu_find_opts("fsdev");
3151                  if (!olist) {
3152                      error_report("fsdev support is disabled");
3153                      exit(1);
3154                  }
3155                  opts = qemu_opts_parse_noisily(olist, optarg, true);
3156                  if (!opts) {
3157                      exit(1);
3158                  }
3159                  break;
3160              case QEMU_OPTION_virtfs: {
3161                  QemuOpts *fsdev;
3162                  QemuOpts *device;
3163                  const char *writeout, *sock_fd, *socket, *path, *security_model,
3164                             *multidevs;
3165  
3166                  olist = qemu_find_opts("virtfs");
3167                  if (!olist) {
3168                      error_report("virtfs support is disabled");
3169                      exit(1);
3170                  }
3171                  opts = qemu_opts_parse_noisily(olist, optarg, true);
3172                  if (!opts) {
3173                      exit(1);
3174                  }
3175  
3176                  if (qemu_opt_get(opts, "fsdriver") == NULL ||
3177                      qemu_opt_get(opts, "mount_tag") == NULL) {
3178                      error_report("Usage: -virtfs fsdriver,mount_tag=tag");
3179                      exit(1);
3180                  }
3181                  fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
3182                                           qemu_opts_id(opts) ?:
3183                                           qemu_opt_get(opts, "mount_tag"),
3184                                           1, NULL);
3185                  if (!fsdev) {
3186                      error_report("duplicate or invalid fsdev id: %s",
3187                                   qemu_opt_get(opts, "mount_tag"));
3188                      exit(1);
3189                  }
3190  
3191                  writeout = qemu_opt_get(opts, "writeout");
3192                  if (writeout) {
3193  #ifdef CONFIG_SYNC_FILE_RANGE
3194                      qemu_opt_set(fsdev, "writeout", writeout, &error_abort);
3195  #else
3196                      error_report("writeout=immediate not supported "
3197                                   "on this platform");
3198                      exit(1);
3199  #endif
3200                  }
3201                  qemu_opt_set(fsdev, "fsdriver",
3202                               qemu_opt_get(opts, "fsdriver"), &error_abort);
3203                  path = qemu_opt_get(opts, "path");
3204                  if (path) {
3205                      qemu_opt_set(fsdev, "path", path, &error_abort);
3206                  }
3207                  security_model = qemu_opt_get(opts, "security_model");
3208                  if (security_model) {
3209                      qemu_opt_set(fsdev, "security_model", security_model,
3210                                   &error_abort);
3211                  }
3212                  socket = qemu_opt_get(opts, "socket");
3213                  if (socket) {
3214                      qemu_opt_set(fsdev, "socket", socket, &error_abort);
3215                  }
3216                  sock_fd = qemu_opt_get(opts, "sock_fd");
3217                  if (sock_fd) {
3218                      qemu_opt_set(fsdev, "sock_fd", sock_fd, &error_abort);
3219                  }
3220  
3221                  qemu_opt_set_bool(fsdev, "readonly",
3222                                    qemu_opt_get_bool(opts, "readonly", 0),
3223                                    &error_abort);
3224                  multidevs = qemu_opt_get(opts, "multidevs");
3225                  if (multidevs) {
3226                      qemu_opt_set(fsdev, "multidevs", multidevs, &error_abort);
3227                  }
3228                  device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3229                                            &error_abort);
3230                  qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3231                  qemu_opt_set(device, "fsdev",
3232                               qemu_opts_id(fsdev), &error_abort);
3233                  qemu_opt_set(device, "mount_tag",
3234                               qemu_opt_get(opts, "mount_tag"), &error_abort);
3235                  break;
3236              }
3237              case QEMU_OPTION_serial:
3238                  add_device_config(DEV_SERIAL, optarg);
3239                  default_serial = 0;
3240                  if (strncmp(optarg, "mon:", 4) == 0) {
3241                      default_monitor = 0;
3242                  }
3243                  break;
3244              case QEMU_OPTION_action:
3245                  olist = qemu_find_opts("action");
3246                  if (!qemu_opts_parse_noisily(olist, optarg, false)) {
3247                       exit(1);
3248                  }
3249                  break;
3250              case QEMU_OPTION_watchdog_action: {
3251                  opts = qemu_opts_create(qemu_find_opts("action"), NULL, 0, &error_abort);
3252                  qemu_opt_set(opts, "watchdog", optarg, &error_abort);
3253                  break;
3254              }
3255              case QEMU_OPTION_parallel:
3256                  add_device_config(DEV_PARALLEL, optarg);
3257                  default_parallel = 0;
3258                  if (strncmp(optarg, "mon:", 4) == 0) {
3259                      default_monitor = 0;
3260                  }
3261                  break;
3262              case QEMU_OPTION_debugcon:
3263                  add_device_config(DEV_DEBUGCON, optarg);
3264                  break;
3265              case QEMU_OPTION_loadvm:
3266                  loadvm = optarg;
3267                  break;
3268              case QEMU_OPTION_full_screen:
3269                  dpy.has_full_screen = true;
3270                  dpy.full_screen = true;
3271                  break;
3272              case QEMU_OPTION_pidfile:
3273                  pid_file = optarg;
3274                  break;
3275              case QEMU_OPTION_win2k_hack:
3276                  object_register_sugar_prop("ide-device", "win2k-install-hack", "true", true);
3277                  break;
3278              case QEMU_OPTION_acpitable:
3279                  opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),
3280                                                 optarg, true);
3281                  if (!opts) {
3282                      exit(1);
3283                  }
3284                  acpi_table_add(opts, &error_fatal);
3285                  break;
3286              case QEMU_OPTION_smbios:
3287                  opts = qemu_opts_parse_noisily(qemu_find_opts("smbios"),
3288                                                 optarg, false);
3289                  if (!opts) {
3290                      exit(1);
3291                  }
3292                  smbios_entry_add(opts, &error_fatal);
3293                  break;
3294              case QEMU_OPTION_fwcfg:
3295                  opts = qemu_opts_parse_noisily(qemu_find_opts("fw_cfg"),
3296                                                 optarg, true);
3297                  if (opts == NULL) {
3298                      exit(1);
3299                  }
3300                  break;
3301              case QEMU_OPTION_preconfig:
3302                  preconfig_requested = true;
3303                  break;
3304              case QEMU_OPTION_enable_kvm:
3305                  qdict_put_str(machine_opts_dict, "accel", "kvm");
3306                  break;
3307              case QEMU_OPTION_M:
3308              case QEMU_OPTION_machine:
3309                  {
3310                      bool help;
3311  
3312                      keyval_parse_into(machine_opts_dict, optarg, "type", &help, &error_fatal);
3313                      if (help) {
3314                          machine_help_func(machine_opts_dict);
3315                          exit(EXIT_SUCCESS);
3316                      }
3317                      break;
3318                  }
3319              case QEMU_OPTION_accel:
3320                  accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
3321                                                       optarg, true);
3322                  optarg = qemu_opt_get(accel_opts, "accel");
3323                  if (!optarg || is_help_option(optarg)) {
3324                      printf("Accelerators supported in QEMU binary:\n");
3325                      GSList *el, *accel_list = object_class_get_list(TYPE_ACCEL,
3326                                                                      false);
3327                      for (el = accel_list; el; el = el->next) {
3328                          gchar *typename = g_strdup(object_class_get_name(
3329                                                     OBJECT_CLASS(el->data)));
3330                          /* omit qtest which is used for tests only */
3331                          if (g_strcmp0(typename, ACCEL_CLASS_NAME("qtest")) &&
3332                              g_str_has_suffix(typename, ACCEL_CLASS_SUFFIX)) {
3333                              gchar **optname = g_strsplit(typename,
3334                                                           ACCEL_CLASS_SUFFIX, 0);
3335                              printf("%s\n", optname[0]);
3336                              g_strfreev(optname);
3337                          }
3338                          g_free(typename);
3339                      }
3340                      g_slist_free(accel_list);
3341                      exit(0);
3342                  }
3343                  break;
3344              case QEMU_OPTION_usb:
3345                  qdict_put_str(machine_opts_dict, "usb", "on");
3346                  break;
3347              case QEMU_OPTION_usbdevice:
3348                  qdict_put_str(machine_opts_dict, "usb", "on");
3349                  add_device_config(DEV_USB, optarg);
3350                  break;
3351              case QEMU_OPTION_device:
3352                  if (optarg[0] == '{') {
3353                      QObject *obj = qobject_from_json(optarg, &error_fatal);
3354                      DeviceOption *opt = g_new0(DeviceOption, 1);
3355                      opt->opts = qobject_to(QDict, obj);
3356                      loc_save(&opt->loc);
3357                      assert(opt->opts != NULL);
3358                      QTAILQ_INSERT_TAIL(&device_opts, opt, next);
3359                  } else {
3360                      if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
3361                                                   optarg, true)) {
3362                          exit(1);
3363                      }
3364                  }
3365                  break;
3366              case QEMU_OPTION_smp:
3367                  machine_parse_property_opt(qemu_find_opts("smp-opts"),
3368                                             "smp", optarg);
3369                  break;
3370  #ifdef CONFIG_VNC
3371              case QEMU_OPTION_vnc:
3372                  vnc_parse(optarg);
3373                  display_remote++;
3374                  break;
3375  #endif
3376              case QEMU_OPTION_no_reboot:
3377                  olist = qemu_find_opts("action");
3378                  qemu_opts_parse_noisily(olist, "reboot=shutdown", false);
3379                  break;
3380              case QEMU_OPTION_no_shutdown:
3381                  olist = qemu_find_opts("action");
3382                  qemu_opts_parse_noisily(olist, "shutdown=pause", false);
3383                  break;
3384              case QEMU_OPTION_uuid:
3385                  if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
3386                      error_report("failed to parse UUID string: wrong format");
3387                      exit(1);
3388                  }
3389                  qemu_uuid_set = true;
3390                  break;
3391              case QEMU_OPTION_option_rom:
3392                  if (nb_option_roms >= MAX_OPTION_ROMS) {
3393                      error_report("too many option ROMs");
3394                      exit(1);
3395                  }
3396                  opts = qemu_opts_parse_noisily(qemu_find_opts("option-rom"),
3397                                                 optarg, true);
3398                  if (!opts) {
3399                      exit(1);
3400                  }
3401                  option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile");
3402                  option_rom[nb_option_roms].bootindex =
3403                      qemu_opt_get_number(opts, "bootindex", -1);
3404                  if (!option_rom[nb_option_roms].name) {
3405                      error_report("Option ROM file is not specified");
3406                      exit(1);
3407                  }
3408                  nb_option_roms++;
3409                  break;
3410              case QEMU_OPTION_semihosting:
3411                  qemu_semihosting_enable();
3412                  break;
3413              case QEMU_OPTION_semihosting_config:
3414                  if (qemu_semihosting_config_options(optarg) != 0) {
3415                      exit(1);
3416                  }
3417                  break;
3418              case QEMU_OPTION_name:
3419                  opts = qemu_opts_parse_noisily(qemu_find_opts("name"),
3420                                                 optarg, true);
3421                  if (!opts) {
3422                      exit(1);
3423                  }
3424                  /* Capture guest name if -msg guest-name is used later */
3425                  error_guest_name = qemu_opt_get(opts, "guest");
3426                  break;
3427              case QEMU_OPTION_prom_env:
3428                  if (nb_prom_envs >= MAX_PROM_ENVS) {
3429                      error_report("too many prom variables");
3430                      exit(1);
3431                  }
3432                  prom_envs[nb_prom_envs] = optarg;
3433                  nb_prom_envs++;
3434                  break;
3435              case QEMU_OPTION_old_param:
3436                  old_param = 1;
3437                  break;
3438              case QEMU_OPTION_rtc:
3439                  opts = qemu_opts_parse_noisily(qemu_find_opts("rtc"), optarg,
3440                                                 false);
3441                  if (!opts) {
3442                      exit(1);
3443                  }
3444                  break;
3445              case QEMU_OPTION_icount:
3446                  icount_opts = qemu_opts_parse_noisily(qemu_find_opts("icount"),
3447                                                        optarg, true);
3448                  if (!icount_opts) {
3449                      exit(1);
3450                  }
3451                  break;
3452              case QEMU_OPTION_incoming:
3453                  if (!incoming) {
3454                      runstate_set(RUN_STATE_INMIGRATE);
3455                  }
3456                  incoming = optarg;
3457                  break;
3458              case QEMU_OPTION_only_migratable:
3459                  only_migratable = 1;
3460                  break;
3461              case QEMU_OPTION_nodefaults:
3462                  has_defaults = 0;
3463                  break;
3464              case QEMU_OPTION_xen_domid:
3465                  if (!(accel_find("xen")) && !(accel_find("kvm"))) {
3466                      error_report("Option not supported for this target");
3467                      exit(1);
3468                  }
3469                  xen_domid = atoi(optarg);
3470                  break;
3471              case QEMU_OPTION_xen_attach:
3472                  if (!(accel_find("xen"))) {
3473                      error_report("Option not supported for this target");
3474                      exit(1);
3475                  }
3476                  xen_mode = XEN_ATTACH;
3477                  break;
3478              case QEMU_OPTION_xen_domid_restrict:
3479                  if (!(accel_find("xen"))) {
3480                      error_report("Option not supported for this target");
3481                      exit(1);
3482                  }
3483                  xen_domid_restrict = true;
3484                  break;
3485              case QEMU_OPTION_trace:
3486                  trace_opt_parse(optarg);
3487                  break;
3488              case QEMU_OPTION_plugin:
3489                  qemu_plugin_opt_parse(optarg, &plugin_list);
3490                  break;
3491              case QEMU_OPTION_readconfig:
3492                  qemu_read_config_file(optarg, qemu_parse_config_group, &error_fatal);
3493                  break;
3494  #ifdef CONFIG_SPICE
3495              case QEMU_OPTION_spice:
3496                  opts = qemu_opts_parse_noisily(qemu_find_opts("spice"), optarg, false);
3497                  if (!opts) {
3498                      exit(1);
3499                  }
3500                  display_remote++;
3501                  break;
3502  #endif
3503              case QEMU_OPTION_qtest:
3504                  qtest_chrdev = optarg;
3505                  break;
3506              case QEMU_OPTION_qtest_log:
3507                  qtest_log = optarg;
3508                  break;
3509              case QEMU_OPTION_sandbox:
3510                  olist = qemu_find_opts("sandbox");
3511                  if (!olist) {
3512  #ifndef CONFIG_SECCOMP
3513                      error_report("-sandbox support is not enabled "
3514                                   "in this QEMU binary");
3515  #endif
3516                      exit(1);
3517                  }
3518  
3519                  opts = qemu_opts_parse_noisily(olist, optarg, true);
3520                  if (!opts) {
3521                      exit(1);
3522                  }
3523                  break;
3524              case QEMU_OPTION_add_fd:
3525  #ifndef _WIN32
3526                  opts = qemu_opts_parse_noisily(qemu_find_opts("add-fd"),
3527                                                 optarg, false);
3528                  if (!opts) {
3529                      exit(1);
3530                  }
3531  #else
3532                  error_report("File descriptor passing is disabled on this "
3533                               "platform");
3534                  exit(1);
3535  #endif
3536                  break;
3537              case QEMU_OPTION_object:
3538                  object_option_parse(optarg);
3539                  break;
3540              case QEMU_OPTION_overcommit:
3541                  opts = qemu_opts_parse_noisily(qemu_find_opts("overcommit"),
3542                                                 optarg, false);
3543                  if (!opts) {
3544                      exit(1);
3545                  }
3546                  enable_mlock = qemu_opt_get_bool(opts, "mem-lock", enable_mlock);
3547                  enable_cpu_pm = qemu_opt_get_bool(opts, "cpu-pm", enable_cpu_pm);
3548                  break;
3549              case QEMU_OPTION_compat:
3550                  {
3551                      CompatPolicy *opts_policy;
3552                      Visitor *v;
3553  
3554                      v = qobject_input_visitor_new_str(optarg, NULL,
3555                                                        &error_fatal);
3556  
3557                      visit_type_CompatPolicy(v, NULL, &opts_policy, &error_fatal);
3558                      QAPI_CLONE_MEMBERS(CompatPolicy, &compat_policy, opts_policy);
3559  
3560                      qapi_free_CompatPolicy(opts_policy);
3561                      visit_free(v);
3562                      break;
3563                  }
3564              case QEMU_OPTION_msg:
3565                  opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg,
3566                                                 false);
3567                  if (!opts) {
3568                      exit(1);
3569                  }
3570                  configure_msg(opts);
3571                  break;
3572              case QEMU_OPTION_dump_vmstate:
3573                  if (vmstate_dump_file) {
3574                      error_report("only one '-dump-vmstate' "
3575                                   "option may be given");
3576                      exit(1);
3577                  }
3578                  vmstate_dump_file = fopen(optarg, "w");
3579                  if (vmstate_dump_file == NULL) {
3580                      error_report("open %s: %s", optarg, strerror(errno));
3581                      exit(1);
3582                  }
3583                  break;
3584              case QEMU_OPTION_enable_sync_profile:
3585                  qsp_enable();
3586                  break;
3587              case QEMU_OPTION_nouserconfig:
3588                  /* Nothing to be parsed here. Especially, do not error out below. */
3589                  break;
3590  #if defined(CONFIG_POSIX)
3591              case QEMU_OPTION_runas:
3592                  warn_report("-runas is deprecated, use '-run-with user=...' instead");
3593                  if (!os_set_runas(optarg)) {
3594                      error_report("User \"%s\" doesn't exist"
3595                                   " (and is not <uid>:<gid>)",
3596                                   optarg);
3597                      exit(1);
3598                  }
3599                  break;
3600              case QEMU_OPTION_daemonize:
3601                  os_set_daemonize(true);
3602                  break;
3603              case QEMU_OPTION_run_with: {
3604                  const char *str;
3605                  opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"),
3606                                                           optarg, false);
3607                  if (!opts) {
3608                      exit(1);
3609                  }
3610  #if defined(CONFIG_LINUX)
3611                  if (qemu_opt_get_bool(opts, "async-teardown", false)) {
3612                      init_async_teardown();
3613                  }
3614  #endif
3615                  str = qemu_opt_get(opts, "chroot");
3616                  if (str) {
3617                      os_set_chroot(str);
3618                  }
3619                  str = qemu_opt_get(opts, "user");
3620                  if (str) {
3621                      if (!os_set_runas(str)) {
3622                          error_report("User \"%s\" doesn't exist"
3623                                       " (and is not <uid>:<gid>)",
3624                                       optarg);
3625                          exit(1);
3626                      }
3627                  }
3628  
3629                  break;
3630              }
3631  #endif /* CONFIG_POSIX */
3632  
3633              default:
3634                  error_report("Option not supported in this build");
3635                  exit(1);
3636              }
3637          }
3638      }
3639      /*
3640       * Clear error location left behind by the loop.
3641       * Best done right after the loop.  Do not insert code here!
3642       */
3643      loc_set_none();
3644  
3645      qemu_validate_options(machine_opts_dict);
3646      qemu_process_sugar_options();
3647  
3648      /*
3649       * These options affect everything else and should be processed
3650       * before daemonizing.
3651       */
3652      qemu_process_early_options();
3653  
3654      qemu_process_help_options();
3655      qemu_maybe_daemonize(pid_file);
3656  
3657      /*
3658       * The trace backend must be initialized after daemonizing.
3659       * trace_init_backends() will call st_init(), which will create the
3660       * trace thread in the parent, and also register st_flush_trace_buffer()
3661       * in atexit(). This function will force the parent to wait for the
3662       * writeout thread to finish, which will not occur, and the parent
3663       * process will be left in the host.
3664       */
3665      if (!trace_init_backends()) {
3666          exit(1);
3667      }
3668      trace_init_file();
3669  
3670      qemu_init_main_loop(&error_fatal);
3671      cpu_timers_init();
3672  
3673      user_register_global_props();
3674      replay_configure(icount_opts);
3675  
3676      configure_rtc(qemu_find_opts_singleton("rtc"));
3677  
3678      /* Transfer QemuOpts options into machine options */
3679      parse_memory_options();
3680  
3681      qemu_create_machine(machine_opts_dict);
3682  
3683      suspend_mux_open();
3684  
3685      qemu_disable_default_devices();
3686      qemu_setup_display();
3687      qemu_create_default_devices();
3688      qemu_create_early_backends();
3689  
3690      qemu_apply_legacy_machine_options(machine_opts_dict);
3691      qemu_apply_machine_options(machine_opts_dict);
3692      qobject_unref(machine_opts_dict);
3693      phase_advance(PHASE_MACHINE_CREATED);
3694  
3695      /*
3696       * Note: uses machine properties such as kernel-irqchip, must run
3697       * after qemu_apply_machine_options.
3698       */
3699      configure_accelerators(argv[0]);
3700      phase_advance(PHASE_ACCEL_CREATED);
3701  
3702      /*
3703       * Beware, QOM objects created before this point miss global and
3704       * compat properties.
3705       *
3706       * Global properties get set up by qdev_prop_register_global(),
3707       * called from user_register_global_props(), and certain option
3708       * desugaring.  Also in CPU feature desugaring (buried in
3709       * parse_cpu_option()), which happens below this point, but may
3710       * only target the CPU type, which can only be created after
3711       * parse_cpu_option() returned the type.
3712       *
3713       * Machine compat properties: object_set_machine_compat_props().
3714       * Accelerator compat props: object_set_accelerator_compat_props(),
3715       * called from do_configure_accelerator().
3716       */
3717  
3718      machine_class = MACHINE_GET_CLASS(current_machine);
3719      if (!qtest_enabled() && machine_class->deprecation_reason) {
3720          warn_report("Machine type '%s' is deprecated: %s",
3721                       machine_class->name, machine_class->deprecation_reason);
3722      }
3723  
3724      /*
3725       * Create backends before creating migration objects, so that it can
3726       * check against compatibilities on the backend memories (e.g. postcopy
3727       * over memory-backend-file objects).
3728       */
3729      qemu_create_late_backends();
3730      phase_advance(PHASE_LATE_BACKENDS_CREATED);
3731  
3732      /*
3733       * Note: creates a QOM object, must run only after global and
3734       * compat properties have been set up.
3735       */
3736      migration_object_init();
3737  
3738      /* parse features once if machine provides default cpu_type */
3739      current_machine->cpu_type = machine_class_default_cpu_type(machine_class);
3740      if (cpu_option) {
3741          current_machine->cpu_type = parse_cpu_option(cpu_option);
3742      }
3743      /* NB: for machine none cpu_type could STILL be NULL here! */
3744  
3745      qemu_resolve_machine_memdev();
3746      parse_numa_opts(current_machine);
3747  
3748      if (vmstate_dump_file) {
3749          /* dump and exit */
3750          module_load_qom_all();
3751          dump_vmstate_json_to_file(vmstate_dump_file);
3752          exit(0);
3753      }
3754  
3755      if (!preconfig_requested) {
3756          qmp_x_exit_preconfig(&error_fatal);
3757      }
3758      qemu_init_displays();
3759      accel_setup_post(current_machine);
3760      os_setup_post();
3761      resume_mux_open();
3762  }
3763