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