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