qemu/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#include "qemu/osdep.h"
  25#include "qemu-version.h"
  26#include "qemu/cutils.h"
  27#include "qemu/help_option.h"
  28#include "qemu/uuid.h"
  29
  30#ifdef CONFIG_SECCOMP
  31#include "sysemu/seccomp.h"
  32#endif
  33
  34#if defined(CONFIG_VDE)
  35#include <libvdeplug.h>
  36#endif
  37
  38#ifdef CONFIG_SDL
  39#if defined(__APPLE__) || defined(main)
  40#include <SDL.h>
  41int qemu_main(int argc, char **argv, char **envp);
  42int main(int argc, char **argv)
  43{
  44    return qemu_main(argc, argv, NULL);
  45}
  46#undef main
  47#define main qemu_main
  48#endif
  49#endif /* CONFIG_SDL */
  50
  51#ifdef CONFIG_COCOA
  52#undef main
  53#define main qemu_main
  54#endif /* CONFIG_COCOA */
  55
  56
  57#include "qemu/error-report.h"
  58#include "qemu/sockets.h"
  59#include "hw/hw.h"
  60#include "hw/boards.h"
  61#include "sysemu/accel.h"
  62#include "hw/usb.h"
  63#include "hw/i386/pc.h"
  64#include "hw/isa/isa.h"
  65#include "hw/bt.h"
  66#include "sysemu/watchdog.h"
  67#include "hw/smbios/smbios.h"
  68#include "hw/xen/xen.h"
  69#include "hw/qdev.h"
  70#include "hw/loader.h"
  71#include "monitor/qdev.h"
  72#include "sysemu/bt.h"
  73#include "net/net.h"
  74#include "net/slirp.h"
  75#include "monitor/monitor.h"
  76#include "ui/console.h"
  77#include "ui/input.h"
  78#include "sysemu/sysemu.h"
  79#include "sysemu/numa.h"
  80#include "exec/gdbstub.h"
  81#include "qemu/timer.h"
  82#include "sysemu/char.h"
  83#include "qemu/bitmap.h"
  84#include "qemu/log.h"
  85#include "sysemu/blockdev.h"
  86#include "hw/block/block.h"
  87#include "migration/block.h"
  88#include "sysemu/tpm.h"
  89#include "sysemu/dma.h"
  90#include "audio/audio.h"
  91#include "migration/migration.h"
  92#include "sysemu/cpus.h"
  93#include "migration/colo.h"
  94#include "sysemu/kvm.h"
  95#include "qapi/qmp/qjson.h"
  96#include "qemu/option.h"
  97#include "qemu/config-file.h"
  98#include "qemu-options.h"
  99#include "qmp-commands.h"
 100#include "qemu/main-loop.h"
 101#ifdef CONFIG_VIRTFS
 102#include "fsdev/qemu-fsdev.h"
 103#endif
 104#include "sysemu/qtest.h"
 105
 106#include "disas/disas.h"
 107
 108
 109#include "slirp/libslirp.h"
 110
 111#include "trace.h"
 112#include "trace/control.h"
 113#include "qemu/queue.h"
 114#include "sysemu/arch_init.h"
 115
 116#include "ui/qemu-spice.h"
 117#include "qapi/string-input-visitor.h"
 118#include "qapi/opts-visitor.h"
 119#include "qom/object_interfaces.h"
 120#include "qapi-event.h"
 121#include "exec/semihost.h"
 122#include "crypto/init.h"
 123#include "sysemu/replay.h"
 124#include "qapi/qmp/qerror.h"
 125#include "sysemu/iothread.h"
 126
 127#define MAX_VIRTIO_CONSOLES 1
 128#define MAX_SCLP_CONSOLES 1
 129
 130static const char *data_dir[16];
 131static int data_dir_idx;
 132const char *bios_name = NULL;
 133enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
 134int request_opengl = -1;
 135int display_opengl;
 136const char* keyboard_layout = NULL;
 137ram_addr_t ram_size;
 138const char *mem_path = NULL;
 139int mem_prealloc = 0; /* force preallocation of physical target memory */
 140bool enable_mlock = false;
 141int nb_nics;
 142NICInfo nd_table[MAX_NICS];
 143int autostart;
 144static int rtc_utc = 1;
 145static int rtc_date_offset = -1; /* -1 means no change */
 146QEMUClockType rtc_clock;
 147int vga_interface_type = VGA_NONE;
 148static int full_screen = 0;
 149static int no_frame = 0;
 150int no_quit = 0;
 151static bool grab_on_hover;
 152CharDriverState *serial_hds[MAX_SERIAL_PORTS];
 153CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
 154CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
 155CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];
 156int win2k_install_hack = 0;
 157int singlestep = 0;
 158int smp_cpus = 1;
 159int max_cpus = 1;
 160int smp_cores = 1;
 161int smp_threads = 1;
 162int acpi_enabled = 1;
 163int no_hpet = 0;
 164int fd_bootchk = 1;
 165static int no_reboot;
 166int no_shutdown = 0;
 167int cursor_hide = 1;
 168int graphic_rotate = 0;
 169const char *watchdog;
 170QEMUOptionRom option_rom[MAX_OPTION_ROMS];
 171int nb_option_roms;
 172int old_param = 0;
 173const char *qemu_name;
 174int alt_grab = 0;
 175int ctrl_grab = 0;
 176unsigned int nb_prom_envs = 0;
 177const char *prom_envs[MAX_PROM_ENVS];
 178int boot_menu;
 179bool boot_strict;
 180uint8_t *boot_splash_filedata;
 181size_t boot_splash_filedata_size;
 182uint8_t qemu_extra_params_fw[2];
 183
 184int icount_align_option;
 185
 186/* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the
 187 * little-endian "wire format" described in the SMBIOS 2.6 specification.
 188 */
 189QemuUUID qemu_uuid;
 190bool qemu_uuid_set;
 191
 192static NotifierList exit_notifiers =
 193    NOTIFIER_LIST_INITIALIZER(exit_notifiers);
 194
 195static NotifierList machine_init_done_notifiers =
 196    NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
 197
 198bool xen_allowed;
 199uint32_t xen_domid;
 200enum xen_mode xen_mode = XEN_EMULATE;
 201
 202static int has_defaults = 1;
 203static int default_serial = 1;
 204static int default_parallel = 1;
 205static int default_virtcon = 1;
 206static int default_sclp = 1;
 207static int default_monitor = 1;
 208static int default_floppy = 1;
 209static int default_cdrom = 1;
 210static int default_sdcard = 1;
 211static int default_vga = 1;
 212static int default_net = 1;
 213
 214static struct {
 215    const char *driver;
 216    int *flag;
 217} default_list[] = {
 218    { .driver = "isa-serial",           .flag = &default_serial    },
 219    { .driver = "isa-parallel",         .flag = &default_parallel  },
 220    { .driver = "isa-fdc",              .flag = &default_floppy    },
 221    { .driver = "floppy",               .flag = &default_floppy    },
 222    { .driver = "ide-cd",               .flag = &default_cdrom     },
 223    { .driver = "ide-hd",               .flag = &default_cdrom     },
 224    { .driver = "ide-drive",            .flag = &default_cdrom     },
 225    { .driver = "scsi-cd",              .flag = &default_cdrom     },
 226    { .driver = "virtio-serial-pci",    .flag = &default_virtcon   },
 227    { .driver = "virtio-serial",        .flag = &default_virtcon   },
 228    { .driver = "VGA",                  .flag = &default_vga       },
 229    { .driver = "isa-vga",              .flag = &default_vga       },
 230    { .driver = "cirrus-vga",           .flag = &default_vga       },
 231    { .driver = "isa-cirrus-vga",       .flag = &default_vga       },
 232    { .driver = "vmware-svga",          .flag = &default_vga       },
 233    { .driver = "qxl-vga",              .flag = &default_vga       },
 234    { .driver = "virtio-vga",           .flag = &default_vga       },
 235};
 236
 237static QemuOptsList qemu_rtc_opts = {
 238    .name = "rtc",
 239    .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
 240    .desc = {
 241        {
 242            .name = "base",
 243            .type = QEMU_OPT_STRING,
 244        },{
 245            .name = "clock",
 246            .type = QEMU_OPT_STRING,
 247        },{
 248            .name = "driftfix",
 249            .type = QEMU_OPT_STRING,
 250        },
 251        { /* end of list */ }
 252    },
 253};
 254
 255static QemuOptsList qemu_sandbox_opts = {
 256    .name = "sandbox",
 257    .implied_opt_name = "enable",
 258    .head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
 259    .desc = {
 260        {
 261            .name = "enable",
 262            .type = QEMU_OPT_BOOL,
 263        },
 264        { /* end of list */ }
 265    },
 266};
 267
 268static QemuOptsList qemu_option_rom_opts = {
 269    .name = "option-rom",
 270    .implied_opt_name = "romfile",
 271    .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
 272    .desc = {
 273        {
 274            .name = "bootindex",
 275            .type = QEMU_OPT_NUMBER,
 276        }, {
 277            .name = "romfile",
 278            .type = QEMU_OPT_STRING,
 279        },
 280        { /* end of list */ }
 281    },
 282};
 283
 284static QemuOptsList qemu_machine_opts = {
 285    .name = "machine",
 286    .implied_opt_name = "type",
 287    .merge_lists = true,
 288    .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
 289    .desc = {
 290        /*
 291         * no elements => accept any
 292         * sanity checking will happen later
 293         * when setting machine properties
 294         */
 295        { }
 296    },
 297};
 298
 299static QemuOptsList qemu_boot_opts = {
 300    .name = "boot-opts",
 301    .implied_opt_name = "order",
 302    .merge_lists = true,
 303    .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
 304    .desc = {
 305        {
 306            .name = "order",
 307            .type = QEMU_OPT_STRING,
 308        }, {
 309            .name = "once",
 310            .type = QEMU_OPT_STRING,
 311        }, {
 312            .name = "menu",
 313            .type = QEMU_OPT_BOOL,
 314        }, {
 315            .name = "splash",
 316            .type = QEMU_OPT_STRING,
 317        }, {
 318            .name = "splash-time",
 319            .type = QEMU_OPT_STRING,
 320        }, {
 321            .name = "reboot-timeout",
 322            .type = QEMU_OPT_STRING,
 323        }, {
 324            .name = "strict",
 325            .type = QEMU_OPT_BOOL,
 326        },
 327        { /*End of list */ }
 328    },
 329};
 330
 331static QemuOptsList qemu_add_fd_opts = {
 332    .name = "add-fd",
 333    .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
 334    .desc = {
 335        {
 336            .name = "fd",
 337            .type = QEMU_OPT_NUMBER,
 338            .help = "file descriptor of which a duplicate is added to fd set",
 339        },{
 340            .name = "set",
 341            .type = QEMU_OPT_NUMBER,
 342            .help = "ID of the fd set to add fd to",
 343        },{
 344            .name = "opaque",
 345            .type = QEMU_OPT_STRING,
 346            .help = "free-form string used to describe fd",
 347        },
 348        { /* end of list */ }
 349    },
 350};
 351
 352static QemuOptsList qemu_object_opts = {
 353    .name = "object",
 354    .implied_opt_name = "qom-type",
 355    .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
 356    .desc = {
 357        { }
 358    },
 359};
 360
 361static QemuOptsList qemu_tpmdev_opts = {
 362    .name = "tpmdev",
 363    .implied_opt_name = "type",
 364    .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head),
 365    .desc = {
 366        /* options are defined in the TPM backends */
 367        { /* end of list */ }
 368    },
 369};
 370
 371static QemuOptsList qemu_realtime_opts = {
 372    .name = "realtime",
 373    .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
 374    .desc = {
 375        {
 376            .name = "mlock",
 377            .type = QEMU_OPT_BOOL,
 378        },
 379        { /* end of list */ }
 380    },
 381};
 382
 383static QemuOptsList qemu_msg_opts = {
 384    .name = "msg",
 385    .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head),
 386    .desc = {
 387        {
 388            .name = "timestamp",
 389            .type = QEMU_OPT_BOOL,
 390        },
 391        { /* end of list */ }
 392    },
 393};
 394
 395static QemuOptsList qemu_name_opts = {
 396    .name = "name",
 397    .implied_opt_name = "guest",
 398    .merge_lists = true,
 399    .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
 400    .desc = {
 401        {
 402            .name = "guest",
 403            .type = QEMU_OPT_STRING,
 404            .help = "Sets the name of the guest.\n"
 405                    "This name will be displayed in the SDL window caption.\n"
 406                    "The name will also be used for the VNC server",
 407        }, {
 408            .name = "process",
 409            .type = QEMU_OPT_STRING,
 410            .help = "Sets the name of the QEMU process, as shown in top etc",
 411        }, {
 412            .name = "debug-threads",
 413            .type = QEMU_OPT_BOOL,
 414            .help = "When enabled, name the individual threads; defaults off.\n"
 415                    "NOTE: The thread names are for debugging and not a\n"
 416                    "stable API.",
 417        },
 418        { /* End of list */ }
 419    },
 420};
 421
 422static QemuOptsList qemu_mem_opts = {
 423    .name = "memory",
 424    .implied_opt_name = "size",
 425    .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
 426    .merge_lists = true,
 427    .desc = {
 428        {
 429            .name = "size",
 430            .type = QEMU_OPT_SIZE,
 431        },
 432        {
 433            .name = "slots",
 434            .type = QEMU_OPT_NUMBER,
 435        },
 436        {
 437            .name = "maxmem",
 438            .type = QEMU_OPT_SIZE,
 439        },
 440        { /* end of list */ }
 441    },
 442};
 443
 444static QemuOptsList qemu_icount_opts = {
 445    .name = "icount",
 446    .implied_opt_name = "shift",
 447    .merge_lists = true,
 448    .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head),
 449    .desc = {
 450        {
 451            .name = "shift",
 452            .type = QEMU_OPT_STRING,
 453        }, {
 454            .name = "align",
 455            .type = QEMU_OPT_BOOL,
 456        }, {
 457            .name = "sleep",
 458            .type = QEMU_OPT_BOOL,
 459        }, {
 460            .name = "rr",
 461            .type = QEMU_OPT_STRING,
 462        }, {
 463            .name = "rrfile",
 464            .type = QEMU_OPT_STRING,
 465        },
 466        { /* end of list */ }
 467    },
 468};
 469
 470static QemuOptsList qemu_semihosting_config_opts = {
 471    .name = "semihosting-config",
 472    .implied_opt_name = "enable",
 473    .head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head),
 474    .desc = {
 475        {
 476            .name = "enable",
 477            .type = QEMU_OPT_BOOL,
 478        }, {
 479            .name = "target",
 480            .type = QEMU_OPT_STRING,
 481        }, {
 482            .name = "arg",
 483            .type = QEMU_OPT_STRING,
 484        },
 485        { /* end of list */ }
 486    },
 487};
 488
 489static QemuOptsList qemu_fw_cfg_opts = {
 490    .name = "fw_cfg",
 491    .implied_opt_name = "name",
 492    .head = QTAILQ_HEAD_INITIALIZER(qemu_fw_cfg_opts.head),
 493    .desc = {
 494        {
 495            .name = "name",
 496            .type = QEMU_OPT_STRING,
 497            .help = "Sets the fw_cfg name of the blob to be inserted",
 498        }, {
 499            .name = "file",
 500            .type = QEMU_OPT_STRING,
 501            .help = "Sets the name of the file from which\n"
 502                    "the fw_cfg blob will be loaded",
 503        }, {
 504            .name = "string",
 505            .type = QEMU_OPT_STRING,
 506            .help = "Sets content of the blob to be inserted from a string",
 507        },
 508        { /* end of list */ }
 509    },
 510};
 511
 512#ifdef CONFIG_LIBISCSI
 513static QemuOptsList qemu_iscsi_opts = {
 514    .name = "iscsi",
 515    .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
 516    .desc = {
 517        {
 518            .name = "user",
 519            .type = QEMU_OPT_STRING,
 520            .help = "username for CHAP authentication to target",
 521        },{
 522            .name = "password",
 523            .type = QEMU_OPT_STRING,
 524            .help = "password for CHAP authentication to target",
 525        },{
 526            .name = "password-secret",
 527            .type = QEMU_OPT_STRING,
 528            .help = "ID of the secret providing password for CHAP "
 529                    "authentication to target",
 530        },{
 531            .name = "header-digest",
 532            .type = QEMU_OPT_STRING,
 533            .help = "HeaderDigest setting. "
 534                    "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
 535        },{
 536            .name = "initiator-name",
 537            .type = QEMU_OPT_STRING,
 538            .help = "Initiator iqn name to use when connecting",
 539        },{
 540            .name = "timeout",
 541            .type = QEMU_OPT_NUMBER,
 542            .help = "Request timeout in seconds (default 0 = no timeout)",
 543        },
 544        { /* end of list */ }
 545    },
 546};
 547#endif
 548
 549/**
 550 * Get machine options
 551 *
 552 * Returns: machine options (never null).
 553 */
 554QemuOpts *qemu_get_machine_opts(void)
 555{
 556    return qemu_find_opts_singleton("machine");
 557}
 558
 559const char *qemu_get_vm_name(void)
 560{
 561    return qemu_name;
 562}
 563
 564static void res_free(void)
 565{
 566    g_free(boot_splash_filedata);
 567    boot_splash_filedata = NULL;
 568}
 569
 570static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
 571{
 572    const char *driver = qemu_opt_get(opts, "driver");
 573    int i;
 574
 575    if (!driver)
 576        return 0;
 577    for (i = 0; i < ARRAY_SIZE(default_list); i++) {
 578        if (strcmp(default_list[i].driver, driver) != 0)
 579            continue;
 580        *(default_list[i].flag) = 0;
 581    }
 582    return 0;
 583}
 584
 585/***********************************************************/
 586/* QEMU state */
 587
 588static RunState current_run_state = RUN_STATE_PRELAUNCH;
 589
 590/* We use RUN_STATE__MAX but any invalid value will do */
 591static RunState vmstop_requested = RUN_STATE__MAX;
 592static QemuMutex vmstop_lock;
 593
 594typedef struct {
 595    RunState from;
 596    RunState to;
 597} RunStateTransition;
 598
 599static const RunStateTransition runstate_transitions_def[] = {
 600    /*     from      ->     to      */
 601    { RUN_STATE_DEBUG, RUN_STATE_RUNNING },
 602    { RUN_STATE_DEBUG, RUN_STATE_FINISH_MIGRATE },
 603    { RUN_STATE_DEBUG, RUN_STATE_PRELAUNCH },
 604
 605    { RUN_STATE_INMIGRATE, RUN_STATE_INTERNAL_ERROR },
 606    { RUN_STATE_INMIGRATE, RUN_STATE_IO_ERROR },
 607    { RUN_STATE_INMIGRATE, RUN_STATE_PAUSED },
 608    { RUN_STATE_INMIGRATE, RUN_STATE_RUNNING },
 609    { RUN_STATE_INMIGRATE, RUN_STATE_SHUTDOWN },
 610    { RUN_STATE_INMIGRATE, RUN_STATE_SUSPENDED },
 611    { RUN_STATE_INMIGRATE, RUN_STATE_WATCHDOG },
 612    { RUN_STATE_INMIGRATE, RUN_STATE_GUEST_PANICKED },
 613    { RUN_STATE_INMIGRATE, RUN_STATE_FINISH_MIGRATE },
 614    { RUN_STATE_INMIGRATE, RUN_STATE_PRELAUNCH },
 615    { RUN_STATE_INMIGRATE, RUN_STATE_POSTMIGRATE },
 616    { RUN_STATE_INMIGRATE, RUN_STATE_COLO },
 617
 618    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PAUSED },
 619    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_FINISH_MIGRATE },
 620    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PRELAUNCH },
 621
 622    { RUN_STATE_IO_ERROR, RUN_STATE_RUNNING },
 623    { RUN_STATE_IO_ERROR, RUN_STATE_FINISH_MIGRATE },
 624    { RUN_STATE_IO_ERROR, RUN_STATE_PRELAUNCH },
 625
 626    { RUN_STATE_PAUSED, RUN_STATE_RUNNING },
 627    { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
 628    { RUN_STATE_PAUSED, RUN_STATE_PRELAUNCH },
 629    { RUN_STATE_PAUSED, RUN_STATE_COLO},
 630
 631    { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
 632    { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
 633    { RUN_STATE_POSTMIGRATE, RUN_STATE_PRELAUNCH },
 634
 635    { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
 636    { RUN_STATE_PRELAUNCH, RUN_STATE_FINISH_MIGRATE },
 637    { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE },
 638
 639    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING },
 640    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
 641    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PRELAUNCH },
 642    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_COLO},
 643
 644    { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
 645    { RUN_STATE_RESTORE_VM, RUN_STATE_PRELAUNCH },
 646
 647    { RUN_STATE_COLO, RUN_STATE_RUNNING },
 648
 649    { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
 650    { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
 651    { RUN_STATE_RUNNING, RUN_STATE_IO_ERROR },
 652    { RUN_STATE_RUNNING, RUN_STATE_PAUSED },
 653    { RUN_STATE_RUNNING, RUN_STATE_FINISH_MIGRATE },
 654    { RUN_STATE_RUNNING, RUN_STATE_RESTORE_VM },
 655    { RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
 656    { RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
 657    { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
 658    { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
 659    { RUN_STATE_RUNNING, RUN_STATE_COLO},
 660
 661    { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
 662
 663    { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED },
 664    { RUN_STATE_SHUTDOWN, RUN_STATE_FINISH_MIGRATE },
 665    { RUN_STATE_SHUTDOWN, RUN_STATE_PRELAUNCH },
 666
 667    { RUN_STATE_DEBUG, RUN_STATE_SUSPENDED },
 668    { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED },
 669    { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING },
 670    { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE },
 671    { RUN_STATE_SUSPENDED, RUN_STATE_PRELAUNCH },
 672    { RUN_STATE_SUSPENDED, RUN_STATE_COLO},
 673
 674    { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
 675    { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
 676    { RUN_STATE_WATCHDOG, RUN_STATE_PRELAUNCH },
 677    { RUN_STATE_WATCHDOG, RUN_STATE_COLO},
 678
 679    { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING },
 680    { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
 681    { RUN_STATE_GUEST_PANICKED, RUN_STATE_PRELAUNCH },
 682
 683    { RUN_STATE__MAX, RUN_STATE__MAX },
 684};
 685
 686static bool runstate_valid_transitions[RUN_STATE__MAX][RUN_STATE__MAX];
 687
 688bool runstate_check(RunState state)
 689{
 690    return current_run_state == state;
 691}
 692
 693bool runstate_store(char *str, size_t size)
 694{
 695    const char *state = RunState_lookup[current_run_state];
 696    size_t len = strlen(state) + 1;
 697
 698    if (len > size) {
 699        return false;
 700    }
 701    memcpy(str, state, len);
 702    return true;
 703}
 704
 705static void runstate_init(void)
 706{
 707    const RunStateTransition *p;
 708
 709    memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions));
 710    for (p = &runstate_transitions_def[0]; p->from != RUN_STATE__MAX; p++) {
 711        runstate_valid_transitions[p->from][p->to] = true;
 712    }
 713
 714    qemu_mutex_init(&vmstop_lock);
 715}
 716
 717/* This function will abort() on invalid state transitions */
 718void runstate_set(RunState new_state)
 719{
 720    assert(new_state < RUN_STATE__MAX);
 721
 722    if (current_run_state == new_state) {
 723        return;
 724    }
 725
 726    if (!runstate_valid_transitions[current_run_state][new_state]) {
 727        error_report("invalid runstate transition: '%s' -> '%s'",
 728                     RunState_lookup[current_run_state],
 729                     RunState_lookup[new_state]);
 730        abort();
 731    }
 732    trace_runstate_set(new_state);
 733    current_run_state = new_state;
 734}
 735
 736int runstate_is_running(void)
 737{
 738    return runstate_check(RUN_STATE_RUNNING);
 739}
 740
 741bool runstate_needs_reset(void)
 742{
 743    return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
 744        runstate_check(RUN_STATE_SHUTDOWN);
 745}
 746
 747StatusInfo *qmp_query_status(Error **errp)
 748{
 749    StatusInfo *info = g_malloc0(sizeof(*info));
 750
 751    info->running = runstate_is_running();
 752    info->singlestep = singlestep;
 753    info->status = current_run_state;
 754
 755    return info;
 756}
 757
 758static bool qemu_vmstop_requested(RunState *r)
 759{
 760    qemu_mutex_lock(&vmstop_lock);
 761    *r = vmstop_requested;
 762    vmstop_requested = RUN_STATE__MAX;
 763    qemu_mutex_unlock(&vmstop_lock);
 764    return *r < RUN_STATE__MAX;
 765}
 766
 767void qemu_system_vmstop_request_prepare(void)
 768{
 769    qemu_mutex_lock(&vmstop_lock);
 770}
 771
 772void qemu_system_vmstop_request(RunState state)
 773{
 774    vmstop_requested = state;
 775    qemu_mutex_unlock(&vmstop_lock);
 776    qemu_notify_event();
 777}
 778
 779void vm_start(void)
 780{
 781    RunState requested;
 782
 783    qemu_vmstop_requested(&requested);
 784    if (runstate_is_running() && requested == RUN_STATE__MAX) {
 785        return;
 786    }
 787
 788    /* Ensure that a STOP/RESUME pair of events is emitted if a
 789     * vmstop request was pending.  The BLOCK_IO_ERROR event, for
 790     * example, according to documentation is always followed by
 791     * the STOP event.
 792     */
 793    if (runstate_is_running()) {
 794        qapi_event_send_stop(&error_abort);
 795    } else {
 796        replay_enable_events();
 797        cpu_enable_ticks();
 798        runstate_set(RUN_STATE_RUNNING);
 799        vm_state_notify(1, RUN_STATE_RUNNING);
 800        resume_all_vcpus();
 801    }
 802
 803    qapi_event_send_resume(&error_abort);
 804}
 805
 806
 807/***********************************************************/
 808/* real time host monotonic timer */
 809
 810static time_t qemu_time(void)
 811{
 812    return qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
 813}
 814
 815/***********************************************************/
 816/* host time/date access */
 817void qemu_get_timedate(struct tm *tm, int offset)
 818{
 819    time_t ti = qemu_time();
 820
 821    ti += offset;
 822    if (rtc_date_offset == -1) {
 823        if (rtc_utc)
 824            gmtime_r(&ti, tm);
 825        else
 826            localtime_r(&ti, tm);
 827    } else {
 828        ti -= rtc_date_offset;
 829        gmtime_r(&ti, tm);
 830    }
 831}
 832
 833int qemu_timedate_diff(struct tm *tm)
 834{
 835    time_t seconds;
 836
 837    if (rtc_date_offset == -1)
 838        if (rtc_utc)
 839            seconds = mktimegm(tm);
 840        else {
 841            struct tm tmp = *tm;
 842            tmp.tm_isdst = -1; /* use timezone to figure it out */
 843            seconds = mktime(&tmp);
 844        }
 845    else
 846        seconds = mktimegm(tm) + rtc_date_offset;
 847
 848    return seconds - qemu_time();
 849}
 850
 851static void configure_rtc_date_offset(const char *startdate, int legacy)
 852{
 853    time_t rtc_start_date;
 854    struct tm tm;
 855
 856    if (!strcmp(startdate, "now") && legacy) {
 857        rtc_date_offset = -1;
 858    } else {
 859        if (sscanf(startdate, "%d-%d-%dT%d:%d:%d",
 860                   &tm.tm_year,
 861                   &tm.tm_mon,
 862                   &tm.tm_mday,
 863                   &tm.tm_hour,
 864                   &tm.tm_min,
 865                   &tm.tm_sec) == 6) {
 866            /* OK */
 867        } else if (sscanf(startdate, "%d-%d-%d",
 868                          &tm.tm_year,
 869                          &tm.tm_mon,
 870                          &tm.tm_mday) == 3) {
 871            tm.tm_hour = 0;
 872            tm.tm_min = 0;
 873            tm.tm_sec = 0;
 874        } else {
 875            goto date_fail;
 876        }
 877        tm.tm_year -= 1900;
 878        tm.tm_mon--;
 879        rtc_start_date = mktimegm(&tm);
 880        if (rtc_start_date == -1) {
 881        date_fail:
 882            error_report("invalid date format");
 883            error_printf("valid formats: "
 884                         "'2006-06-17T16:01:21' or '2006-06-17'\n");
 885            exit(1);
 886        }
 887        rtc_date_offset = qemu_time() - rtc_start_date;
 888    }
 889}
 890
 891static void configure_rtc(QemuOpts *opts)
 892{
 893    const char *value;
 894
 895    value = qemu_opt_get(opts, "base");
 896    if (value) {
 897        if (!strcmp(value, "utc")) {
 898            rtc_utc = 1;
 899        } else if (!strcmp(value, "localtime")) {
 900            Error *blocker = NULL;
 901            rtc_utc = 0;
 902            error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED,
 903                      "-rtc base=localtime");
 904            replay_add_blocker(blocker);
 905        } else {
 906            configure_rtc_date_offset(value, 0);
 907        }
 908    }
 909    value = qemu_opt_get(opts, "clock");
 910    if (value) {
 911        if (!strcmp(value, "host")) {
 912            rtc_clock = QEMU_CLOCK_HOST;
 913        } else if (!strcmp(value, "rt")) {
 914            rtc_clock = QEMU_CLOCK_REALTIME;
 915        } else if (!strcmp(value, "vm")) {
 916            rtc_clock = QEMU_CLOCK_VIRTUAL;
 917        } else {
 918            error_report("invalid option value '%s'", value);
 919            exit(1);
 920        }
 921    }
 922    value = qemu_opt_get(opts, "driftfix");
 923    if (value) {
 924        if (!strcmp(value, "slew")) {
 925            static GlobalProperty slew_lost_ticks = {
 926                .driver   = "mc146818rtc",
 927                .property = "lost_tick_policy",
 928                .value    = "slew",
 929            };
 930
 931            qdev_prop_register_global(&slew_lost_ticks);
 932        } else if (!strcmp(value, "none")) {
 933            /* discard is default */
 934        } else {
 935            error_report("invalid option value '%s'", value);
 936            exit(1);
 937        }
 938    }
 939}
 940
 941/***********************************************************/
 942/* Bluetooth support */
 943static int nb_hcis;
 944static int cur_hci;
 945static struct HCIInfo *hci_table[MAX_NICS];
 946
 947struct HCIInfo *qemu_next_hci(void)
 948{
 949    if (cur_hci == nb_hcis)
 950        return &null_hci;
 951
 952    return hci_table[cur_hci++];
 953}
 954
 955static int bt_hci_parse(const char *str)
 956{
 957    struct HCIInfo *hci;
 958    bdaddr_t bdaddr;
 959
 960    if (nb_hcis >= MAX_NICS) {
 961        error_report("too many bluetooth HCIs (max %i)", MAX_NICS);
 962        return -1;
 963    }
 964
 965    hci = hci_init(str);
 966    if (!hci)
 967        return -1;
 968
 969    bdaddr.b[0] = 0x52;
 970    bdaddr.b[1] = 0x54;
 971    bdaddr.b[2] = 0x00;
 972    bdaddr.b[3] = 0x12;
 973    bdaddr.b[4] = 0x34;
 974    bdaddr.b[5] = 0x56 + nb_hcis;
 975    hci->bdaddr_set(hci, bdaddr.b);
 976
 977    hci_table[nb_hcis++] = hci;
 978
 979    return 0;
 980}
 981
 982static void bt_vhci_add(int vlan_id)
 983{
 984    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
 985
 986    if (!vlan->slave)
 987        error_report("warning: adding a VHCI to an empty scatternet %i",
 988                     vlan_id);
 989
 990    bt_vhci_init(bt_new_hci(vlan));
 991}
 992
 993static struct bt_device_s *bt_device_add(const char *opt)
 994{
 995    struct bt_scatternet_s *vlan;
 996    int vlan_id = 0;
 997    char *endp = strstr(opt, ",vlan=");
 998    int len = (endp ? endp - opt : strlen(opt)) + 1;
 999    char devname[10];
1000
1001    pstrcpy(devname, MIN(sizeof(devname), len), opt);
1002
1003    if (endp) {
1004        vlan_id = strtol(endp + 6, &endp, 0);
1005        if (*endp) {
1006            error_report("unrecognised bluetooth vlan Id");
1007            return 0;
1008        }
1009    }
1010
1011    vlan = qemu_find_bt_vlan(vlan_id);
1012
1013    if (!vlan->slave)
1014        error_report("warning: adding a slave device to an empty scatternet %i",
1015                     vlan_id);
1016
1017    if (!strcmp(devname, "keyboard"))
1018        return bt_keyboard_init(vlan);
1019
1020    error_report("unsupported bluetooth device '%s'", devname);
1021    return 0;
1022}
1023
1024static int bt_parse(const char *opt)
1025{
1026    const char *endp, *p;
1027    int vlan;
1028
1029    if (strstart(opt, "hci", &endp)) {
1030        if (!*endp || *endp == ',') {
1031            if (*endp)
1032                if (!strstart(endp, ",vlan=", 0))
1033                    opt = endp + 1;
1034
1035            return bt_hci_parse(opt);
1036       }
1037    } else if (strstart(opt, "vhci", &endp)) {
1038        if (!*endp || *endp == ',') {
1039            if (*endp) {
1040                if (strstart(endp, ",vlan=", &p)) {
1041                    vlan = strtol(p, (char **) &endp, 0);
1042                    if (*endp) {
1043                        error_report("bad scatternet '%s'", p);
1044                        return 1;
1045                    }
1046                } else {
1047                    error_report("bad parameter '%s'", endp + 1);
1048                    return 1;
1049                }
1050            } else
1051                vlan = 0;
1052
1053            bt_vhci_add(vlan);
1054            return 0;
1055        }
1056    } else if (strstart(opt, "device:", &endp))
1057        return !bt_device_add(endp);
1058
1059    error_report("bad bluetooth parameter '%s'", opt);
1060    return 1;
1061}
1062
1063static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
1064{
1065    /* FIXME: change this to true for 1.3 */
1066    if (qemu_opt_get_bool(opts, "enable", false)) {
1067#ifdef CONFIG_SECCOMP
1068        if (seccomp_start() < 0) {
1069            error_report("failed to install seccomp syscall filter "
1070                         "in the kernel");
1071            return -1;
1072        }
1073#else
1074        error_report("seccomp support is disabled");
1075        return -1;
1076#endif
1077    }
1078
1079    return 0;
1080}
1081
1082static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
1083{
1084    const char *proc_name;
1085
1086    if (qemu_opt_get(opts, "debug-threads")) {
1087        qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
1088    }
1089    qemu_name = qemu_opt_get(opts, "guest");
1090
1091    proc_name = qemu_opt_get(opts, "process");
1092    if (proc_name) {
1093        os_set_proc_name(proc_name);
1094    }
1095
1096    return 0;
1097}
1098
1099bool defaults_enabled(void)
1100{
1101    return has_defaults;
1102}
1103
1104#ifndef _WIN32
1105static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
1106{
1107    int fd, dupfd, flags;
1108    int64_t fdset_id;
1109    const char *fd_opaque = NULL;
1110    AddfdInfo *fdinfo;
1111
1112    fd = qemu_opt_get_number(opts, "fd", -1);
1113    fdset_id = qemu_opt_get_number(opts, "set", -1);
1114    fd_opaque = qemu_opt_get(opts, "opaque");
1115
1116    if (fd < 0) {
1117        error_report("fd option is required and must be non-negative");
1118        return -1;
1119    }
1120
1121    if (fd <= STDERR_FILENO) {
1122        error_report("fd cannot be a standard I/O stream");
1123        return -1;
1124    }
1125
1126    /*
1127     * All fds inherited across exec() necessarily have FD_CLOEXEC
1128     * clear, while qemu sets FD_CLOEXEC on all other fds used internally.
1129     */
1130    flags = fcntl(fd, F_GETFD);
1131    if (flags == -1 || (flags & FD_CLOEXEC)) {
1132        error_report("fd is not valid or already in use");
1133        return -1;
1134    }
1135
1136    if (fdset_id < 0) {
1137        error_report("set option is required and must be non-negative");
1138        return -1;
1139    }
1140
1141#ifdef F_DUPFD_CLOEXEC
1142    dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
1143#else
1144    dupfd = dup(fd);
1145    if (dupfd != -1) {
1146        qemu_set_cloexec(dupfd);
1147    }
1148#endif
1149    if (dupfd == -1) {
1150        error_report("error duplicating fd: %s", strerror(errno));
1151        return -1;
1152    }
1153
1154    /* add the duplicate fd, and optionally the opaque string, to the fd set */
1155    fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, !!fd_opaque, fd_opaque,
1156                                  &error_abort);
1157    g_free(fdinfo);
1158
1159    return 0;
1160}
1161
1162static int cleanup_add_fd(void *opaque, QemuOpts *opts, Error **errp)
1163{
1164    int fd;
1165
1166    fd = qemu_opt_get_number(opts, "fd", -1);
1167    close(fd);
1168
1169    return 0;
1170}
1171#endif
1172
1173/***********************************************************/
1174/* QEMU Block devices */
1175
1176#define HD_OPTS "media=disk"
1177#define CDROM_OPTS "media=cdrom"
1178#define FD_OPTS ""
1179#define PFLASH_OPTS ""
1180#define MTD_OPTS ""
1181#define SD_OPTS ""
1182
1183static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
1184{
1185    BlockInterfaceType *block_default_type = opaque;
1186
1187    return drive_new(opts, *block_default_type) == NULL;
1188}
1189
1190static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
1191{
1192    if (qemu_opt_get(opts, "snapshot") == NULL) {
1193        qemu_opt_set(opts, "snapshot", "on", &error_abort);
1194    }
1195    return 0;
1196}
1197
1198static void default_drive(int enable, int snapshot, BlockInterfaceType type,
1199                          int index, const char *optstr)
1200{
1201    QemuOpts *opts;
1202    DriveInfo *dinfo;
1203
1204    if (!enable || drive_get_by_index(type, index)) {
1205        return;
1206    }
1207
1208    opts = drive_add(type, index, NULL, optstr);
1209    if (snapshot) {
1210        drive_enable_snapshot(NULL, opts, NULL);
1211    }
1212
1213    dinfo = drive_new(opts, type);
1214    if (!dinfo) {
1215        exit(1);
1216    }
1217    dinfo->is_default = true;
1218
1219}
1220
1221static QemuOptsList qemu_smp_opts = {
1222    .name = "smp-opts",
1223    .implied_opt_name = "cpus",
1224    .merge_lists = true,
1225    .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head),
1226    .desc = {
1227        {
1228            .name = "cpus",
1229            .type = QEMU_OPT_NUMBER,
1230        }, {
1231            .name = "sockets",
1232            .type = QEMU_OPT_NUMBER,
1233        }, {
1234            .name = "cores",
1235            .type = QEMU_OPT_NUMBER,
1236        }, {
1237            .name = "threads",
1238            .type = QEMU_OPT_NUMBER,
1239        }, {
1240            .name = "maxcpus",
1241            .type = QEMU_OPT_NUMBER,
1242        },
1243        { /*End of list */ }
1244    },
1245};
1246
1247static void smp_parse(QemuOpts *opts)
1248{
1249    if (opts) {
1250        unsigned cpus    = qemu_opt_get_number(opts, "cpus", 0);
1251        unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
1252        unsigned cores   = qemu_opt_get_number(opts, "cores", 0);
1253        unsigned threads = qemu_opt_get_number(opts, "threads", 0);
1254
1255        /* compute missing values, prefer sockets over cores over threads */
1256        if (cpus == 0 || sockets == 0) {
1257            sockets = sockets > 0 ? sockets : 1;
1258            cores = cores > 0 ? cores : 1;
1259            threads = threads > 0 ? threads : 1;
1260            if (cpus == 0) {
1261                cpus = cores * threads * sockets;
1262            }
1263        } else if (cores == 0) {
1264            threads = threads > 0 ? threads : 1;
1265            cores = cpus / (sockets * threads);
1266            cores = cores > 0 ? cores : 1;
1267        } else if (threads == 0) {
1268            threads = cpus / (cores * sockets);
1269            threads = threads > 0 ? threads : 1;
1270        } else if (sockets * cores * threads < cpus) {
1271            error_report("cpu topology: "
1272                         "sockets (%u) * cores (%u) * threads (%u) < "
1273                         "smp_cpus (%u)",
1274                         sockets, cores, threads, cpus);
1275            exit(1);
1276        }
1277
1278        max_cpus = qemu_opt_get_number(opts, "maxcpus", cpus);
1279
1280        if (max_cpus > MAX_CPUMASK_BITS) {
1281            error_report("unsupported number of maxcpus");
1282            exit(1);
1283        }
1284
1285        if (max_cpus < cpus) {
1286            error_report("maxcpus must be equal to or greater than smp");
1287            exit(1);
1288        }
1289
1290        if (sockets * cores * threads > max_cpus) {
1291            error_report("cpu topology: "
1292                         "sockets (%u) * cores (%u) * threads (%u) > "
1293                         "maxcpus (%u)",
1294                         sockets, cores, threads, max_cpus);
1295            exit(1);
1296        }
1297
1298        smp_cpus = cpus;
1299        smp_cores = cores;
1300        smp_threads = threads;
1301    }
1302
1303    if (smp_cpus > 1) {
1304        Error *blocker = NULL;
1305        error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "smp");
1306        replay_add_blocker(blocker);
1307    }
1308}
1309
1310static void realtime_init(void)
1311{
1312    if (enable_mlock) {
1313        if (os_mlock() < 0) {
1314            error_report("locking memory failed");
1315            exit(1);
1316        }
1317    }
1318}
1319
1320
1321static void configure_msg(QemuOpts *opts)
1322{
1323    enable_timestamp_msg = qemu_opt_get_bool(opts, "timestamp", true);
1324}
1325
1326/***********************************************************/
1327/* Semihosting */
1328
1329typedef struct SemihostingConfig {
1330    bool enabled;
1331    SemihostingTarget target;
1332    const char **argv;
1333    int argc;
1334    const char *cmdline; /* concatenated argv */
1335} SemihostingConfig;
1336
1337static SemihostingConfig semihosting;
1338
1339bool semihosting_enabled(void)
1340{
1341    return semihosting.enabled;
1342}
1343
1344SemihostingTarget semihosting_get_target(void)
1345{
1346    return semihosting.target;
1347}
1348
1349const char *semihosting_get_arg(int i)
1350{
1351    if (i >= semihosting.argc) {
1352        return NULL;
1353    }
1354    return semihosting.argv[i];
1355}
1356
1357int semihosting_get_argc(void)
1358{
1359    return semihosting.argc;
1360}
1361
1362const char *semihosting_get_cmdline(void)
1363{
1364    if (semihosting.cmdline == NULL && semihosting.argc > 0) {
1365        semihosting.cmdline = g_strjoinv(" ", (gchar **)semihosting.argv);
1366    }
1367    return semihosting.cmdline;
1368}
1369
1370static int add_semihosting_arg(void *opaque,
1371                               const char *name, const char *val,
1372                               Error **errp)
1373{
1374    SemihostingConfig *s = opaque;
1375    if (strcmp(name, "arg") == 0) {
1376        s->argc++;
1377        /* one extra element as g_strjoinv() expects NULL-terminated array */
1378        s->argv = g_realloc(s->argv, (s->argc + 1) * sizeof(void *));
1379        s->argv[s->argc - 1] = val;
1380        s->argv[s->argc] = NULL;
1381    }
1382    return 0;
1383}
1384
1385/* Use strings passed via -kernel/-append to initialize semihosting.argv[] */
1386static inline void semihosting_arg_fallback(const char *file, const char *cmd)
1387{
1388    char *cmd_token;
1389
1390    /* argv[0] */
1391    add_semihosting_arg(&semihosting, "arg", file, NULL);
1392
1393    /* split -append and initialize argv[1..n] */
1394    cmd_token = strtok(g_strdup(cmd), " ");
1395    while (cmd_token) {
1396        add_semihosting_arg(&semihosting, "arg", cmd_token, NULL);
1397        cmd_token = strtok(NULL, " ");
1398    }
1399}
1400
1401/* Now we still need this for compatibility with XEN. */
1402bool has_igd_gfx_passthru;
1403static void igd_gfx_passthru(void)
1404{
1405    has_igd_gfx_passthru = current_machine->igd_gfx_passthru;
1406}
1407
1408/***********************************************************/
1409/* USB devices */
1410
1411static int usb_device_add(const char *devname)
1412{
1413    USBDevice *dev = NULL;
1414#ifndef CONFIG_LINUX
1415    const char *p;
1416#endif
1417
1418    if (!machine_usb(current_machine)) {
1419        return -1;
1420    }
1421
1422    /* drivers with .usbdevice_name entry in USBDeviceInfo */
1423    dev = usbdevice_create(devname);
1424    if (dev)
1425        goto done;
1426
1427    /* the other ones */
1428#ifndef CONFIG_LINUX
1429    /* only the linux version is qdev-ified, usb-bsd still needs this */
1430    if (strstart(devname, "host:", &p)) {
1431        dev = usb_host_device_open(usb_bus_find(-1), p);
1432    }
1433#endif
1434    if (!dev)
1435        return -1;
1436
1437done:
1438    return 0;
1439}
1440
1441static int usb_device_del(const char *devname)
1442{
1443    int bus_num, addr;
1444    const char *p;
1445
1446    if (strstart(devname, "host:", &p)) {
1447        return -1;
1448    }
1449
1450    if (!machine_usb(current_machine)) {
1451        return -1;
1452    }
1453
1454    p = strchr(devname, '.');
1455    if (!p)
1456        return -1;
1457    bus_num = strtoul(devname, NULL, 0);
1458    addr = strtoul(p + 1, NULL, 0);
1459
1460    return usb_device_delete_addr(bus_num, addr);
1461}
1462
1463static int usb_parse(const char *cmdline)
1464{
1465    int r;
1466    r = usb_device_add(cmdline);
1467    if (r < 0) {
1468        error_report("could not add USB device '%s'", cmdline);
1469    }
1470    return r;
1471}
1472
1473void hmp_usb_add(Monitor *mon, const QDict *qdict)
1474{
1475    const char *devname = qdict_get_str(qdict, "devname");
1476    if (usb_device_add(devname) < 0) {
1477        error_report("could not add USB device '%s'", devname);
1478    }
1479}
1480
1481void hmp_usb_del(Monitor *mon, const QDict *qdict)
1482{
1483    const char *devname = qdict_get_str(qdict, "devname");
1484    if (usb_device_del(devname) < 0) {
1485        error_report("could not delete USB device '%s'", devname);
1486    }
1487}
1488
1489/***********************************************************/
1490/* machine registration */
1491
1492MachineState *current_machine;
1493
1494static MachineClass *find_machine(const char *name)
1495{
1496    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1497    MachineClass *mc = NULL;
1498
1499    for (el = machines; el; el = el->next) {
1500        MachineClass *temp = el->data;
1501
1502        if (!strcmp(temp->name, name)) {
1503            mc = temp;
1504            break;
1505        }
1506        if (temp->alias &&
1507            !strcmp(temp->alias, name)) {
1508            mc = temp;
1509            break;
1510        }
1511    }
1512
1513    g_slist_free(machines);
1514    return mc;
1515}
1516
1517MachineClass *find_default_machine(void)
1518{
1519    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1520    MachineClass *mc = NULL;
1521
1522    for (el = machines; el; el = el->next) {
1523        MachineClass *temp = el->data;
1524
1525        if (temp->is_default) {
1526            mc = temp;
1527            break;
1528        }
1529    }
1530
1531    g_slist_free(machines);
1532    return mc;
1533}
1534
1535MachineInfoList *qmp_query_machines(Error **errp)
1536{
1537    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1538    MachineInfoList *mach_list = NULL;
1539
1540    for (el = machines; el; el = el->next) {
1541        MachineClass *mc = el->data;
1542        MachineInfoList *entry;
1543        MachineInfo *info;
1544
1545        info = g_malloc0(sizeof(*info));
1546        if (mc->is_default) {
1547            info->has_is_default = true;
1548            info->is_default = true;
1549        }
1550
1551        if (mc->alias) {
1552            info->has_alias = true;
1553            info->alias = g_strdup(mc->alias);
1554        }
1555
1556        info->name = g_strdup(mc->name);
1557        info->cpu_max = !mc->max_cpus ? 1 : mc->max_cpus;
1558        info->hotpluggable_cpus = !!mc->query_hotpluggable_cpus;
1559
1560        entry = g_malloc0(sizeof(*entry));
1561        entry->value = info;
1562        entry->next = mach_list;
1563        mach_list = entry;
1564    }
1565
1566    g_slist_free(machines);
1567    return mach_list;
1568}
1569
1570static int machine_help_func(QemuOpts *opts, MachineState *machine)
1571{
1572    ObjectProperty *prop;
1573    ObjectPropertyIterator iter;
1574
1575    if (!qemu_opt_has_help_opt(opts)) {
1576        return 0;
1577    }
1578
1579    object_property_iter_init(&iter, OBJECT(machine));
1580    while ((prop = object_property_iter_next(&iter))) {
1581        if (!prop->set) {
1582            continue;
1583        }
1584
1585        error_printf("%s.%s=%s", MACHINE_GET_CLASS(machine)->name,
1586                     prop->name, prop->type);
1587        if (prop->description) {
1588            error_printf(" (%s)\n", prop->description);
1589        } else {
1590            error_printf("\n");
1591        }
1592    }
1593
1594    return 1;
1595}
1596
1597/***********************************************************/
1598/* main execution loop */
1599
1600struct vm_change_state_entry {
1601    VMChangeStateHandler *cb;
1602    void *opaque;
1603    QLIST_ENTRY (vm_change_state_entry) entries;
1604};
1605
1606static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
1607
1608VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
1609                                                     void *opaque)
1610{
1611    VMChangeStateEntry *e;
1612
1613    e = g_malloc0(sizeof (*e));
1614
1615    e->cb = cb;
1616    e->opaque = opaque;
1617    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
1618    return e;
1619}
1620
1621void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
1622{
1623    QLIST_REMOVE (e, entries);
1624    g_free (e);
1625}
1626
1627void vm_state_notify(int running, RunState state)
1628{
1629    VMChangeStateEntry *e, *next;
1630
1631    trace_vm_state_notify(running, state);
1632
1633    QLIST_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
1634        e->cb(e->opaque, running, state);
1635    }
1636}
1637
1638/* reset/shutdown handler */
1639
1640typedef struct QEMUResetEntry {
1641    QTAILQ_ENTRY(QEMUResetEntry) entry;
1642    QEMUResetHandler *func;
1643    void *opaque;
1644} QEMUResetEntry;
1645
1646static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
1647    QTAILQ_HEAD_INITIALIZER(reset_handlers);
1648static int reset_requested;
1649static int shutdown_requested, shutdown_signal = -1;
1650static pid_t shutdown_pid;
1651static int powerdown_requested;
1652static int debug_requested;
1653static int suspend_requested;
1654static WakeupReason wakeup_reason;
1655static NotifierList powerdown_notifiers =
1656    NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
1657static NotifierList suspend_notifiers =
1658    NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
1659static NotifierList wakeup_notifiers =
1660    NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
1661static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
1662
1663int qemu_shutdown_requested_get(void)
1664{
1665    return shutdown_requested;
1666}
1667
1668int qemu_reset_requested_get(void)
1669{
1670    return reset_requested;
1671}
1672
1673static int qemu_shutdown_requested(void)
1674{
1675    return atomic_xchg(&shutdown_requested, 0);
1676}
1677
1678static void qemu_kill_report(void)
1679{
1680    if (!qtest_driver() && shutdown_signal != -1) {
1681        if (shutdown_pid == 0) {
1682            /* This happens for eg ^C at the terminal, so it's worth
1683             * avoiding printing an odd message in that case.
1684             */
1685            error_report("terminating on signal %d", shutdown_signal);
1686        } else {
1687            char *shutdown_cmd = qemu_get_pid_name(shutdown_pid);
1688
1689            error_report("terminating on signal %d from pid " FMT_pid " (%s)",
1690                         shutdown_signal, shutdown_pid,
1691                         shutdown_cmd ? shutdown_cmd : "<unknown process>");
1692            g_free(shutdown_cmd);
1693        }
1694        shutdown_signal = -1;
1695    }
1696}
1697
1698static int qemu_reset_requested(void)
1699{
1700    int r = reset_requested;
1701    if (r && replay_checkpoint(CHECKPOINT_RESET_REQUESTED)) {
1702        reset_requested = 0;
1703        return r;
1704    }
1705    return false;
1706}
1707
1708static int qemu_suspend_requested(void)
1709{
1710    int r = suspend_requested;
1711    if (r && replay_checkpoint(CHECKPOINT_SUSPEND_REQUESTED)) {
1712        suspend_requested = 0;
1713        return r;
1714    }
1715    return false;
1716}
1717
1718static WakeupReason qemu_wakeup_requested(void)
1719{
1720    return wakeup_reason;
1721}
1722
1723static int qemu_powerdown_requested(void)
1724{
1725    int r = powerdown_requested;
1726    powerdown_requested = 0;
1727    return r;
1728}
1729
1730static int qemu_debug_requested(void)
1731{
1732    int r = debug_requested;
1733    debug_requested = 0;
1734    return r;
1735}
1736
1737void qemu_register_reset(QEMUResetHandler *func, void *opaque)
1738{
1739    QEMUResetEntry *re = g_malloc0(sizeof(QEMUResetEntry));
1740
1741    re->func = func;
1742    re->opaque = opaque;
1743    QTAILQ_INSERT_TAIL(&reset_handlers, re, entry);
1744}
1745
1746void qemu_unregister_reset(QEMUResetHandler *func, void *opaque)
1747{
1748    QEMUResetEntry *re;
1749
1750    QTAILQ_FOREACH(re, &reset_handlers, entry) {
1751        if (re->func == func && re->opaque == opaque) {
1752            QTAILQ_REMOVE(&reset_handlers, re, entry);
1753            g_free(re);
1754            return;
1755        }
1756    }
1757}
1758
1759void qemu_devices_reset(void)
1760{
1761    QEMUResetEntry *re, *nre;
1762
1763    /* reset all devices */
1764    QTAILQ_FOREACH_SAFE(re, &reset_handlers, entry, nre) {
1765        re->func(re->opaque);
1766    }
1767}
1768
1769void qemu_system_reset(bool report)
1770{
1771    MachineClass *mc;
1772
1773    mc = current_machine ? MACHINE_GET_CLASS(current_machine) : NULL;
1774
1775    cpu_synchronize_all_states();
1776
1777    if (mc && mc->reset) {
1778        mc->reset();
1779    } else {
1780        qemu_devices_reset();
1781    }
1782    if (report) {
1783        qapi_event_send_reset(&error_abort);
1784    }
1785    cpu_synchronize_all_post_reset();
1786}
1787
1788void qemu_system_guest_panicked(void)
1789{
1790    if (current_cpu) {
1791        current_cpu->crash_occurred = true;
1792    }
1793    qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, &error_abort);
1794    vm_stop(RUN_STATE_GUEST_PANICKED);
1795    if (!no_shutdown) {
1796        qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
1797                                       &error_abort);
1798        qemu_system_shutdown_request();
1799    }
1800}
1801
1802void qemu_system_reset_request(void)
1803{
1804    if (no_reboot) {
1805        shutdown_requested = 1;
1806    } else {
1807        reset_requested = 1;
1808    }
1809    cpu_stop_current();
1810    qemu_notify_event();
1811}
1812
1813static void qemu_system_suspend(void)
1814{
1815    pause_all_vcpus();
1816    notifier_list_notify(&suspend_notifiers, NULL);
1817    runstate_set(RUN_STATE_SUSPENDED);
1818    qapi_event_send_suspend(&error_abort);
1819}
1820
1821void qemu_system_suspend_request(void)
1822{
1823    if (runstate_check(RUN_STATE_SUSPENDED)) {
1824        return;
1825    }
1826    suspend_requested = 1;
1827    cpu_stop_current();
1828    qemu_notify_event();
1829}
1830
1831void qemu_register_suspend_notifier(Notifier *notifier)
1832{
1833    notifier_list_add(&suspend_notifiers, notifier);
1834}
1835
1836void qemu_system_wakeup_request(WakeupReason reason)
1837{
1838    trace_system_wakeup_request(reason);
1839
1840    if (!runstate_check(RUN_STATE_SUSPENDED)) {
1841        return;
1842    }
1843    if (!(wakeup_reason_mask & (1 << reason))) {
1844        return;
1845    }
1846    runstate_set(RUN_STATE_RUNNING);
1847    wakeup_reason = reason;
1848    qemu_notify_event();
1849}
1850
1851void qemu_system_wakeup_enable(WakeupReason reason, bool enabled)
1852{
1853    if (enabled) {
1854        wakeup_reason_mask |= (1 << reason);
1855    } else {
1856        wakeup_reason_mask &= ~(1 << reason);
1857    }
1858}
1859
1860void qemu_register_wakeup_notifier(Notifier *notifier)
1861{
1862    notifier_list_add(&wakeup_notifiers, notifier);
1863}
1864
1865void qemu_system_killed(int signal, pid_t pid)
1866{
1867    shutdown_signal = signal;
1868    shutdown_pid = pid;
1869    no_shutdown = 0;
1870
1871    /* Cannot call qemu_system_shutdown_request directly because
1872     * we are in a signal handler.
1873     */
1874    shutdown_requested = 1;
1875    qemu_notify_event();
1876}
1877
1878void qemu_system_shutdown_request(void)
1879{
1880    trace_qemu_system_shutdown_request();
1881    replay_shutdown_request();
1882    shutdown_requested = 1;
1883    qemu_notify_event();
1884}
1885
1886static void qemu_system_powerdown(void)
1887{
1888    qapi_event_send_powerdown(&error_abort);
1889    notifier_list_notify(&powerdown_notifiers, NULL);
1890}
1891
1892void qemu_system_powerdown_request(void)
1893{
1894    trace_qemu_system_powerdown_request();
1895    powerdown_requested = 1;
1896    qemu_notify_event();
1897}
1898
1899void qemu_register_powerdown_notifier(Notifier *notifier)
1900{
1901    notifier_list_add(&powerdown_notifiers, notifier);
1902}
1903
1904void qemu_system_debug_request(void)
1905{
1906    debug_requested = 1;
1907    qemu_notify_event();
1908}
1909
1910static bool main_loop_should_exit(void)
1911{
1912    RunState r;
1913    if (qemu_debug_requested()) {
1914        vm_stop(RUN_STATE_DEBUG);
1915    }
1916    if (qemu_suspend_requested()) {
1917        qemu_system_suspend();
1918    }
1919    if (qemu_shutdown_requested()) {
1920        qemu_kill_report();
1921        qapi_event_send_shutdown(&error_abort);
1922        if (no_shutdown) {
1923            vm_stop(RUN_STATE_SHUTDOWN);
1924        } else {
1925            return true;
1926        }
1927    }
1928    if (qemu_reset_requested()) {
1929        pause_all_vcpus();
1930        qemu_system_reset(VMRESET_REPORT);
1931        resume_all_vcpus();
1932        if (!runstate_check(RUN_STATE_RUNNING) &&
1933                !runstate_check(RUN_STATE_INMIGRATE)) {
1934            runstate_set(RUN_STATE_PRELAUNCH);
1935        }
1936    }
1937    if (qemu_wakeup_requested()) {
1938        pause_all_vcpus();
1939        qemu_system_reset(VMRESET_SILENT);
1940        notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
1941        wakeup_reason = QEMU_WAKEUP_REASON_NONE;
1942        resume_all_vcpus();
1943        qapi_event_send_wakeup(&error_abort);
1944    }
1945    if (qemu_powerdown_requested()) {
1946        qemu_system_powerdown();
1947    }
1948    if (qemu_vmstop_requested(&r)) {
1949        vm_stop(r);
1950    }
1951    return false;
1952}
1953
1954static void main_loop(void)
1955{
1956    bool nonblocking;
1957    int last_io = 0;
1958#ifdef CONFIG_PROFILER
1959    int64_t ti;
1960#endif
1961    do {
1962        nonblocking = !kvm_enabled() && !xen_enabled() && last_io > 0;
1963#ifdef CONFIG_PROFILER
1964        ti = profile_getclock();
1965#endif
1966        last_io = main_loop_wait(nonblocking);
1967#ifdef CONFIG_PROFILER
1968        dev_time += profile_getclock() - ti;
1969#endif
1970    } while (!main_loop_should_exit());
1971}
1972
1973static void version(void)
1974{
1975    printf("QEMU emulator version " QEMU_VERSION QEMU_PKGVERSION "\n"
1976           QEMU_COPYRIGHT "\n");
1977}
1978
1979static void help(int exitcode)
1980{
1981    version();
1982    printf("usage: %s [options] [disk_image]\n\n"
1983           "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
1984            error_get_progname());
1985
1986#define QEMU_OPTIONS_GENERATE_HELP
1987#include "qemu-options-wrapper.h"
1988
1989    printf("\nDuring emulation, the following keys are useful:\n"
1990           "ctrl-alt-f      toggle full screen\n"
1991           "ctrl-alt-n      switch to virtual console 'n'\n"
1992           "ctrl-alt        toggle mouse and keyboard grab\n"
1993           "\n"
1994           "When using -nographic, press 'ctrl-a h' to get some help.\n");
1995
1996    exit(exitcode);
1997}
1998
1999#define HAS_ARG 0x0001
2000
2001typedef struct QEMUOption {
2002    const char *name;
2003    int flags;
2004    int index;
2005    uint32_t arch_mask;
2006} QEMUOption;
2007
2008static const QEMUOption qemu_options[] = {
2009    { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
2010#define QEMU_OPTIONS_GENERATE_OPTIONS
2011#include "qemu-options-wrapper.h"
2012    { NULL },
2013};
2014
2015typedef struct VGAInterfaceInfo {
2016    const char *opt_name;    /* option name */
2017    const char *name;        /* human-readable name */
2018    /* Class names indicating that support is available.
2019     * If no class is specified, the interface is always available */
2020    const char *class_names[2];
2021} VGAInterfaceInfo;
2022
2023static VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
2024    [VGA_NONE] = {
2025        .opt_name = "none",
2026    },
2027    [VGA_STD] = {
2028        .opt_name = "std",
2029        .name = "standard VGA",
2030        .class_names = { "VGA", "isa-vga" },
2031    },
2032    [VGA_CIRRUS] = {
2033        .opt_name = "cirrus",
2034        .name = "Cirrus VGA",
2035        .class_names = { "cirrus-vga", "isa-cirrus-vga" },
2036    },
2037    [VGA_VMWARE] = {
2038        .opt_name = "vmware",
2039        .name = "VMWare SVGA",
2040        .class_names = { "vmware-svga" },
2041    },
2042    [VGA_VIRTIO] = {
2043        .opt_name = "virtio",
2044        .name = "Virtio VGA",
2045        .class_names = { "virtio-vga" },
2046    },
2047    [VGA_QXL] = {
2048        .opt_name = "qxl",
2049        .name = "QXL VGA",
2050        .class_names = { "qxl-vga" },
2051    },
2052    [VGA_TCX] = {
2053        .opt_name = "tcx",
2054        .name = "TCX framebuffer",
2055        .class_names = { "SUNW,tcx" },
2056    },
2057    [VGA_CG3] = {
2058        .opt_name = "cg3",
2059        .name = "CG3 framebuffer",
2060        .class_names = { "cgthree" },
2061    },
2062    [VGA_XENFB] = {
2063        .opt_name = "xenfb",
2064    },
2065};
2066
2067static bool vga_interface_available(VGAInterfaceType t)
2068{
2069    VGAInterfaceInfo *ti = &vga_interfaces[t];
2070
2071    assert(t < VGA_TYPE_MAX);
2072    return !ti->class_names[0] ||
2073           object_class_by_name(ti->class_names[0]) ||
2074           object_class_by_name(ti->class_names[1]);
2075}
2076
2077static void select_vgahw(const char *p)
2078{
2079    const char *opts;
2080    int t;
2081
2082    assert(vga_interface_type == VGA_NONE);
2083    for (t = 0; t < VGA_TYPE_MAX; t++) {
2084        VGAInterfaceInfo *ti = &vga_interfaces[t];
2085        if (ti->opt_name && strstart(p, ti->opt_name, &opts)) {
2086            if (!vga_interface_available(t)) {
2087                error_report("%s not available", ti->name);
2088                exit(1);
2089            }
2090            vga_interface_type = t;
2091            break;
2092        }
2093    }
2094    if (t == VGA_TYPE_MAX) {
2095    invalid_vga:
2096        error_report("unknown vga type: %s", p);
2097        exit(1);
2098    }
2099    while (*opts) {
2100        const char *nextopt;
2101
2102        if (strstart(opts, ",retrace=", &nextopt)) {
2103            opts = nextopt;
2104            if (strstart(opts, "dumb", &nextopt))
2105                vga_retrace_method = VGA_RETRACE_DUMB;
2106            else if (strstart(opts, "precise", &nextopt))
2107                vga_retrace_method = VGA_RETRACE_PRECISE;
2108            else goto invalid_vga;
2109        } else goto invalid_vga;
2110        opts = nextopt;
2111    }
2112}
2113
2114typedef enum DisplayType {
2115    DT_DEFAULT,
2116    DT_CURSES,
2117    DT_SDL,
2118    DT_COCOA,
2119    DT_GTK,
2120    DT_NONE,
2121} DisplayType;
2122
2123static DisplayType select_display(const char *p)
2124{
2125    const char *opts;
2126    DisplayType display = DT_DEFAULT;
2127
2128    if (strstart(p, "sdl", &opts)) {
2129#ifdef CONFIG_SDL
2130        display = DT_SDL;
2131        while (*opts) {
2132            const char *nextopt;
2133
2134            if (strstart(opts, ",frame=", &nextopt)) {
2135                opts = nextopt;
2136                if (strstart(opts, "on", &nextopt)) {
2137                    no_frame = 0;
2138                } else if (strstart(opts, "off", &nextopt)) {
2139                    no_frame = 1;
2140                } else {
2141                    goto invalid_sdl_args;
2142                }
2143            } else if (strstart(opts, ",alt_grab=", &nextopt)) {
2144                opts = nextopt;
2145                if (strstart(opts, "on", &nextopt)) {
2146                    alt_grab = 1;
2147                } else if (strstart(opts, "off", &nextopt)) {
2148                    alt_grab = 0;
2149                } else {
2150                    goto invalid_sdl_args;
2151                }
2152            } else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
2153                opts = nextopt;
2154                if (strstart(opts, "on", &nextopt)) {
2155                    ctrl_grab = 1;
2156                } else if (strstart(opts, "off", &nextopt)) {
2157                    ctrl_grab = 0;
2158                } else {
2159                    goto invalid_sdl_args;
2160                }
2161            } else if (strstart(opts, ",window_close=", &nextopt)) {
2162                opts = nextopt;
2163                if (strstart(opts, "on", &nextopt)) {
2164                    no_quit = 0;
2165                } else if (strstart(opts, "off", &nextopt)) {
2166                    no_quit = 1;
2167                } else {
2168                    goto invalid_sdl_args;
2169                }
2170            } else if (strstart(opts, ",gl=", &nextopt)) {
2171                opts = nextopt;
2172                if (strstart(opts, "on", &nextopt)) {
2173                    request_opengl = 1;
2174                } else if (strstart(opts, "off", &nextopt)) {
2175                    request_opengl = 0;
2176                } else {
2177                    goto invalid_sdl_args;
2178                }
2179            } else {
2180            invalid_sdl_args:
2181                error_report("invalid SDL option string");
2182                exit(1);
2183            }
2184            opts = nextopt;
2185        }
2186#else
2187        error_report("SDL support is disabled");
2188        exit(1);
2189#endif
2190    } else if (strstart(p, "vnc", &opts)) {
2191        if (*opts == '=') {
2192            vnc_parse(opts + 1, &error_fatal);
2193        } else {
2194            error_report("VNC requires a display argument vnc=<display>");
2195            exit(1);
2196        }
2197    } else if (strstart(p, "curses", &opts)) {
2198#ifdef CONFIG_CURSES
2199        display = DT_CURSES;
2200#else
2201        error_report("curses support is disabled");
2202        exit(1);
2203#endif
2204    } else if (strstart(p, "gtk", &opts)) {
2205#ifdef CONFIG_GTK
2206        display = DT_GTK;
2207        while (*opts) {
2208            const char *nextopt;
2209
2210            if (strstart(opts, ",grab_on_hover=", &nextopt)) {
2211                opts = nextopt;
2212                if (strstart(opts, "on", &nextopt)) {
2213                    grab_on_hover = true;
2214                } else if (strstart(opts, "off", &nextopt)) {
2215                    grab_on_hover = false;
2216                } else {
2217                    goto invalid_gtk_args;
2218                }
2219            } else if (strstart(opts, ",gl=", &nextopt)) {
2220                opts = nextopt;
2221                if (strstart(opts, "on", &nextopt)) {
2222                    request_opengl = 1;
2223                } else if (strstart(opts, "off", &nextopt)) {
2224                    request_opengl = 0;
2225                } else {
2226                    goto invalid_gtk_args;
2227                }
2228            } else {
2229            invalid_gtk_args:
2230                error_report("invalid GTK option string");
2231                exit(1);
2232            }
2233            opts = nextopt;
2234        }
2235#else
2236        error_report("GTK support is disabled");
2237        exit(1);
2238#endif
2239    } else if (strstart(p, "none", &opts)) {
2240        display = DT_NONE;
2241    } else {
2242        error_report("unknown display type");
2243        exit(1);
2244    }
2245
2246    return display;
2247}
2248
2249static int balloon_parse(const char *arg)
2250{
2251    QemuOpts *opts;
2252
2253    if (strcmp(arg, "none") == 0) {
2254        return 0;
2255    }
2256
2257    if (!strncmp(arg, "virtio", 6)) {
2258        if (arg[6] == ',') {
2259            /* have params -> parse them */
2260            opts = qemu_opts_parse_noisily(qemu_find_opts("device"), arg + 7,
2261                                           false);
2262            if (!opts)
2263                return  -1;
2264        } else {
2265            /* create empty opts */
2266            opts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
2267                                    &error_abort);
2268        }
2269        qemu_opt_set(opts, "driver", "virtio-balloon", &error_abort);
2270        return 0;
2271    }
2272
2273    return -1;
2274}
2275
2276char *qemu_find_file(int type, const char *name)
2277{
2278    int i;
2279    const char *subdir;
2280    char *buf;
2281
2282    /* Try the name as a straight path first */
2283    if (access(name, R_OK) == 0) {
2284        trace_load_file(name, name);
2285        return g_strdup(name);
2286    }
2287
2288    switch (type) {
2289    case QEMU_FILE_TYPE_BIOS:
2290        subdir = "";
2291        break;
2292    case QEMU_FILE_TYPE_KEYMAP:
2293        subdir = "keymaps/";
2294        break;
2295    default:
2296        abort();
2297    }
2298
2299    for (i = 0; i < data_dir_idx; i++) {
2300        buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
2301        if (access(buf, R_OK) == 0) {
2302            trace_load_file(name, buf);
2303            return buf;
2304        }
2305        g_free(buf);
2306    }
2307    return NULL;
2308}
2309
2310static inline bool nonempty_str(const char *str)
2311{
2312    return str && *str;
2313}
2314
2315static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
2316{
2317    gchar *buf;
2318    size_t size;
2319    const char *name, *file, *str;
2320    FWCfgState *fw_cfg = (FWCfgState *) opaque;
2321
2322    if (fw_cfg == NULL) {
2323        error_report("fw_cfg device not available");
2324        return -1;
2325    }
2326    name = qemu_opt_get(opts, "name");
2327    file = qemu_opt_get(opts, "file");
2328    str = qemu_opt_get(opts, "string");
2329
2330    /* we need name and either a file or the content string */
2331    if (!(nonempty_str(name) && (nonempty_str(file) || nonempty_str(str)))) {
2332        error_report("invalid argument(s)");
2333        return -1;
2334    }
2335    if (nonempty_str(file) && nonempty_str(str)) {
2336        error_report("file and string are mutually exclusive");
2337        return -1;
2338    }
2339    if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) {
2340        error_report("name too long (max. %d char)", FW_CFG_MAX_FILE_PATH - 1);
2341        return -1;
2342    }
2343    if (strncmp(name, "opt/", 4) != 0) {
2344        error_report("warning: externally provided fw_cfg item names "
2345                     "should be prefixed with \"opt/\"");
2346    }
2347    if (nonempty_str(str)) {
2348        size = strlen(str); /* NUL terminator NOT included in fw_cfg blob */
2349        buf = g_memdup(str, size);
2350    } else {
2351        if (!g_file_get_contents(file, &buf, &size, NULL)) {
2352            error_report("can't load %s", file);
2353            return -1;
2354        }
2355    }
2356    /* For legacy, keep user files in a specific global order. */
2357    fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER);
2358    fw_cfg_add_file(fw_cfg, name, buf, size);
2359    fw_cfg_reset_order_override(fw_cfg);
2360    return 0;
2361}
2362
2363static int device_help_func(void *opaque, QemuOpts *opts, Error **errp)
2364{
2365    return qdev_device_help(opts);
2366}
2367
2368static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
2369{
2370    Error *err = NULL;
2371    DeviceState *dev;
2372
2373    dev = qdev_device_add(opts, &err);
2374    if (!dev) {
2375        error_report_err(err);
2376        return -1;
2377    }
2378    object_unref(OBJECT(dev));
2379    return 0;
2380}
2381
2382static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2383{
2384    Error *local_err = NULL;
2385
2386    qemu_chr_new_from_opts(opts, &local_err);
2387    if (local_err) {
2388        error_report_err(local_err);
2389        return -1;
2390    }
2391    return 0;
2392}
2393
2394#ifdef CONFIG_VIRTFS
2395static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2396{
2397    return qemu_fsdev_add(opts);
2398}
2399#endif
2400
2401static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
2402{
2403    CharDriverState *chr;
2404    const char *chardev;
2405    const char *mode;
2406    int flags;
2407
2408    mode = qemu_opt_get(opts, "mode");
2409    if (mode == NULL) {
2410        mode = "readline";
2411    }
2412    if (strcmp(mode, "readline") == 0) {
2413        flags = MONITOR_USE_READLINE;
2414    } else if (strcmp(mode, "control") == 0) {
2415        flags = MONITOR_USE_CONTROL;
2416    } else {
2417        error_report("unknown monitor mode \"%s\"", mode);
2418        exit(1);
2419    }
2420
2421    if (qemu_opt_get_bool(opts, "pretty", 0))
2422        flags |= MONITOR_USE_PRETTY;
2423
2424    if (qemu_opt_get_bool(opts, "default", 0)) {
2425        error_report("option 'default' does nothing and is deprecated");
2426    }
2427
2428    chardev = qemu_opt_get(opts, "chardev");
2429    chr = qemu_chr_find(chardev);
2430    if (chr == NULL) {
2431        error_report("chardev \"%s\" not found", chardev);
2432        exit(1);
2433    }
2434
2435    monitor_init(chr, flags);
2436    return 0;
2437}
2438
2439static void monitor_parse(const char *optarg, const char *mode, bool pretty)
2440{
2441    static int monitor_device_index = 0;
2442    QemuOpts *opts;
2443    const char *p;
2444    char label[32];
2445
2446    if (strstart(optarg, "chardev:", &p)) {
2447        snprintf(label, sizeof(label), "%s", p);
2448    } else {
2449        snprintf(label, sizeof(label), "compat_monitor%d",
2450                 monitor_device_index);
2451        opts = qemu_chr_parse_compat(label, optarg);
2452        if (!opts) {
2453            error_report("parse error: %s", optarg);
2454            exit(1);
2455        }
2456    }
2457
2458    opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, &error_fatal);
2459    qemu_opt_set(opts, "mode", mode, &error_abort);
2460    qemu_opt_set(opts, "chardev", label, &error_abort);
2461    qemu_opt_set_bool(opts, "pretty", pretty, &error_abort);
2462    monitor_device_index++;
2463}
2464
2465struct device_config {
2466    enum {
2467        DEV_USB,       /* -usbdevice     */
2468        DEV_BT,        /* -bt            */
2469        DEV_SERIAL,    /* -serial        */
2470        DEV_PARALLEL,  /* -parallel      */
2471        DEV_VIRTCON,   /* -virtioconsole */
2472        DEV_DEBUGCON,  /* -debugcon */
2473        DEV_GDB,       /* -gdb, -s */
2474        DEV_SCLP,      /* s390 sclp */
2475    } type;
2476    const char *cmdline;
2477    Location loc;
2478    QTAILQ_ENTRY(device_config) next;
2479};
2480
2481static QTAILQ_HEAD(, device_config) device_configs =
2482    QTAILQ_HEAD_INITIALIZER(device_configs);
2483
2484static void add_device_config(int type, const char *cmdline)
2485{
2486    struct device_config *conf;
2487
2488    conf = g_malloc0(sizeof(*conf));
2489    conf->type = type;
2490    conf->cmdline = cmdline;
2491    loc_save(&conf->loc);
2492    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
2493}
2494
2495static int foreach_device_config(int type, int (*func)(const char *cmdline))
2496{
2497    struct device_config *conf;
2498    int rc;
2499
2500    QTAILQ_FOREACH(conf, &device_configs, next) {
2501        if (conf->type != type)
2502            continue;
2503        loc_push_restore(&conf->loc);
2504        rc = func(conf->cmdline);
2505        loc_pop(&conf->loc);
2506        if (rc) {
2507            return rc;
2508        }
2509    }
2510    return 0;
2511}
2512
2513static int serial_parse(const char *devname)
2514{
2515    static int index = 0;
2516    char label[32];
2517
2518    if (strcmp(devname, "none") == 0)
2519        return 0;
2520    if (index == MAX_SERIAL_PORTS) {
2521        error_report("too many serial ports");
2522        exit(1);
2523    }
2524    snprintf(label, sizeof(label), "serial%d", index);
2525    serial_hds[index] = qemu_chr_new(label, devname);
2526    if (!serial_hds[index]) {
2527        error_report("could not connect serial device"
2528                     " to character backend '%s'", devname);
2529        return -1;
2530    }
2531    index++;
2532    return 0;
2533}
2534
2535static int parallel_parse(const char *devname)
2536{
2537    static int index = 0;
2538    char label[32];
2539
2540    if (strcmp(devname, "none") == 0)
2541        return 0;
2542    if (index == MAX_PARALLEL_PORTS) {
2543        error_report("too many parallel ports");
2544        exit(1);
2545    }
2546    snprintf(label, sizeof(label), "parallel%d", index);
2547    parallel_hds[index] = qemu_chr_new(label, devname);
2548    if (!parallel_hds[index]) {
2549        error_report("could not connect parallel device"
2550                     " to character backend '%s'", devname);
2551        return -1;
2552    }
2553    index++;
2554    return 0;
2555}
2556
2557static int virtcon_parse(const char *devname)
2558{
2559    QemuOptsList *device = qemu_find_opts("device");
2560    static int index = 0;
2561    char label[32];
2562    QemuOpts *bus_opts, *dev_opts;
2563
2564    if (strcmp(devname, "none") == 0)
2565        return 0;
2566    if (index == MAX_VIRTIO_CONSOLES) {
2567        error_report("too many virtio consoles");
2568        exit(1);
2569    }
2570
2571    bus_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2572    qemu_opt_set(bus_opts, "driver", "virtio-serial", &error_abort);
2573
2574    dev_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2575    qemu_opt_set(dev_opts, "driver", "virtconsole", &error_abort);
2576
2577    snprintf(label, sizeof(label), "virtcon%d", index);
2578    virtcon_hds[index] = qemu_chr_new(label, devname);
2579    if (!virtcon_hds[index]) {
2580        error_report("could not connect virtio console"
2581                     " to character backend '%s'", devname);
2582        return -1;
2583    }
2584    qemu_opt_set(dev_opts, "chardev", label, &error_abort);
2585
2586    index++;
2587    return 0;
2588}
2589
2590static int sclp_parse(const char *devname)
2591{
2592    QemuOptsList *device = qemu_find_opts("device");
2593    static int index = 0;
2594    char label[32];
2595    QemuOpts *dev_opts;
2596
2597    if (strcmp(devname, "none") == 0) {
2598        return 0;
2599    }
2600    if (index == MAX_SCLP_CONSOLES) {
2601        error_report("too many sclp consoles");
2602        exit(1);
2603    }
2604
2605    assert(arch_type == QEMU_ARCH_S390X);
2606
2607    dev_opts = qemu_opts_create(device, NULL, 0, NULL);
2608    qemu_opt_set(dev_opts, "driver", "sclpconsole", &error_abort);
2609
2610    snprintf(label, sizeof(label), "sclpcon%d", index);
2611    sclp_hds[index] = qemu_chr_new(label, devname);
2612    if (!sclp_hds[index]) {
2613        error_report("could not connect sclp console"
2614                     " to character backend '%s'", devname);
2615        return -1;
2616    }
2617    qemu_opt_set(dev_opts, "chardev", label, &error_abort);
2618
2619    index++;
2620    return 0;
2621}
2622
2623static int debugcon_parse(const char *devname)
2624{
2625    QemuOpts *opts;
2626
2627    if (!qemu_chr_new("debugcon", devname)) {
2628        exit(1);
2629    }
2630    opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
2631    if (!opts) {
2632        error_report("already have a debugcon device");
2633        exit(1);
2634    }
2635    qemu_opt_set(opts, "driver", "isa-debugcon", &error_abort);
2636    qemu_opt_set(opts, "chardev", "debugcon", &error_abort);
2637    return 0;
2638}
2639
2640static gint machine_class_cmp(gconstpointer a, gconstpointer b)
2641{
2642    const MachineClass *mc1 = a, *mc2 = b;
2643    int res;
2644
2645    if (mc1->family == NULL) {
2646        if (mc2->family == NULL) {
2647            /* Compare standalone machine types against each other; they sort
2648             * in increasing order.
2649             */
2650            return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
2651                          object_class_get_name(OBJECT_CLASS(mc2)));
2652        }
2653
2654        /* Standalone machine types sort after families. */
2655        return 1;
2656    }
2657
2658    if (mc2->family == NULL) {
2659        /* Families sort before standalone machine types. */
2660        return -1;
2661    }
2662
2663    /* Families sort between each other alphabetically increasingly. */
2664    res = strcmp(mc1->family, mc2->family);
2665    if (res != 0) {
2666        return res;
2667    }
2668
2669    /* Within the same family, machine types sort in decreasing order. */
2670    return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
2671                  object_class_get_name(OBJECT_CLASS(mc1)));
2672}
2673
2674 static MachineClass *machine_parse(const char *name)
2675{
2676    MachineClass *mc = NULL;
2677    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
2678
2679    if (name) {
2680        mc = find_machine(name);
2681    }
2682    if (mc) {
2683        g_slist_free(machines);
2684        return mc;
2685    }
2686    if (name && !is_help_option(name)) {
2687        error_report("unsupported machine type");
2688        error_printf("Use -machine help to list supported machines\n");
2689    } else {
2690        printf("Supported machines are:\n");
2691        machines = g_slist_sort(machines, machine_class_cmp);
2692        for (el = machines; el; el = el->next) {
2693            MachineClass *mc = el->data;
2694            if (mc->alias) {
2695                printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
2696            }
2697            printf("%-20s %s%s\n", mc->name, mc->desc,
2698                   mc->is_default ? " (default)" : "");
2699        }
2700    }
2701
2702    g_slist_free(machines);
2703    exit(!name || !is_help_option(name));
2704}
2705
2706void qemu_add_exit_notifier(Notifier *notify)
2707{
2708    notifier_list_add(&exit_notifiers, notify);
2709}
2710
2711void qemu_remove_exit_notifier(Notifier *notify)
2712{
2713    notifier_remove(notify);
2714}
2715
2716static void qemu_run_exit_notifiers(void)
2717{
2718    notifier_list_notify(&exit_notifiers, NULL);
2719}
2720
2721static bool machine_init_done;
2722
2723void qemu_add_machine_init_done_notifier(Notifier *notify)
2724{
2725    notifier_list_add(&machine_init_done_notifiers, notify);
2726    if (machine_init_done) {
2727        notify->notify(notify, NULL);
2728    }
2729}
2730
2731void qemu_remove_machine_init_done_notifier(Notifier *notify)
2732{
2733    notifier_remove(notify);
2734}
2735
2736static void qemu_run_machine_init_done_notifiers(void)
2737{
2738    notifier_list_notify(&machine_init_done_notifiers, NULL);
2739    machine_init_done = true;
2740}
2741
2742static const QEMUOption *lookup_opt(int argc, char **argv,
2743                                    const char **poptarg, int *poptind)
2744{
2745    const QEMUOption *popt;
2746    int optind = *poptind;
2747    char *r = argv[optind];
2748    const char *optarg;
2749
2750    loc_set_cmdline(argv, optind, 1);
2751    optind++;
2752    /* Treat --foo the same as -foo.  */
2753    if (r[1] == '-')
2754        r++;
2755    popt = qemu_options;
2756    for(;;) {
2757        if (!popt->name) {
2758            error_report("invalid option");
2759            exit(1);
2760        }
2761        if (!strcmp(popt->name, r + 1))
2762            break;
2763        popt++;
2764    }
2765    if (popt->flags & HAS_ARG) {
2766        if (optind >= argc) {
2767            error_report("requires an argument");
2768            exit(1);
2769        }
2770        optarg = argv[optind++];
2771        loc_set_cmdline(argv, optind - 2, 2);
2772    } else {
2773        optarg = NULL;
2774    }
2775
2776    *poptarg = optarg;
2777    *poptind = optind;
2778
2779    return popt;
2780}
2781
2782static MachineClass *select_machine(void)
2783{
2784    MachineClass *machine_class = find_default_machine();
2785    const char *optarg;
2786    QemuOpts *opts;
2787    Location loc;
2788
2789    loc_push_none(&loc);
2790
2791    opts = qemu_get_machine_opts();
2792    qemu_opts_loc_restore(opts);
2793
2794    optarg = qemu_opt_get(opts, "type");
2795    if (optarg) {
2796        machine_class = machine_parse(optarg);
2797    }
2798
2799    if (!machine_class) {
2800        error_report("No machine specified, and there is no default");
2801        error_printf("Use -machine help to list supported machines\n");
2802        exit(1);
2803    }
2804
2805    loc_pop(&loc);
2806    return machine_class;
2807}
2808
2809static int machine_set_property(void *opaque,
2810                                const char *name, const char *value,
2811                                Error **errp)
2812{
2813    Object *obj = OBJECT(opaque);
2814    Error *local_err = NULL;
2815    char *p, *qom_name;
2816
2817    if (strcmp(name, "type") == 0) {
2818        return 0;
2819    }
2820
2821    qom_name = g_strdup(name);
2822    for (p = qom_name; *p; p++) {
2823        if (*p == '_') {
2824            *p = '-';
2825        }
2826    }
2827
2828    object_property_parse(obj, value, qom_name, &local_err);
2829    g_free(qom_name);
2830
2831    if (local_err) {
2832        error_report_err(local_err);
2833        return -1;
2834    }
2835
2836    return 0;
2837}
2838
2839
2840/*
2841 * Initial object creation happens before all other
2842 * QEMU data types are created. The majority of objects
2843 * can be created at this point. The rng-egd object
2844 * cannot be created here, as it depends on the chardev
2845 * already existing.
2846 */
2847static bool object_create_initial(const char *type)
2848{
2849    if (g_str_equal(type, "rng-egd")) {
2850        return false;
2851    }
2852
2853    /*
2854     * return false for concrete netfilters since
2855     * they depend on netdevs already existing
2856     */
2857    if (g_str_equal(type, "filter-buffer") ||
2858        g_str_equal(type, "filter-dump") ||
2859        g_str_equal(type, "filter-mirror") ||
2860        g_str_equal(type, "filter-redirector") ||
2861        g_str_equal(type, "colo-compare") ||
2862        g_str_equal(type, "filter-rewriter")) {
2863        return false;
2864    }
2865
2866    /* Memory allocation by backends needs to be done
2867     * after configure_accelerator() (due to the tcg_enabled()
2868     * checks at memory_region_init_*()).
2869     *
2870     * Also, allocation of large amounts of memory may delay
2871     * chardev initialization for too long, and trigger timeouts
2872     * on software that waits for a monitor socket to be created
2873     * (e.g. libvirt).
2874     */
2875    if (g_str_has_prefix(type, "memory-backend-")) {
2876        return false;
2877    }
2878
2879    return true;
2880}
2881
2882
2883/*
2884 * The remainder of object creation happens after the
2885 * creation of chardev, fsdev, net clients and device data types.
2886 */
2887static bool object_create_delayed(const char *type)
2888{
2889    return !object_create_initial(type);
2890}
2891
2892
2893static void set_memory_options(uint64_t *ram_slots, ram_addr_t *maxram_size,
2894                               MachineClass *mc)
2895{
2896    uint64_t sz;
2897    const char *mem_str;
2898    const char *maxmem_str, *slots_str;
2899    const ram_addr_t default_ram_size = mc->default_ram_size;
2900    QemuOpts *opts = qemu_find_opts_singleton("memory");
2901    Location loc;
2902
2903    loc_push_none(&loc);
2904    qemu_opts_loc_restore(opts);
2905
2906    sz = 0;
2907    mem_str = qemu_opt_get(opts, "size");
2908    if (mem_str) {
2909        if (!*mem_str) {
2910            error_report("missing 'size' option value");
2911            exit(EXIT_FAILURE);
2912        }
2913
2914        sz = qemu_opt_get_size(opts, "size", ram_size);
2915
2916        /* Fix up legacy suffix-less format */
2917        if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
2918            uint64_t overflow_check = sz;
2919
2920            sz <<= 20;
2921            if ((sz >> 20) != overflow_check) {
2922                error_report("too large 'size' option value");
2923                exit(EXIT_FAILURE);
2924            }
2925        }
2926    }
2927
2928    /* backward compatibility behaviour for case "-m 0" */
2929    if (sz == 0) {
2930        sz = default_ram_size;
2931    }
2932
2933    sz = QEMU_ALIGN_UP(sz, 8192);
2934    ram_size = sz;
2935    if (ram_size != sz) {
2936        error_report("ram size too large");
2937        exit(EXIT_FAILURE);
2938    }
2939
2940    /* store value for the future use */
2941    qemu_opt_set_number(opts, "size", ram_size, &error_abort);
2942    *maxram_size = ram_size;
2943
2944    maxmem_str = qemu_opt_get(opts, "maxmem");
2945    slots_str = qemu_opt_get(opts, "slots");
2946    if (maxmem_str && slots_str) {
2947        uint64_t slots;
2948
2949        sz = qemu_opt_get_size(opts, "maxmem", 0);
2950        slots = qemu_opt_get_number(opts, "slots", 0);
2951        if (sz < ram_size) {
2952            error_report("invalid value of -m option maxmem: "
2953                         "maximum memory size (0x%" PRIx64 ") must be at least "
2954                         "the initial memory size (0x" RAM_ADDR_FMT ")",
2955                         sz, ram_size);
2956            exit(EXIT_FAILURE);
2957        } else if (sz > ram_size) {
2958            if (!slots) {
2959                error_report("invalid value of -m option: maxmem was "
2960                             "specified, but no hotplug slots were specified");
2961                exit(EXIT_FAILURE);
2962            }
2963        } else if (slots) {
2964            error_report("invalid value of -m option maxmem: "
2965                         "memory slots were specified but maximum memory size "
2966                         "(0x%" PRIx64 ") is equal to the initial memory size "
2967                         "(0x" RAM_ADDR_FMT ")", sz, ram_size);
2968            exit(EXIT_FAILURE);
2969        }
2970
2971        *maxram_size = sz;
2972        *ram_slots = slots;
2973    } else if ((!maxmem_str && slots_str) ||
2974            (maxmem_str && !slots_str)) {
2975        error_report("invalid -m option value: missing "
2976                "'%s' option", slots_str ? "maxmem" : "slots");
2977        exit(EXIT_FAILURE);
2978    }
2979
2980    loc_pop(&loc);
2981}
2982
2983static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
2984{
2985    GlobalProperty *g;
2986
2987    g = g_malloc0(sizeof(*g));
2988    g->driver   = qemu_opt_get(opts, "driver");
2989    g->property = qemu_opt_get(opts, "property");
2990    g->value    = qemu_opt_get(opts, "value");
2991    g->user_provided = true;
2992    g->errp = &error_fatal;
2993    qdev_prop_register_global(g);
2994    return 0;
2995}
2996
2997int main(int argc, char **argv, char **envp)
2998{
2999    int i;
3000    int snapshot, linux_boot;
3001    const char *initrd_filename;
3002    const char *kernel_filename, *kernel_cmdline;
3003    const char *boot_order = NULL;
3004    const char *boot_once = NULL;
3005    DisplayState *ds;
3006    int cyls, heads, secs, translation;
3007    QemuOpts *hda_opts = NULL, *opts, *machine_opts, *icount_opts = NULL;
3008    QemuOptsList *olist;
3009    int optind;
3010    const char *optarg;
3011    const char *loadvm = NULL;
3012    MachineClass *machine_class;
3013    const char *cpu_model;
3014    const char *vga_model = NULL;
3015    const char *qtest_chrdev = NULL;
3016    const char *qtest_log = NULL;
3017    const char *pid_file = NULL;
3018    const char *incoming = NULL;
3019    bool defconfig = true;
3020    bool userconfig = true;
3021    bool nographic = false;
3022    DisplayType display_type = DT_DEFAULT;
3023    int display_remote = 0;
3024    const char *log_mask = NULL;
3025    const char *log_file = NULL;
3026    char *trace_file = NULL;
3027    ram_addr_t maxram_size;
3028    uint64_t ram_slots = 0;
3029    FILE *vmstate_dump_file = NULL;
3030    Error *main_loop_err = NULL;
3031    Error *err = NULL;
3032    bool list_data_dirs = false;
3033
3034    module_call_init(MODULE_INIT_TRACE);
3035
3036    qemu_init_cpu_list();
3037    qemu_init_cpu_loop();
3038    qemu_mutex_lock_iothread();
3039
3040    atexit(qemu_run_exit_notifiers);
3041    error_set_progname(argv[0]);
3042    qemu_init_exec_dir(argv[0]);
3043
3044    module_call_init(MODULE_INIT_QOM);
3045    module_call_init(MODULE_INIT_QAPI);
3046
3047    qemu_add_opts(&qemu_drive_opts);
3048    qemu_add_drive_opts(&qemu_legacy_drive_opts);
3049    qemu_add_drive_opts(&qemu_common_drive_opts);
3050    qemu_add_drive_opts(&qemu_drive_opts);
3051    qemu_add_drive_opts(&bdrv_runtime_opts);
3052    qemu_add_opts(&qemu_chardev_opts);
3053    qemu_add_opts(&qemu_device_opts);
3054    qemu_add_opts(&qemu_netdev_opts);
3055    qemu_add_opts(&qemu_net_opts);
3056    qemu_add_opts(&qemu_rtc_opts);
3057    qemu_add_opts(&qemu_global_opts);
3058    qemu_add_opts(&qemu_mon_opts);
3059    qemu_add_opts(&qemu_trace_opts);
3060    qemu_add_opts(&qemu_option_rom_opts);
3061    qemu_add_opts(&qemu_machine_opts);
3062    qemu_add_opts(&qemu_mem_opts);
3063    qemu_add_opts(&qemu_smp_opts);
3064    qemu_add_opts(&qemu_boot_opts);
3065    qemu_add_opts(&qemu_sandbox_opts);
3066    qemu_add_opts(&qemu_add_fd_opts);
3067    qemu_add_opts(&qemu_object_opts);
3068    qemu_add_opts(&qemu_tpmdev_opts);
3069    qemu_add_opts(&qemu_realtime_opts);
3070    qemu_add_opts(&qemu_msg_opts);
3071    qemu_add_opts(&qemu_name_opts);
3072    qemu_add_opts(&qemu_numa_opts);
3073    qemu_add_opts(&qemu_icount_opts);
3074    qemu_add_opts(&qemu_semihosting_config_opts);
3075    qemu_add_opts(&qemu_fw_cfg_opts);
3076#ifdef CONFIG_LIBISCSI
3077    qemu_add_opts(&qemu_iscsi_opts);
3078#endif
3079    module_call_init(MODULE_INIT_OPTS);
3080
3081    runstate_init();
3082
3083    if (qcrypto_init(&err) < 0) {
3084        error_reportf_err(err, "cannot initialize crypto: ");
3085        exit(1);
3086    }
3087    rtc_clock = QEMU_CLOCK_HOST;
3088
3089    QLIST_INIT (&vm_change_state_head);
3090    os_setup_early_signal_handling();
3091
3092    cpu_model = NULL;
3093    snapshot = 0;
3094    cyls = heads = secs = 0;
3095    translation = BIOS_ATA_TRANSLATION_AUTO;
3096
3097    nb_nics = 0;
3098
3099    bdrv_init_with_whitelist();
3100
3101    autostart = 1;
3102
3103    /* first pass of option parsing */
3104    optind = 1;
3105    while (optind < argc) {
3106        if (argv[optind][0] != '-') {
3107            /* disk image */
3108            optind++;
3109        } else {
3110            const QEMUOption *popt;
3111
3112            popt = lookup_opt(argc, argv, &optarg, &optind);
3113            switch (popt->index) {
3114            case QEMU_OPTION_nodefconfig:
3115                defconfig = false;
3116                break;
3117            case QEMU_OPTION_nouserconfig:
3118                userconfig = false;
3119                break;
3120            }
3121        }
3122    }
3123
3124    if (defconfig) {
3125        int ret;
3126        ret = qemu_read_default_config_files(userconfig);
3127        if (ret < 0) {
3128            exit(1);
3129        }
3130    }
3131
3132    /* second pass of option parsing */
3133    optind = 1;
3134    for(;;) {
3135        if (optind >= argc)
3136            break;
3137        if (argv[optind][0] != '-') {
3138            hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
3139        } else {
3140            const QEMUOption *popt;
3141
3142            popt = lookup_opt(argc, argv, &optarg, &optind);
3143            if (!(popt->arch_mask & arch_type)) {
3144                error_report("Option not supported for this target");
3145                exit(1);
3146            }
3147            switch(popt->index) {
3148            case QEMU_OPTION_no_kvm_irqchip: {
3149                olist = qemu_find_opts("machine");
3150                qemu_opts_parse_noisily(olist, "kernel_irqchip=off", false);
3151                break;
3152            }
3153            case QEMU_OPTION_cpu:
3154                /* hw initialization will check this */
3155                cpu_model = optarg;
3156                break;
3157            case QEMU_OPTION_hda:
3158                {
3159                    char buf[256];
3160                    if (cyls == 0)
3161                        snprintf(buf, sizeof(buf), "%s", HD_OPTS);
3162                    else
3163                        snprintf(buf, sizeof(buf),
3164                                 "%s,cyls=%d,heads=%d,secs=%d%s",
3165                                 HD_OPTS , cyls, heads, secs,
3166                                 translation == BIOS_ATA_TRANSLATION_LBA ?
3167                                 ",trans=lba" :
3168                                 translation == BIOS_ATA_TRANSLATION_NONE ?
3169                                 ",trans=none" : "");
3170                    drive_add(IF_DEFAULT, 0, optarg, buf);
3171                    break;
3172                }
3173            case QEMU_OPTION_hdb:
3174            case QEMU_OPTION_hdc:
3175            case QEMU_OPTION_hdd:
3176                drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
3177                          HD_OPTS);
3178                break;
3179            case QEMU_OPTION_drive:
3180                if (drive_def(optarg) == NULL) {
3181                    exit(1);
3182                }
3183                break;
3184            case QEMU_OPTION_set:
3185                if (qemu_set_option(optarg) != 0)
3186                    exit(1);
3187                break;
3188            case QEMU_OPTION_global:
3189                if (qemu_global_option(optarg) != 0)
3190                    exit(1);
3191                break;
3192            case QEMU_OPTION_mtdblock:
3193                drive_add(IF_MTD, -1, optarg, MTD_OPTS);
3194                break;
3195            case QEMU_OPTION_sd:
3196                drive_add(IF_SD, -1, optarg, SD_OPTS);
3197                break;
3198            case QEMU_OPTION_pflash:
3199                drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
3200                break;
3201            case QEMU_OPTION_snapshot:
3202                snapshot = 1;
3203                break;
3204            case QEMU_OPTION_hdachs:
3205                {
3206                    const char *p;
3207                    p = optarg;
3208                    cyls = strtol(p, (char **)&p, 0);
3209                    if (cyls < 1 || cyls > 16383)
3210                        goto chs_fail;
3211                    if (*p != ',')
3212                        goto chs_fail;
3213                    p++;
3214                    heads = strtol(p, (char **)&p, 0);
3215                    if (heads < 1 || heads > 16)
3216                        goto chs_fail;
3217                    if (*p != ',')
3218                        goto chs_fail;
3219                    p++;
3220                    secs = strtol(p, (char **)&p, 0);
3221                    if (secs < 1 || secs > 63)
3222                        goto chs_fail;
3223                    if (*p == ',') {
3224                        p++;
3225                        if (!strcmp(p, "large")) {
3226                            translation = BIOS_ATA_TRANSLATION_LARGE;
3227                        } else if (!strcmp(p, "rechs")) {
3228                            translation = BIOS_ATA_TRANSLATION_RECHS;
3229                        } else if (!strcmp(p, "none")) {
3230                            translation = BIOS_ATA_TRANSLATION_NONE;
3231                        } else if (!strcmp(p, "lba")) {
3232                            translation = BIOS_ATA_TRANSLATION_LBA;
3233                        } else if (!strcmp(p, "auto")) {
3234                            translation = BIOS_ATA_TRANSLATION_AUTO;
3235                        } else {
3236                            goto chs_fail;
3237                        }
3238                    } else if (*p != '\0') {
3239                    chs_fail:
3240                        error_report("invalid physical CHS format");
3241                        exit(1);
3242                    }
3243                    if (hda_opts != NULL) {
3244                        qemu_opt_set_number(hda_opts, "cyls", cyls,
3245                                            &error_abort);
3246                        qemu_opt_set_number(hda_opts, "heads", heads,
3247                                            &error_abort);
3248                        qemu_opt_set_number(hda_opts, "secs", secs,
3249                                            &error_abort);
3250                        if (translation == BIOS_ATA_TRANSLATION_LARGE) {
3251                            qemu_opt_set(hda_opts, "trans", "large",
3252                                         &error_abort);
3253                        } else if (translation == BIOS_ATA_TRANSLATION_RECHS) {
3254                            qemu_opt_set(hda_opts, "trans", "rechs",
3255                                         &error_abort);
3256                        } else if (translation == BIOS_ATA_TRANSLATION_LBA) {
3257                            qemu_opt_set(hda_opts, "trans", "lba",
3258                                         &error_abort);
3259                        } else if (translation == BIOS_ATA_TRANSLATION_NONE) {
3260                            qemu_opt_set(hda_opts, "trans", "none",
3261                                         &error_abort);
3262                        }
3263                    }
3264                }
3265                break;
3266            case QEMU_OPTION_numa:
3267                opts = qemu_opts_parse_noisily(qemu_find_opts("numa"),
3268                                               optarg, true);
3269                if (!opts) {
3270                    exit(1);
3271                }
3272                break;
3273            case QEMU_OPTION_display:
3274                display_type = select_display(optarg);
3275                break;
3276            case QEMU_OPTION_nographic:
3277                olist = qemu_find_opts("machine");
3278                qemu_opts_parse_noisily(olist, "graphics=off", false);
3279                nographic = true;
3280                display_type = DT_NONE;
3281                break;
3282            case QEMU_OPTION_curses:
3283#ifdef CONFIG_CURSES
3284                display_type = DT_CURSES;
3285#else
3286                error_report("curses support is disabled");
3287                exit(1);
3288#endif
3289                break;
3290            case QEMU_OPTION_portrait:
3291                graphic_rotate = 90;
3292                break;
3293            case QEMU_OPTION_rotate:
3294                graphic_rotate = strtol(optarg, (char **) &optarg, 10);
3295                if (graphic_rotate != 0 && graphic_rotate != 90 &&
3296                    graphic_rotate != 180 && graphic_rotate != 270) {
3297                    error_report("only 90, 180, 270 deg rotation is available");
3298                    exit(1);
3299                }
3300                break;
3301            case QEMU_OPTION_kernel:
3302                qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg,
3303                              &error_abort);
3304                break;
3305            case QEMU_OPTION_initrd:
3306                qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg,
3307                              &error_abort);
3308                break;
3309            case QEMU_OPTION_append:
3310                qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg,
3311                              &error_abort);
3312                break;
3313            case QEMU_OPTION_dtb:
3314                qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg,
3315                              &error_abort);
3316                break;
3317            case QEMU_OPTION_cdrom:
3318                drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
3319                break;
3320            case QEMU_OPTION_boot:
3321                opts = qemu_opts_parse_noisily(qemu_find_opts("boot-opts"),
3322                                               optarg, true);
3323                if (!opts) {
3324                    exit(1);
3325                }
3326                break;
3327            case QEMU_OPTION_fda:
3328            case QEMU_OPTION_fdb:
3329                drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
3330                          optarg, FD_OPTS);
3331                break;
3332            case QEMU_OPTION_no_fd_bootchk:
3333                fd_bootchk = 0;
3334                break;
3335            case QEMU_OPTION_netdev:
3336                default_net = 0;
3337                if (net_client_parse(qemu_find_opts("netdev"), optarg) == -1) {
3338                    exit(1);
3339                }
3340                break;
3341            case QEMU_OPTION_net:
3342                default_net = 0;
3343                if (net_client_parse(qemu_find_opts("net"), optarg) == -1) {
3344                    exit(1);
3345                }
3346                break;
3347#ifdef CONFIG_LIBISCSI
3348            case QEMU_OPTION_iscsi:
3349                opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"),
3350                                               optarg, false);
3351                if (!opts) {
3352                    exit(1);
3353                }
3354                break;
3355#endif
3356#ifdef CONFIG_SLIRP
3357            case QEMU_OPTION_tftp:
3358                error_report("The -tftp option is deprecated. "
3359                             "Please use '-netdev user,tftp=...' instead.");
3360                legacy_tftp_prefix = optarg;
3361                break;
3362            case QEMU_OPTION_bootp:
3363                error_report("The -bootp option is deprecated. "
3364                             "Please use '-netdev user,bootfile=...' instead.");
3365                legacy_bootp_filename = optarg;
3366                break;
3367            case QEMU_OPTION_redir:
3368                error_report("The -redir option is deprecated. "
3369                             "Please use '-netdev user,hostfwd=...' instead.");
3370                if (net_slirp_redir(optarg) < 0)
3371                    exit(1);
3372                break;
3373#endif
3374            case QEMU_OPTION_bt:
3375                add_device_config(DEV_BT, optarg);
3376                break;
3377            case QEMU_OPTION_audio_help:
3378                AUD_help ();
3379                exit (0);
3380                break;
3381            case QEMU_OPTION_soundhw:
3382                select_soundhw (optarg);
3383                break;
3384            case QEMU_OPTION_h:
3385                help(0);
3386                break;
3387            case QEMU_OPTION_version:
3388                version();
3389                exit(0);
3390                break;
3391            case QEMU_OPTION_m:
3392                opts = qemu_opts_parse_noisily(qemu_find_opts("memory"),
3393                                               optarg, true);
3394                if (!opts) {
3395                    exit(EXIT_FAILURE);
3396                }
3397                break;
3398#ifdef CONFIG_TPM
3399            case QEMU_OPTION_tpmdev:
3400                if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) {
3401                    exit(1);
3402                }
3403                break;
3404#endif
3405            case QEMU_OPTION_mempath:
3406                mem_path = optarg;
3407                break;
3408            case QEMU_OPTION_mem_prealloc:
3409                mem_prealloc = 1;
3410                break;
3411            case QEMU_OPTION_d:
3412                log_mask = optarg;
3413                break;
3414            case QEMU_OPTION_D:
3415                log_file = optarg;
3416                break;
3417            case QEMU_OPTION_DFILTER:
3418                qemu_set_dfilter_ranges(optarg, &error_fatal);
3419                break;
3420            case QEMU_OPTION_s:
3421                add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
3422                break;
3423            case QEMU_OPTION_gdb:
3424                add_device_config(DEV_GDB, optarg);
3425                break;
3426            case QEMU_OPTION_L:
3427                if (is_help_option(optarg)) {
3428                    list_data_dirs = true;
3429                } else if (data_dir_idx < ARRAY_SIZE(data_dir)) {
3430                    data_dir[data_dir_idx++] = optarg;
3431                }
3432                break;
3433            case QEMU_OPTION_bios:
3434                qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg,
3435                              &error_abort);
3436                break;
3437            case QEMU_OPTION_singlestep:
3438                singlestep = 1;
3439                break;
3440            case QEMU_OPTION_S:
3441                autostart = 0;
3442                break;
3443            case QEMU_OPTION_k:
3444                keyboard_layout = optarg;
3445                break;
3446            case QEMU_OPTION_localtime:
3447                rtc_utc = 0;
3448                break;
3449            case QEMU_OPTION_vga:
3450                vga_model = optarg;
3451                default_vga = 0;
3452                break;
3453            case QEMU_OPTION_g:
3454                {
3455                    const char *p;
3456                    int w, h, depth;
3457                    p = optarg;
3458                    w = strtol(p, (char **)&p, 10);
3459                    if (w <= 0) {
3460                    graphic_error:
3461                        error_report("invalid resolution or depth");
3462                        exit(1);
3463                    }
3464                    if (*p != 'x')
3465                        goto graphic_error;
3466                    p++;
3467                    h = strtol(p, (char **)&p, 10);
3468                    if (h <= 0)
3469                        goto graphic_error;
3470                    if (*p == 'x') {
3471                        p++;
3472                        depth = strtol(p, (char **)&p, 10);
3473                        if (depth != 8 && depth != 15 && depth != 16 &&
3474                            depth != 24 && depth != 32)
3475                            goto graphic_error;
3476                    } else if (*p == '\0') {
3477                        depth = graphic_depth;
3478                    } else {
3479                        goto graphic_error;
3480                    }
3481
3482                    graphic_width = w;
3483                    graphic_height = h;
3484                    graphic_depth = depth;
3485                }
3486                break;
3487            case QEMU_OPTION_echr:
3488                {
3489                    char *r;
3490                    term_escape_char = strtol(optarg, &r, 0);
3491                    if (r == optarg)
3492                        printf("Bad argument to echr\n");
3493                    break;
3494                }
3495            case QEMU_OPTION_monitor:
3496                default_monitor = 0;
3497                if (strncmp(optarg, "none", 4)) {
3498                    monitor_parse(optarg, "readline", false);
3499                }
3500                break;
3501            case QEMU_OPTION_qmp:
3502                monitor_parse(optarg, "control", false);
3503                default_monitor = 0;
3504                break;
3505            case QEMU_OPTION_qmp_pretty:
3506                monitor_parse(optarg, "control", true);
3507                default_monitor = 0;
3508                break;
3509            case QEMU_OPTION_mon:
3510                opts = qemu_opts_parse_noisily(qemu_find_opts("mon"), optarg,
3511                                               true);
3512                if (!opts) {
3513                    exit(1);
3514                }
3515                default_monitor = 0;
3516                break;
3517            case QEMU_OPTION_chardev:
3518                opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"),
3519                                               optarg, true);
3520                if (!opts) {
3521                    exit(1);
3522                }
3523                break;
3524            case QEMU_OPTION_fsdev:
3525                olist = qemu_find_opts("fsdev");
3526                if (!olist) {
3527                    error_report("fsdev support is disabled");
3528                    exit(1);
3529                }
3530                opts = qemu_opts_parse_noisily(olist, optarg, true);
3531                if (!opts) {
3532                    exit(1);
3533                }
3534                break;
3535            case QEMU_OPTION_virtfs: {
3536                QemuOpts *fsdev;
3537                QemuOpts *device;
3538                const char *writeout, *sock_fd, *socket;
3539
3540                olist = qemu_find_opts("virtfs");
3541                if (!olist) {
3542                    error_report("virtfs support is disabled");
3543                    exit(1);
3544                }
3545                opts = qemu_opts_parse_noisily(olist, optarg, true);
3546                if (!opts) {
3547                    exit(1);
3548                }
3549
3550                if (qemu_opt_get(opts, "fsdriver") == NULL ||
3551                    qemu_opt_get(opts, "mount_tag") == NULL) {
3552                    error_report("Usage: -virtfs fsdriver,mount_tag=tag");
3553                    exit(1);
3554                }
3555                fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
3556                                         qemu_opt_get(opts, "mount_tag"),
3557                                         1, NULL);
3558                if (!fsdev) {
3559                    error_report("duplicate fsdev id: %s",
3560                                 qemu_opt_get(opts, "mount_tag"));
3561                    exit(1);
3562                }
3563
3564                writeout = qemu_opt_get(opts, "writeout");
3565                if (writeout) {
3566#ifdef CONFIG_SYNC_FILE_RANGE
3567                    qemu_opt_set(fsdev, "writeout", writeout, &error_abort);
3568#else
3569                    error_report("writeout=immediate not supported "
3570                                 "on this platform");
3571                    exit(1);
3572#endif
3573                }
3574                qemu_opt_set(fsdev, "fsdriver",
3575                             qemu_opt_get(opts, "fsdriver"), &error_abort);
3576                qemu_opt_set(fsdev, "path", qemu_opt_get(opts, "path"),
3577                             &error_abort);
3578                qemu_opt_set(fsdev, "security_model",
3579                             qemu_opt_get(opts, "security_model"),
3580                             &error_abort);
3581                socket = qemu_opt_get(opts, "socket");
3582                if (socket) {
3583                    qemu_opt_set(fsdev, "socket", socket, &error_abort);
3584                }
3585                sock_fd = qemu_opt_get(opts, "sock_fd");
3586                if (sock_fd) {
3587                    qemu_opt_set(fsdev, "sock_fd", sock_fd, &error_abort);
3588                }
3589
3590                qemu_opt_set_bool(fsdev, "readonly",
3591                                  qemu_opt_get_bool(opts, "readonly", 0),
3592                                  &error_abort);
3593                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3594                                          &error_abort);
3595                qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3596                qemu_opt_set(device, "fsdev",
3597                             qemu_opt_get(opts, "mount_tag"), &error_abort);
3598                qemu_opt_set(device, "mount_tag",
3599                             qemu_opt_get(opts, "mount_tag"), &error_abort);
3600                break;
3601            }
3602            case QEMU_OPTION_virtfs_synth: {
3603                QemuOpts *fsdev;
3604                QemuOpts *device;
3605
3606                fsdev = qemu_opts_create(qemu_find_opts("fsdev"), "v_synth",
3607                                         1, NULL);
3608                if (!fsdev) {
3609                    error_report("duplicate option: %s", "virtfs_synth");
3610                    exit(1);
3611                }
3612                qemu_opt_set(fsdev, "fsdriver", "synth", &error_abort);
3613
3614                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3615                                          &error_abort);
3616                qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3617                qemu_opt_set(device, "fsdev", "v_synth", &error_abort);
3618                qemu_opt_set(device, "mount_tag", "v_synth", &error_abort);
3619                break;
3620            }
3621            case QEMU_OPTION_serial:
3622                add_device_config(DEV_SERIAL, optarg);
3623                default_serial = 0;
3624                if (strncmp(optarg, "mon:", 4) == 0) {
3625                    default_monitor = 0;
3626                }
3627                break;
3628            case QEMU_OPTION_watchdog:
3629                if (watchdog) {
3630                    error_report("only one watchdog option may be given");
3631                    return 1;
3632                }
3633                watchdog = optarg;
3634                break;
3635            case QEMU_OPTION_watchdog_action:
3636                if (select_watchdog_action(optarg) == -1) {
3637                    error_report("unknown -watchdog-action parameter");
3638                    exit(1);
3639                }
3640                break;
3641            case QEMU_OPTION_virtiocon:
3642                add_device_config(DEV_VIRTCON, optarg);
3643                default_virtcon = 0;
3644                if (strncmp(optarg, "mon:", 4) == 0) {
3645                    default_monitor = 0;
3646                }
3647                break;
3648            case QEMU_OPTION_parallel:
3649                add_device_config(DEV_PARALLEL, optarg);
3650                default_parallel = 0;
3651                if (strncmp(optarg, "mon:", 4) == 0) {
3652                    default_monitor = 0;
3653                }
3654                break;
3655            case QEMU_OPTION_debugcon:
3656                add_device_config(DEV_DEBUGCON, optarg);
3657                break;
3658            case QEMU_OPTION_loadvm:
3659                loadvm = optarg;
3660                break;
3661            case QEMU_OPTION_full_screen:
3662                full_screen = 1;
3663                break;
3664            case QEMU_OPTION_no_frame:
3665                no_frame = 1;
3666                break;
3667            case QEMU_OPTION_alt_grab:
3668                alt_grab = 1;
3669                break;
3670            case QEMU_OPTION_ctrl_grab:
3671                ctrl_grab = 1;
3672                break;
3673            case QEMU_OPTION_no_quit:
3674                no_quit = 1;
3675                break;
3676            case QEMU_OPTION_sdl:
3677#ifdef CONFIG_SDL
3678                display_type = DT_SDL;
3679                break;
3680#else
3681                error_report("SDL support is disabled");
3682                exit(1);
3683#endif
3684            case QEMU_OPTION_pidfile:
3685                pid_file = optarg;
3686                break;
3687            case QEMU_OPTION_win2k_hack:
3688                win2k_install_hack = 1;
3689                break;
3690            case QEMU_OPTION_rtc_td_hack: {
3691                static GlobalProperty slew_lost_ticks = {
3692                    .driver   = "mc146818rtc",
3693                    .property = "lost_tick_policy",
3694                    .value    = "slew",
3695                };
3696
3697                qdev_prop_register_global(&slew_lost_ticks);
3698                break;
3699            }
3700            case QEMU_OPTION_acpitable:
3701                opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),
3702                                               optarg, true);
3703                if (!opts) {
3704                    exit(1);
3705                }
3706                do_acpitable_option(opts);
3707                break;
3708            case QEMU_OPTION_smbios:
3709                opts = qemu_opts_parse_noisily(qemu_find_opts("smbios"),
3710                                               optarg, false);
3711                if (!opts) {
3712                    exit(1);
3713                }
3714                do_smbios_option(opts);
3715                break;
3716            case QEMU_OPTION_fwcfg:
3717                opts = qemu_opts_parse_noisily(qemu_find_opts("fw_cfg"),
3718                                               optarg, true);
3719                if (opts == NULL) {
3720                    exit(1);
3721                }
3722                break;
3723            case QEMU_OPTION_enable_kvm:
3724                olist = qemu_find_opts("machine");
3725                qemu_opts_parse_noisily(olist, "accel=kvm", false);
3726                break;
3727            case QEMU_OPTION_M:
3728            case QEMU_OPTION_machine:
3729                olist = qemu_find_opts("machine");
3730                opts = qemu_opts_parse_noisily(olist, optarg, true);
3731                if (!opts) {
3732                    exit(1);
3733                }
3734                break;
3735             case QEMU_OPTION_no_kvm:
3736                olist = qemu_find_opts("machine");
3737                qemu_opts_parse_noisily(olist, "accel=tcg", false);
3738                break;
3739            case QEMU_OPTION_no_kvm_pit: {
3740                error_report("warning: ignoring deprecated option");
3741                break;
3742            }
3743            case QEMU_OPTION_no_kvm_pit_reinjection: {
3744                static GlobalProperty kvm_pit_lost_tick_policy = {
3745                    .driver   = "kvm-pit",
3746                    .property = "lost_tick_policy",
3747                    .value    = "discard",
3748                };
3749
3750                error_report("warning: deprecated, replaced by "
3751                             "-global kvm-pit.lost_tick_policy=discard");
3752                qdev_prop_register_global(&kvm_pit_lost_tick_policy);
3753                break;
3754            }
3755            case QEMU_OPTION_usb:
3756                olist = qemu_find_opts("machine");
3757                qemu_opts_parse_noisily(olist, "usb=on", false);
3758                break;
3759            case QEMU_OPTION_usbdevice:
3760                olist = qemu_find_opts("machine");
3761                qemu_opts_parse_noisily(olist, "usb=on", false);
3762                add_device_config(DEV_USB, optarg);
3763                break;
3764            case QEMU_OPTION_device:
3765                if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
3766                                             optarg, true)) {
3767                    exit(1);
3768                }
3769                break;
3770            case QEMU_OPTION_smp:
3771                if (!qemu_opts_parse_noisily(qemu_find_opts("smp-opts"),
3772                                             optarg, true)) {
3773                    exit(1);
3774                }
3775                break;
3776            case QEMU_OPTION_vnc:
3777                vnc_parse(optarg, &error_fatal);
3778                break;
3779            case QEMU_OPTION_no_acpi:
3780                acpi_enabled = 0;
3781                break;
3782            case QEMU_OPTION_no_hpet:
3783                no_hpet = 1;
3784                break;
3785            case QEMU_OPTION_balloon:
3786                if (balloon_parse(optarg) < 0) {
3787                    error_report("unknown -balloon argument %s", optarg);
3788                    exit(1);
3789                }
3790                break;
3791            case QEMU_OPTION_no_reboot:
3792                no_reboot = 1;
3793                break;
3794            case QEMU_OPTION_no_shutdown:
3795                no_shutdown = 1;
3796                break;
3797            case QEMU_OPTION_show_cursor:
3798                cursor_hide = 0;
3799                break;
3800            case QEMU_OPTION_uuid:
3801                if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
3802                    error_report("failed to parse UUID string: wrong format");
3803                    exit(1);
3804                }
3805                qemu_uuid_set = true;
3806                break;
3807            case QEMU_OPTION_option_rom:
3808                if (nb_option_roms >= MAX_OPTION_ROMS) {
3809                    error_report("too many option ROMs");
3810                    exit(1);
3811                }
3812                opts = qemu_opts_parse_noisily(qemu_find_opts("option-rom"),
3813                                               optarg, true);
3814                if (!opts) {
3815                    exit(1);
3816                }
3817                option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile");
3818                option_rom[nb_option_roms].bootindex =
3819                    qemu_opt_get_number(opts, "bootindex", -1);
3820                if (!option_rom[nb_option_roms].name) {
3821                    error_report("Option ROM file is not specified");
3822                    exit(1);
3823                }
3824                nb_option_roms++;
3825                break;
3826            case QEMU_OPTION_semihosting:
3827                semihosting.enabled = true;
3828                semihosting.target = SEMIHOSTING_TARGET_AUTO;
3829                break;
3830            case QEMU_OPTION_semihosting_config:
3831                semihosting.enabled = true;
3832                opts = qemu_opts_parse_noisily(qemu_find_opts("semihosting-config"),
3833                                               optarg, false);
3834                if (opts != NULL) {
3835                    semihosting.enabled = qemu_opt_get_bool(opts, "enable",
3836                                                            true);
3837                    const char *target = qemu_opt_get(opts, "target");
3838                    if (target != NULL) {
3839                        if (strcmp("native", target) == 0) {
3840                            semihosting.target = SEMIHOSTING_TARGET_NATIVE;
3841                        } else if (strcmp("gdb", target) == 0) {
3842                            semihosting.target = SEMIHOSTING_TARGET_GDB;
3843                        } else  if (strcmp("auto", target) == 0) {
3844                            semihosting.target = SEMIHOSTING_TARGET_AUTO;
3845                        } else {
3846                            error_report("unsupported semihosting-config %s",
3847                                         optarg);
3848                            exit(1);
3849                        }
3850                    } else {
3851                        semihosting.target = SEMIHOSTING_TARGET_AUTO;
3852                    }
3853                    /* Set semihosting argument count and vector */
3854                    qemu_opt_foreach(opts, add_semihosting_arg,
3855                                     &semihosting, NULL);
3856                } else {
3857                    error_report("unsupported semihosting-config %s", optarg);
3858                    exit(1);
3859                }
3860                break;
3861            case QEMU_OPTION_tdf:
3862                error_report("warning: ignoring deprecated option");
3863                break;
3864            case QEMU_OPTION_name:
3865                opts = qemu_opts_parse_noisily(qemu_find_opts("name"),
3866                                               optarg, true);
3867                if (!opts) {
3868                    exit(1);
3869                }
3870                break;
3871            case QEMU_OPTION_prom_env:
3872                if (nb_prom_envs >= MAX_PROM_ENVS) {
3873                    error_report("too many prom variables");
3874                    exit(1);
3875                }
3876                prom_envs[nb_prom_envs] = optarg;
3877                nb_prom_envs++;
3878                break;
3879            case QEMU_OPTION_old_param:
3880                old_param = 1;
3881                break;
3882            case QEMU_OPTION_clock:
3883                /* Clock options no longer exist.  Keep this option for
3884                 * backward compatibility.
3885                 */
3886                break;
3887            case QEMU_OPTION_startdate:
3888                configure_rtc_date_offset(optarg, 1);
3889                break;
3890            case QEMU_OPTION_rtc:
3891                opts = qemu_opts_parse_noisily(qemu_find_opts("rtc"), optarg,
3892                                               false);
3893                if (!opts) {
3894                    exit(1);
3895                }
3896                configure_rtc(opts);
3897                break;
3898            case QEMU_OPTION_tb_size:
3899                tcg_tb_size = strtol(optarg, NULL, 0);
3900                if (tcg_tb_size < 0) {
3901                    tcg_tb_size = 0;
3902                }
3903                break;
3904            case QEMU_OPTION_icount:
3905                icount_opts = qemu_opts_parse_noisily(qemu_find_opts("icount"),
3906                                                      optarg, true);
3907                if (!icount_opts) {
3908                    exit(1);
3909                }
3910                break;
3911            case QEMU_OPTION_incoming:
3912                if (!incoming) {
3913                    runstate_set(RUN_STATE_INMIGRATE);
3914                }
3915                incoming = optarg;
3916                break;
3917            case QEMU_OPTION_nodefaults:
3918                has_defaults = 0;
3919                break;
3920            case QEMU_OPTION_xen_domid:
3921                if (!(xen_available())) {
3922                    error_report("Option not supported for this target");
3923                    exit(1);
3924                }
3925                xen_domid = atoi(optarg);
3926                break;
3927            case QEMU_OPTION_xen_create:
3928                if (!(xen_available())) {
3929                    error_report("Option not supported for this target");
3930                    exit(1);
3931                }
3932                xen_mode = XEN_CREATE;
3933                break;
3934            case QEMU_OPTION_xen_attach:
3935                if (!(xen_available())) {
3936                    error_report("Option not supported for this target");
3937                    exit(1);
3938                }
3939                xen_mode = XEN_ATTACH;
3940                break;
3941            case QEMU_OPTION_trace:
3942                g_free(trace_file);
3943                trace_file = trace_opt_parse(optarg);
3944                break;
3945            case QEMU_OPTION_readconfig:
3946                {
3947                    int ret = qemu_read_config_file(optarg);
3948                    if (ret < 0) {
3949                        error_report("read config %s: %s", optarg,
3950                                     strerror(-ret));
3951                        exit(1);
3952                    }
3953                    break;
3954                }
3955            case QEMU_OPTION_spice:
3956                olist = qemu_find_opts("spice");
3957                if (!olist) {
3958                    error_report("spice support is disabled");
3959                    exit(1);
3960                }
3961                opts = qemu_opts_parse_noisily(olist, optarg, false);
3962                if (!opts) {
3963                    exit(1);
3964                }
3965                display_remote++;
3966                break;
3967            case QEMU_OPTION_writeconfig:
3968                {
3969                    FILE *fp;
3970                    if (strcmp(optarg, "-") == 0) {
3971                        fp = stdout;
3972                    } else {
3973                        fp = fopen(optarg, "w");
3974                        if (fp == NULL) {
3975                            error_report("open %s: %s", optarg,
3976                                         strerror(errno));
3977                            exit(1);
3978                        }
3979                    }
3980                    qemu_config_write(fp);
3981                    if (fp != stdout) {
3982                        fclose(fp);
3983                    }
3984                    break;
3985                }
3986            case QEMU_OPTION_qtest:
3987                qtest_chrdev = optarg;
3988                break;
3989            case QEMU_OPTION_qtest_log:
3990                qtest_log = optarg;
3991                break;
3992            case QEMU_OPTION_sandbox:
3993                opts = qemu_opts_parse_noisily(qemu_find_opts("sandbox"),
3994                                               optarg, true);
3995                if (!opts) {
3996                    exit(1);
3997                }
3998                break;
3999            case QEMU_OPTION_add_fd:
4000#ifndef _WIN32
4001                opts = qemu_opts_parse_noisily(qemu_find_opts("add-fd"),
4002                                               optarg, false);
4003                if (!opts) {
4004                    exit(1);
4005                }
4006#else
4007                error_report("File descriptor passing is disabled on this "
4008                             "platform");
4009                exit(1);
4010#endif
4011                break;
4012            case QEMU_OPTION_object:
4013                opts = qemu_opts_parse_noisily(qemu_find_opts("object"),
4014                                               optarg, true);
4015                if (!opts) {
4016                    exit(1);
4017                }
4018                break;
4019            case QEMU_OPTION_realtime:
4020                opts = qemu_opts_parse_noisily(qemu_find_opts("realtime"),
4021                                               optarg, false);
4022                if (!opts) {
4023                    exit(1);
4024                }
4025                enable_mlock = qemu_opt_get_bool(opts, "mlock", true);
4026                break;
4027            case QEMU_OPTION_msg:
4028                opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg,
4029                                               false);
4030                if (!opts) {
4031                    exit(1);
4032                }
4033                configure_msg(opts);
4034                break;
4035            case QEMU_OPTION_dump_vmstate:
4036                if (vmstate_dump_file) {
4037                    error_report("only one '-dump-vmstate' "
4038                                 "option may be given");
4039                    exit(1);
4040                }
4041                vmstate_dump_file = fopen(optarg, "w");
4042                if (vmstate_dump_file == NULL) {
4043                    error_report("open %s: %s", optarg, strerror(errno));
4044                    exit(1);
4045                }
4046                break;
4047            default:
4048                os_parse_cmd_args(popt->index, optarg);
4049            }
4050        }
4051    }
4052    /*
4053     * Clear error location left behind by the loop.
4054     * Best done right after the loop.  Do not insert code here!
4055     */
4056    loc_set_none();
4057
4058    replay_configure(icount_opts);
4059
4060    machine_class = select_machine();
4061
4062    set_memory_options(&ram_slots, &maxram_size, machine_class);
4063
4064    os_daemonize();
4065
4066    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
4067        error_report("could not acquire pid file: %s", strerror(errno));
4068        exit(1);
4069    }
4070
4071    if (qemu_init_main_loop(&main_loop_err)) {
4072        error_report_err(main_loop_err);
4073        exit(1);
4074    }
4075
4076    if (qemu_opts_foreach(qemu_find_opts("sandbox"),
4077                          parse_sandbox, NULL, NULL)) {
4078        exit(1);
4079    }
4080
4081    if (qemu_opts_foreach(qemu_find_opts("name"),
4082                          parse_name, NULL, NULL)) {
4083        exit(1);
4084    }
4085
4086#ifndef _WIN32
4087    if (qemu_opts_foreach(qemu_find_opts("add-fd"),
4088                          parse_add_fd, NULL, NULL)) {
4089        exit(1);
4090    }
4091
4092    if (qemu_opts_foreach(qemu_find_opts("add-fd"),
4093                          cleanup_add_fd, NULL, NULL)) {
4094        exit(1);
4095    }
4096#endif
4097
4098    current_machine = MACHINE(object_new(object_class_get_name(
4099                          OBJECT_CLASS(machine_class))));
4100    if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
4101        exit(0);
4102    }
4103    object_property_add_child(object_get_root(), "machine",
4104                              OBJECT(current_machine), &error_abort);
4105
4106    if (machine_class->minimum_page_bits) {
4107        if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
4108            /* This would be a board error: specifying a minimum smaller than
4109             * a target's compile-time fixed setting.
4110             */
4111            g_assert_not_reached();
4112        }
4113    }
4114
4115    cpu_exec_init_all();
4116
4117    if (machine_class->hw_version) {
4118        qemu_set_hw_version(machine_class->hw_version);
4119    }
4120
4121    if (cpu_model && is_help_option(cpu_model)) {
4122        list_cpus(stdout, &fprintf, cpu_model);
4123        exit(0);
4124    }
4125
4126    if (!trace_init_backends()) {
4127        exit(1);
4128    }
4129    trace_init_file(trace_file);
4130
4131    /* Open the logfile at this point and set the log mask if necessary.
4132     */
4133    if (log_file) {
4134        qemu_set_log_filename(log_file, &error_fatal);
4135    }
4136
4137    if (log_mask) {
4138        int mask;
4139        mask = qemu_str_to_log_mask(log_mask);
4140        if (!mask) {
4141            qemu_print_log_usage(stdout);
4142            exit(1);
4143        }
4144        qemu_set_log(mask);
4145    } else {
4146        qemu_set_log(0);
4147    }
4148
4149    /* If no data_dir is specified then try to find it relative to the
4150       executable path.  */
4151    if (data_dir_idx < ARRAY_SIZE(data_dir)) {
4152        data_dir[data_dir_idx] = os_find_datadir();
4153        if (data_dir[data_dir_idx] != NULL) {
4154            data_dir_idx++;
4155        }
4156    }
4157    /* If all else fails use the install path specified when building. */
4158    if (data_dir_idx < ARRAY_SIZE(data_dir)) {
4159        data_dir[data_dir_idx++] = CONFIG_QEMU_DATADIR;
4160    }
4161
4162    /* -L help lists the data directories and exits. */
4163    if (list_data_dirs) {
4164        for (i = 0; i < data_dir_idx; i++) {
4165            printf("%s\n", data_dir[i]);
4166        }
4167        exit(0);
4168    }
4169
4170    smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
4171
4172    machine_class->max_cpus = machine_class->max_cpus ?: 1; /* Default to UP */
4173    if (max_cpus > machine_class->max_cpus) {
4174        error_report("Number of SMP CPUs requested (%d) exceeds max CPUs "
4175                     "supported by machine '%s' (%d)", max_cpus,
4176                     machine_class->name, machine_class->max_cpus);
4177        exit(1);
4178    }
4179
4180    /*
4181     * Get the default machine options from the machine if it is not already
4182     * specified either by the configuration file or by the command line.
4183     */
4184    if (machine_class->default_machine_opts) {
4185        qemu_opts_set_defaults(qemu_find_opts("machine"),
4186                               machine_class->default_machine_opts, 0);
4187    }
4188
4189    qemu_opts_foreach(qemu_find_opts("device"),
4190                      default_driver_check, NULL, NULL);
4191    qemu_opts_foreach(qemu_find_opts("global"),
4192                      default_driver_check, NULL, NULL);
4193
4194    if (!vga_model && !default_vga) {
4195        vga_interface_type = VGA_DEVICE;
4196    }
4197    if (!has_defaults || machine_class->no_serial) {
4198        default_serial = 0;
4199    }
4200    if (!has_defaults || machine_class->no_parallel) {
4201        default_parallel = 0;
4202    }
4203    if (!has_defaults || !machine_class->use_virtcon) {
4204        default_virtcon = 0;
4205    }
4206    if (!has_defaults || !machine_class->use_sclp) {
4207        default_sclp = 0;
4208    }
4209    if (!has_defaults || machine_class->no_floppy) {
4210        default_floppy = 0;
4211    }
4212    if (!has_defaults || machine_class->no_cdrom) {
4213        default_cdrom = 0;
4214    }
4215    if (!has_defaults || machine_class->no_sdcard) {
4216        default_sdcard = 0;
4217    }
4218    if (!has_defaults) {
4219        default_monitor = 0;
4220        default_net = 0;
4221        default_vga = 0;
4222    }
4223
4224    if (is_daemonized()) {
4225        /* According to documentation and historically, -nographic redirects
4226         * serial port, parallel port and monitor to stdio, which does not work
4227         * with -daemonize.  We can redirect these to null instead, but since
4228         * -nographic is legacy, let's just error out.
4229         * We disallow -nographic only if all other ports are not redirected
4230         * explicitly, to not break existing legacy setups which uses
4231         * -nographic _and_ redirects all ports explicitly - this is valid
4232         * usage, -nographic is just a no-op in this case.
4233         */
4234        if (nographic
4235            && (default_parallel || default_serial
4236                || default_monitor || default_virtcon)) {
4237            error_report("-nographic cannot be used with -daemonize");
4238            exit(1);
4239        }
4240#ifdef CONFIG_CURSES
4241        if (display_type == DT_CURSES) {
4242            error_report("curses display cannot be used with -daemonize");
4243            exit(1);
4244        }
4245#endif
4246    }
4247
4248    if (nographic) {
4249        if (default_parallel)
4250            add_device_config(DEV_PARALLEL, "null");
4251        if (default_serial && default_monitor) {
4252            add_device_config(DEV_SERIAL, "mon:stdio");
4253        } else if (default_virtcon && default_monitor) {
4254            add_device_config(DEV_VIRTCON, "mon:stdio");
4255        } else if (default_sclp && default_monitor) {
4256            add_device_config(DEV_SCLP, "mon:stdio");
4257        } else {
4258            if (default_serial)
4259                add_device_config(DEV_SERIAL, "stdio");
4260            if (default_virtcon)
4261                add_device_config(DEV_VIRTCON, "stdio");
4262            if (default_sclp) {
4263                add_device_config(DEV_SCLP, "stdio");
4264            }
4265            if (default_monitor)
4266                monitor_parse("stdio", "readline", false);
4267        }
4268    } else {
4269        if (default_serial)
4270            add_device_config(DEV_SERIAL, "vc:80Cx24C");
4271        if (default_parallel)
4272            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
4273        if (default_monitor)
4274            monitor_parse("vc:80Cx24C", "readline", false);
4275        if (default_virtcon)
4276            add_device_config(DEV_VIRTCON, "vc:80Cx24C");
4277        if (default_sclp) {
4278            add_device_config(DEV_SCLP, "vc:80Cx24C");
4279        }
4280    }
4281
4282#if defined(CONFIG_VNC)
4283    if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
4284        display_remote++;
4285    }
4286#endif
4287    if (display_type == DT_DEFAULT && !display_remote) {
4288#if defined(CONFIG_GTK)
4289        display_type = DT_GTK;
4290#elif defined(CONFIG_SDL)
4291        display_type = DT_SDL;
4292#elif defined(CONFIG_COCOA)
4293        display_type = DT_COCOA;
4294#elif defined(CONFIG_VNC)
4295        vnc_parse("localhost:0,to=99,id=default", &error_abort);
4296#else
4297        display_type = DT_NONE;
4298#endif
4299    }
4300
4301    if ((no_frame || alt_grab || ctrl_grab) && display_type != DT_SDL) {
4302        error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
4303                     "for SDL, ignoring option");
4304    }
4305    if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
4306        error_report("-no-quit is only valid for GTK and SDL, "
4307                     "ignoring option");
4308    }
4309
4310    if (display_type == DT_GTK) {
4311        early_gtk_display_init(request_opengl);
4312    }
4313
4314    if (display_type == DT_SDL) {
4315        sdl_display_early_init(request_opengl);
4316    }
4317
4318    if (request_opengl == 1 && display_opengl == 0) {
4319#if defined(CONFIG_OPENGL)
4320        error_report("OpenGL is not supported by the display");
4321#else
4322        error_report("OpenGL support is disabled");
4323#endif
4324        exit(1);
4325    }
4326
4327    page_size_init();
4328    socket_init();
4329
4330    if (qemu_opts_foreach(qemu_find_opts("object"),
4331                          user_creatable_add_opts_foreach,
4332                          object_create_initial, NULL)) {
4333        exit(1);
4334    }
4335
4336    if (qemu_opts_foreach(qemu_find_opts("chardev"),
4337                          chardev_init_func, NULL, NULL)) {
4338        exit(1);
4339    }
4340
4341#ifdef CONFIG_VIRTFS
4342    if (qemu_opts_foreach(qemu_find_opts("fsdev"),
4343                          fsdev_init_func, NULL, NULL)) {
4344        exit(1);
4345    }
4346#endif
4347
4348    if (qemu_opts_foreach(qemu_find_opts("device"),
4349                          device_help_func, NULL, NULL)) {
4350        exit(0);
4351    }
4352
4353    machine_opts = qemu_get_machine_opts();
4354    if (qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
4355                         NULL)) {
4356        object_unref(OBJECT(current_machine));
4357        exit(1);
4358    }
4359
4360    configure_accelerator(current_machine);
4361
4362    if (qtest_chrdev) {
4363        qtest_init(qtest_chrdev, qtest_log, &error_fatal);
4364    }
4365
4366    machine_opts = qemu_get_machine_opts();
4367    kernel_filename = qemu_opt_get(machine_opts, "kernel");
4368    initrd_filename = qemu_opt_get(machine_opts, "initrd");
4369    kernel_cmdline = qemu_opt_get(machine_opts, "append");
4370    bios_name = qemu_opt_get(machine_opts, "firmware");
4371
4372    opts = qemu_opts_find(qemu_find_opts("boot-opts"), NULL);
4373    if (opts) {
4374        boot_order = qemu_opt_get(opts, "order");
4375        if (boot_order) {
4376            validate_bootdevices(boot_order, &error_fatal);
4377        }
4378
4379        boot_once = qemu_opt_get(opts, "once");
4380        if (boot_once) {
4381            validate_bootdevices(boot_once, &error_fatal);
4382        }
4383
4384        boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu);
4385        boot_strict = qemu_opt_get_bool(opts, "strict", false);
4386    }
4387
4388    if (!boot_order) {
4389        boot_order = machine_class->default_boot_order;
4390    }
4391
4392    if (!kernel_cmdline) {
4393        kernel_cmdline = "";
4394        current_machine->kernel_cmdline = (char *)kernel_cmdline;
4395    }
4396
4397    linux_boot = (kernel_filename != NULL);
4398
4399    if (!linux_boot && *kernel_cmdline != '\0') {
4400        error_report("-append only allowed with -kernel option");
4401        exit(1);
4402    }
4403
4404    if (!linux_boot && initrd_filename != NULL) {
4405        error_report("-initrd only allowed with -kernel option");
4406        exit(1);
4407    }
4408
4409    if (semihosting_enabled() && !semihosting_get_argc() && kernel_filename) {
4410        /* fall back to the -kernel/-append */
4411        semihosting_arg_fallback(kernel_filename, kernel_cmdline);
4412    }
4413
4414    os_set_line_buffering();
4415
4416    /* spice needs the timers to be initialized by this point */
4417    qemu_spice_init();
4418
4419    cpu_ticks_init();
4420    if (icount_opts) {
4421        if (kvm_enabled() || xen_enabled()) {
4422            error_report("-icount is not allowed with kvm or xen");
4423            exit(1);
4424        }
4425        configure_icount(icount_opts, &error_abort);
4426        qemu_opts_del(icount_opts);
4427    }
4428
4429    if (default_net) {
4430        QemuOptsList *net = qemu_find_opts("net");
4431        qemu_opts_set(net, NULL, "type", "nic", &error_abort);
4432#ifdef CONFIG_SLIRP
4433        qemu_opts_set(net, NULL, "type", "user", &error_abort);
4434#endif
4435    }
4436
4437    colo_info_init();
4438
4439    if (net_init_clients() < 0) {
4440        exit(1);
4441    }
4442
4443    if (qemu_opts_foreach(qemu_find_opts("object"),
4444                          user_creatable_add_opts_foreach,
4445                          object_create_delayed, NULL)) {
4446        exit(1);
4447    }
4448
4449#ifdef CONFIG_TPM
4450    if (tpm_init() < 0) {
4451        exit(1);
4452    }
4453#endif
4454
4455    /* init the bluetooth world */
4456    if (foreach_device_config(DEV_BT, bt_parse))
4457        exit(1);
4458
4459    if (!xen_enabled()) {
4460        /* On 32-bit hosts, QEMU is limited by virtual address space */
4461        if (ram_size > (2047 << 20) && HOST_LONG_BITS == 32) {
4462            error_report("at most 2047 MB RAM can be simulated");
4463            exit(1);
4464        }
4465    }
4466
4467    blk_mig_init();
4468    ram_mig_init();
4469
4470    /* If the currently selected machine wishes to override the units-per-bus
4471     * property of its default HBA interface type, do so now. */
4472    if (machine_class->units_per_default_bus) {
4473        override_max_devs(machine_class->block_default_type,
4474                          machine_class->units_per_default_bus);
4475    }
4476
4477    /* open the virtual block devices */
4478    if (snapshot || replay_mode != REPLAY_MODE_NONE) {
4479        qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
4480                          NULL, NULL);
4481    }
4482    if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
4483                          &machine_class->block_default_type, NULL)) {
4484        exit(1);
4485    }
4486
4487    default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
4488                  CDROM_OPTS);
4489    default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
4490    default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
4491
4492    parse_numa_opts(machine_class);
4493
4494    if (qemu_opts_foreach(qemu_find_opts("mon"),
4495                          mon_init_func, NULL, NULL)) {
4496        exit(1);
4497    }
4498
4499    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
4500        exit(1);
4501    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
4502        exit(1);
4503    if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
4504        exit(1);
4505    if (foreach_device_config(DEV_SCLP, sclp_parse) < 0) {
4506        exit(1);
4507    }
4508    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
4509        exit(1);
4510
4511    /* If no default VGA is requested, the default is "none".  */
4512    if (default_vga) {
4513        if (machine_class->default_display) {
4514            vga_model = machine_class->default_display;
4515        } else if (vga_interface_available(VGA_CIRRUS)) {
4516            vga_model = "cirrus";
4517        } else if (vga_interface_available(VGA_STD)) {
4518            vga_model = "std";
4519        }
4520    }
4521    if (vga_model) {
4522        select_vgahw(vga_model);
4523    }
4524
4525    if (watchdog) {
4526        i = select_watchdog(watchdog);
4527        if (i > 0)
4528            exit (i == 1 ? 1 : 0);
4529    }
4530
4531    machine_register_compat_props(current_machine);
4532
4533    qemu_opts_foreach(qemu_find_opts("global"),
4534                      global_init_func, NULL, NULL);
4535
4536    /* This checkpoint is required by replay to separate prior clock
4537       reading from the other reads, because timer polling functions query
4538       clock values from the log. */
4539    replay_checkpoint(CHECKPOINT_INIT);
4540    qdev_machine_init();
4541
4542    current_machine->ram_size = ram_size;
4543    current_machine->maxram_size = maxram_size;
4544    current_machine->ram_slots = ram_slots;
4545    current_machine->boot_order = boot_order;
4546    current_machine->cpu_model = cpu_model;
4547
4548    machine_class->init(current_machine);
4549
4550    realtime_init();
4551
4552    audio_init();
4553
4554    cpu_synchronize_all_post_init();
4555
4556    numa_post_machine_init();
4557
4558    if (qemu_opts_foreach(qemu_find_opts("fw_cfg"),
4559                          parse_fw_cfg, fw_cfg_find(), NULL) != 0) {
4560        exit(1);
4561    }
4562
4563    /* init USB devices */
4564    if (machine_usb(current_machine)) {
4565        if (foreach_device_config(DEV_USB, usb_parse) < 0)
4566            exit(1);
4567    }
4568
4569    /* Check if IGD GFX passthrough. */
4570    igd_gfx_passthru();
4571
4572    /* init generic devices */
4573    rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
4574    if (qemu_opts_foreach(qemu_find_opts("device"),
4575                          device_init_func, NULL, NULL)) {
4576        exit(1);
4577    }
4578    rom_reset_order_override();
4579
4580    /* Did we create any drives that we failed to create a device for? */
4581    drive_check_orphaned();
4582
4583    /* Don't warn about the default network setup that you get if
4584     * no command line -net or -netdev options are specified. There
4585     * are two cases that we would otherwise complain about:
4586     * (1) board doesn't support a NIC but the implicit "-net nic"
4587     * requested one
4588     * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic"
4589     * sets up a nic that isn't connected to anything.
4590     */
4591    if (!default_net) {
4592        net_check_clients();
4593    }
4594
4595
4596    if (boot_once) {
4597        qemu_boot_set(boot_once, &error_fatal);
4598        qemu_register_reset(restore_boot_order, g_strdup(boot_order));
4599    }
4600
4601    ds = init_displaystate();
4602
4603    /* init local displays */
4604    switch (display_type) {
4605    case DT_CURSES:
4606        curses_display_init(ds, full_screen);
4607        break;
4608    case DT_SDL:
4609        sdl_display_init(ds, full_screen, no_frame);
4610        break;
4611    case DT_COCOA:
4612        cocoa_display_init(ds, full_screen);
4613        break;
4614    case DT_GTK:
4615        gtk_display_init(ds, full_screen, grab_on_hover);
4616        break;
4617    default:
4618        break;
4619    }
4620
4621    /* must be after terminal init, SDL library changes signal handlers */
4622    os_setup_signal_handling();
4623
4624    /* init remote displays */
4625#ifdef CONFIG_VNC
4626    qemu_opts_foreach(qemu_find_opts("vnc"),
4627                      vnc_init_func, NULL, NULL);
4628#endif
4629
4630    if (using_spice) {
4631        qemu_spice_display_init();
4632    }
4633
4634    if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
4635        exit(1);
4636    }
4637
4638    qdev_machine_creation_done();
4639
4640    /* TODO: once all bus devices are qdevified, this should be done
4641     * when bus is created by qdev.c */
4642    qemu_register_reset(qbus_reset_all_fn, sysbus_get_default());
4643    qemu_run_machine_init_done_notifiers();
4644
4645    if (rom_check_and_register_reset() != 0) {
4646        error_report("rom check and register reset failed");
4647        exit(1);
4648    }
4649
4650    replay_start();
4651
4652    /* This checkpoint is required by replay to separate prior clock
4653       reading from the other reads, because timer polling functions query
4654       clock values from the log. */
4655    replay_checkpoint(CHECKPOINT_RESET);
4656    qemu_system_reset(VMRESET_SILENT);
4657    register_global_state();
4658    if (loadvm) {
4659        if (load_vmstate(loadvm) < 0) {
4660            autostart = 0;
4661        }
4662    }
4663
4664    qdev_prop_check_globals();
4665    if (vmstate_dump_file) {
4666        /* dump and exit */
4667        dump_vmstate_json_to_file(vmstate_dump_file);
4668        return 0;
4669    }
4670
4671    if (incoming) {
4672        Error *local_err = NULL;
4673        qemu_start_incoming_migration(incoming, &local_err);
4674        if (local_err) {
4675            error_reportf_err(local_err, "-incoming %s: ", incoming);
4676            exit(1);
4677        }
4678    } else if (autostart) {
4679        vm_start();
4680    }
4681
4682    os_setup_post();
4683
4684    main_loop();
4685    replay_disable_events();
4686    iothread_stop_all();
4687
4688    bdrv_close_all();
4689    pause_all_vcpus();
4690    res_free();
4691
4692    /* vhost-user must be cleaned up before chardevs.  */
4693    net_cleanup();
4694    audio_cleanup();
4695    monitor_cleanup();
4696    qemu_chr_cleanup();
4697
4698    return 0;
4699}
4700