1 /* 2 * qemu user main 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #include "qemu/osdep.h" 21 #include "qemu/help-texts.h" 22 #include "qemu/units.h" 23 #include "qemu/accel.h" 24 #include "qemu-version.h" 25 #include <sys/syscall.h> 26 #include <sys/resource.h> 27 #include <sys/shm.h> 28 #include <linux/binfmts.h> 29 30 #include "qapi/error.h" 31 #include "qemu.h" 32 #include "user-internals.h" 33 #include "qemu/path.h" 34 #include "qemu/queue.h" 35 #include "qemu/config-file.h" 36 #include "qemu/cutils.h" 37 #include "qemu/error-report.h" 38 #include "qemu/help_option.h" 39 #include "qemu/module.h" 40 #include "qemu/plugin.h" 41 #include "user/guest-base.h" 42 #include "user/page-protection.h" 43 #include "exec/gdbstub.h" 44 #include "gdbstub/user.h" 45 #include "tcg/startup.h" 46 #include "qemu/timer.h" 47 #include "qemu/envlist.h" 48 #include "qemu/guest-random.h" 49 #include "elf.h" 50 #include "trace/control.h" 51 #include "target_elf.h" 52 #include "user/cpu_loop.h" 53 #include "crypto/init.h" 54 #include "fd-trans.h" 55 #include "signal-common.h" 56 #include "loader.h" 57 #include "user-mmap.h" 58 #include "tcg/perf.h" 59 #include "exec/page-vary.h" 60 61 #ifdef CONFIG_SEMIHOSTING 62 #include "semihosting/semihost.h" 63 #endif 64 65 #ifndef AT_FLAGS_PRESERVE_ARGV0 66 #define AT_FLAGS_PRESERVE_ARGV0_BIT 0 67 #define AT_FLAGS_PRESERVE_ARGV0 (1 << AT_FLAGS_PRESERVE_ARGV0_BIT) 68 #endif 69 70 char *exec_path; 71 char real_exec_path[PATH_MAX]; 72 73 static bool opt_one_insn_per_tb; 74 static unsigned long opt_tb_size; 75 static const char *argv0; 76 static const char *gdbstub; 77 static envlist_t *envlist; 78 static const char *cpu_model; 79 static const char *cpu_type; 80 static const char *seed_optarg; 81 unsigned long mmap_min_addr; 82 uintptr_t guest_base; 83 bool have_guest_base; 84 85 /* 86 * Used to implement backwards-compatibility for the `-strace`, and 87 * QEMU_STRACE options. Without this, the QEMU_LOG can be overwritten by 88 * -strace, or vice versa. 89 */ 90 static bool enable_strace; 91 92 /* 93 * The last log mask given by the user in an environment variable or argument. 94 * Used to support command line arguments overriding environment variables. 95 */ 96 static int last_log_mask; 97 static const char *last_log_filename; 98 99 /* 100 * When running 32-on-64 we should make sure we can fit all of the possible 101 * guest address space into a contiguous chunk of virtual host memory. 102 * 103 * This way we will never overlap with our own libraries or binaries or stack 104 * or anything else that QEMU maps. 105 * 106 * Many cpus reserve the high bit (or more than one for some 64-bit cpus) 107 * of the address for the kernel. Some cpus rely on this and user space 108 * uses the high bit(s) for pointer tagging and the like. For them, we 109 * must preserve the expected address space. 110 */ 111 #ifndef MAX_RESERVED_VA 112 # if HOST_LONG_BITS > TARGET_VIRT_ADDR_SPACE_BITS 113 # if TARGET_VIRT_ADDR_SPACE_BITS == 32 && \ 114 (TARGET_LONG_BITS == 32 || defined(TARGET_ABI32)) 115 # define MAX_RESERVED_VA(CPU) 0xfffffffful 116 # else 117 # define MAX_RESERVED_VA(CPU) ((1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1) 118 # endif 119 # else 120 # define MAX_RESERVED_VA(CPU) 0 121 # endif 122 #endif 123 124 unsigned long reserved_va; 125 unsigned long guest_addr_max; 126 127 static void usage(int exitcode); 128 129 static const char *interp_prefix = CONFIG_QEMU_INTERP_PREFIX; 130 const char *qemu_uname_release; 131 132 #if !defined(TARGET_DEFAULT_STACK_SIZE) 133 /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so 134 we allocate a bigger stack. Need a better solution, for example 135 by remapping the process stack directly at the right place */ 136 #define TARGET_DEFAULT_STACK_SIZE 8 * 1024 * 1024UL 137 #endif 138 139 unsigned long guest_stack_size = TARGET_DEFAULT_STACK_SIZE; 140 141 /***********************************************************/ 142 /* Helper routines for implementing atomic operations. */ 143 144 /* Make sure everything is in a consistent state for calling fork(). */ 145 void fork_start(void) 146 { 147 start_exclusive(); 148 mmap_fork_start(); 149 cpu_list_lock(); 150 qemu_plugin_user_prefork_lock(); 151 gdbserver_fork_start(); 152 fd_trans_prefork(); 153 } 154 155 void fork_end(pid_t pid) 156 { 157 bool child = pid == 0; 158 159 fd_trans_postfork(); 160 qemu_plugin_user_postfork(child); 161 mmap_fork_end(child); 162 if (child) { 163 CPUState *cpu, *next_cpu; 164 /* Child processes created by fork() only have a single thread. 165 Discard information about the parent threads. */ 166 CPU_FOREACH_SAFE(cpu, next_cpu) { 167 if (cpu != thread_cpu) { 168 QTAILQ_REMOVE_RCU(&cpus_queue, cpu, node); 169 } 170 } 171 qemu_init_cpu_list(); 172 get_task_state(thread_cpu)->ts_tid = qemu_get_thread_id(); 173 } else { 174 cpu_list_unlock(); 175 } 176 gdbserver_fork_end(thread_cpu, pid); 177 /* 178 * qemu_init_cpu_list() reinitialized the child exclusive state, but we 179 * also need to keep current_cpu consistent, so call end_exclusive() for 180 * both child and parent. 181 */ 182 end_exclusive(); 183 } 184 185 __thread CPUState *thread_cpu; 186 187 bool qemu_cpu_is_self(CPUState *cpu) 188 { 189 return thread_cpu == cpu; 190 } 191 192 void qemu_cpu_kick(CPUState *cpu) 193 { 194 cpu_exit(cpu); 195 } 196 197 void task_settid(TaskState *ts) 198 { 199 if (ts->ts_tid == 0) { 200 ts->ts_tid = (pid_t)syscall(SYS_gettid); 201 } 202 } 203 204 void stop_all_tasks(void) 205 { 206 /* 207 * We trust that when using NPTL, start_exclusive() 208 * handles thread stopping correctly. 209 */ 210 start_exclusive(); 211 } 212 213 /* Assumes contents are already zeroed. */ 214 void init_task_state(TaskState *ts) 215 { 216 long ticks_per_sec; 217 struct timespec bt; 218 219 ts->used = 1; 220 ts->sigaltstack_used = (struct target_sigaltstack) { 221 .ss_sp = 0, 222 .ss_size = 0, 223 .ss_flags = TARGET_SS_DISABLE, 224 }; 225 226 /* Capture task start time relative to system boot */ 227 228 ticks_per_sec = sysconf(_SC_CLK_TCK); 229 230 if ((ticks_per_sec > 0) && !clock_gettime(CLOCK_BOOTTIME, &bt)) { 231 /* start_boottime is expressed in clock ticks */ 232 ts->start_boottime = bt.tv_sec * (uint64_t) ticks_per_sec; 233 ts->start_boottime += bt.tv_nsec * (uint64_t) ticks_per_sec / 234 NANOSECONDS_PER_SECOND; 235 } 236 } 237 238 CPUArchState *cpu_copy(CPUArchState *env) 239 { 240 CPUState *cpu = env_cpu(env); 241 CPUState *new_cpu = cpu_create(cpu_type); 242 CPUArchState *new_env = cpu_env(new_cpu); 243 CPUBreakpoint *bp; 244 245 /* Reset non arch specific state */ 246 cpu_reset(new_cpu); 247 248 new_cpu->tcg_cflags = cpu->tcg_cflags; 249 memcpy(new_env, env, sizeof(CPUArchState)); 250 #if defined(TARGET_I386) || defined(TARGET_X86_64) 251 new_env->gdt.base = target_mmap(0, sizeof(uint64_t) * TARGET_GDT_ENTRIES, 252 PROT_READ | PROT_WRITE, 253 MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); 254 memcpy(g2h_untagged(new_env->gdt.base), g2h_untagged(env->gdt.base), 255 sizeof(uint64_t) * TARGET_GDT_ENTRIES); 256 OBJECT(new_cpu)->free = OBJECT(cpu)->free; 257 #endif 258 259 /* Clone all break/watchpoints. 260 Note: Once we support ptrace with hw-debug register access, make sure 261 BP_CPU break/watchpoints are handled correctly on clone. */ 262 QTAILQ_INIT(&new_cpu->breakpoints); 263 QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { 264 cpu_breakpoint_insert(new_cpu, bp->pc, bp->flags, NULL); 265 } 266 267 return new_env; 268 } 269 270 static void handle_arg_help(const char *arg) 271 { 272 usage(EXIT_SUCCESS); 273 } 274 275 static void handle_arg_log(const char *arg) 276 { 277 last_log_mask = qemu_str_to_log_mask(arg); 278 if (!last_log_mask) { 279 qemu_print_log_usage(stdout); 280 exit(EXIT_FAILURE); 281 } 282 } 283 284 static void handle_arg_dfilter(const char *arg) 285 { 286 qemu_set_dfilter_ranges(arg, &error_fatal); 287 } 288 289 static void handle_arg_log_filename(const char *arg) 290 { 291 last_log_filename = arg; 292 } 293 294 static void handle_arg_set_env(const char *arg) 295 { 296 char *r, *p, *token; 297 r = p = strdup(arg); 298 while ((token = strsep(&p, ",")) != NULL) { 299 if (envlist_setenv(envlist, token) != 0) { 300 usage(EXIT_FAILURE); 301 } 302 } 303 free(r); 304 } 305 306 static void handle_arg_unset_env(const char *arg) 307 { 308 char *r, *p, *token; 309 r = p = strdup(arg); 310 while ((token = strsep(&p, ",")) != NULL) { 311 if (envlist_unsetenv(envlist, token) != 0) { 312 usage(EXIT_FAILURE); 313 } 314 } 315 free(r); 316 } 317 318 static void handle_arg_argv0(const char *arg) 319 { 320 argv0 = strdup(arg); 321 } 322 323 static void handle_arg_stack_size(const char *arg) 324 { 325 char *p; 326 guest_stack_size = strtoul(arg, &p, 0); 327 if (guest_stack_size == 0) { 328 usage(EXIT_FAILURE); 329 } 330 331 if (*p == 'M') { 332 guest_stack_size *= MiB; 333 } else if (*p == 'k' || *p == 'K') { 334 guest_stack_size *= KiB; 335 } 336 } 337 338 static void handle_arg_ld_prefix(const char *arg) 339 { 340 interp_prefix = strdup(arg); 341 } 342 343 static void handle_arg_pagesize(const char *arg) 344 { 345 unsigned size, want = qemu_real_host_page_size(); 346 347 if (qemu_strtoui(arg, NULL, 10, &size) || size != want) { 348 warn_report("Deprecated page size option cannot " 349 "change host page size (%u)", want); 350 } 351 } 352 353 static void handle_arg_seed(const char *arg) 354 { 355 seed_optarg = arg; 356 } 357 358 static void handle_arg_gdb(const char *arg) 359 { 360 gdbstub = g_strdup(arg); 361 } 362 363 static void handle_arg_uname(const char *arg) 364 { 365 qemu_uname_release = strdup(arg); 366 } 367 368 static void handle_arg_cpu(const char *arg) 369 { 370 cpu_model = strdup(arg); 371 if (cpu_model == NULL || is_help_option(cpu_model)) { 372 list_cpus(); 373 exit(EXIT_FAILURE); 374 } 375 } 376 377 static void handle_arg_guest_base(const char *arg) 378 { 379 guest_base = strtol(arg, NULL, 0); 380 have_guest_base = true; 381 } 382 383 static void handle_arg_reserved_va(const char *arg) 384 { 385 char *p; 386 int shift = 0; 387 unsigned long val; 388 389 val = strtoul(arg, &p, 0); 390 switch (*p) { 391 case 'k': 392 case 'K': 393 shift = 10; 394 break; 395 case 'M': 396 shift = 20; 397 break; 398 case 'G': 399 shift = 30; 400 break; 401 } 402 if (shift) { 403 unsigned long unshifted = val; 404 p++; 405 val <<= shift; 406 if (val >> shift != unshifted) { 407 fprintf(stderr, "Reserved virtual address too big\n"); 408 exit(EXIT_FAILURE); 409 } 410 } 411 if (*p) { 412 fprintf(stderr, "Unrecognised -R size suffix '%s'\n", p); 413 exit(EXIT_FAILURE); 414 } 415 /* The representation is size - 1, with 0 remaining "default". */ 416 reserved_va = val ? val - 1 : 0; 417 } 418 419 static const char *rtsig_map = CONFIG_QEMU_RTSIG_MAP; 420 421 static void handle_arg_rtsig_map(const char *arg) 422 { 423 rtsig_map = arg; 424 } 425 426 static void handle_arg_one_insn_per_tb(const char *arg) 427 { 428 opt_one_insn_per_tb = true; 429 } 430 431 static void handle_arg_tb_size(const char *arg) 432 { 433 if (qemu_strtoul(arg, NULL, 0, &opt_tb_size)) { 434 usage(EXIT_FAILURE); 435 } 436 } 437 438 static void handle_arg_strace(const char *arg) 439 { 440 enable_strace = true; 441 } 442 443 static void handle_arg_version(const char *arg) 444 { 445 printf("qemu-" TARGET_NAME " version " QEMU_FULL_VERSION 446 "\n" QEMU_COPYRIGHT "\n"); 447 exit(EXIT_SUCCESS); 448 } 449 450 static void handle_arg_trace(const char *arg) 451 { 452 trace_opt_parse(arg); 453 } 454 455 #if defined(TARGET_XTENSA) 456 static void handle_arg_abi_call0(const char *arg) 457 { 458 xtensa_set_abi_call0(); 459 } 460 #endif 461 462 static void handle_arg_perfmap(const char *arg) 463 { 464 perf_enable_perfmap(); 465 } 466 467 static void handle_arg_jitdump(const char *arg) 468 { 469 perf_enable_jitdump(); 470 } 471 472 static QemuPluginList plugins = QTAILQ_HEAD_INITIALIZER(plugins); 473 474 #ifdef CONFIG_PLUGIN 475 static void handle_arg_plugin(const char *arg) 476 { 477 qemu_plugin_opt_parse(arg, &plugins); 478 } 479 #endif 480 481 struct qemu_argument { 482 const char *argv; 483 const char *env; 484 bool has_arg; 485 void (*handle_opt)(const char *arg); 486 const char *example; 487 const char *help; 488 }; 489 490 static const struct qemu_argument arg_table[] = { 491 {"h", "", false, handle_arg_help, 492 "", "print this help"}, 493 {"help", "", false, handle_arg_help, 494 "", ""}, 495 {"g", "QEMU_GDB", true, handle_arg_gdb, 496 "port", "wait gdb connection to 'port'"}, 497 {"L", "QEMU_LD_PREFIX", true, handle_arg_ld_prefix, 498 "path", "set the elf interpreter prefix to 'path'"}, 499 {"s", "QEMU_STACK_SIZE", true, handle_arg_stack_size, 500 "size", "set the stack size to 'size' bytes"}, 501 {"cpu", "QEMU_CPU", true, handle_arg_cpu, 502 "model", "select CPU (-cpu help for list)"}, 503 {"E", "QEMU_SET_ENV", true, handle_arg_set_env, 504 "var=value", "sets targets environment variable (see below)"}, 505 {"U", "QEMU_UNSET_ENV", true, handle_arg_unset_env, 506 "var", "unsets targets environment variable (see below)"}, 507 {"0", "QEMU_ARGV0", true, handle_arg_argv0, 508 "argv0", "forces target process argv[0] to be 'argv0'"}, 509 {"r", "QEMU_UNAME", true, handle_arg_uname, 510 "uname", "set qemu uname release string to 'uname'"}, 511 {"B", "QEMU_GUEST_BASE", true, handle_arg_guest_base, 512 "address", "set guest_base address to 'address'"}, 513 {"R", "QEMU_RESERVED_VA", true, handle_arg_reserved_va, 514 "size", "reserve 'size' bytes for guest virtual address space"}, 515 {"t", "QEMU_RTSIG_MAP", true, handle_arg_rtsig_map, 516 "tsig hsig n[,...]", 517 "map target rt signals [tsig,tsig+n) to [hsig,hsig+n]"}, 518 {"d", "QEMU_LOG", true, handle_arg_log, 519 "item[,...]", "enable logging of specified items " 520 "(use '-d help' for a list of items)"}, 521 {"dfilter", "QEMU_DFILTER", true, handle_arg_dfilter, 522 "range[,...]","filter logging based on address range"}, 523 {"D", "QEMU_LOG_FILENAME", true, handle_arg_log_filename, 524 "logfile", "write logs to 'logfile' (default stderr)"}, 525 {"p", "QEMU_PAGESIZE", true, handle_arg_pagesize, 526 "pagesize", "deprecated change to host page size"}, 527 {"one-insn-per-tb", 528 "QEMU_ONE_INSN_PER_TB", false, handle_arg_one_insn_per_tb, 529 "", "run with one guest instruction per emulated TB"}, 530 {"tb-size", "QEMU_TB_SIZE", true, handle_arg_tb_size, 531 "size", "TCG translation block cache size"}, 532 {"strace", "QEMU_STRACE", false, handle_arg_strace, 533 "", "log system calls"}, 534 {"seed", "QEMU_RAND_SEED", true, handle_arg_seed, 535 "", "Seed for pseudo-random number generator"}, 536 {"trace", "QEMU_TRACE", true, handle_arg_trace, 537 "", "[[enable=]<pattern>][,events=<file>][,file=<file>]"}, 538 #ifdef CONFIG_PLUGIN 539 {"plugin", "QEMU_PLUGIN", true, handle_arg_plugin, 540 "", "[file=]<file>[,<argname>=<argvalue>]"}, 541 #endif 542 {"version", "QEMU_VERSION", false, handle_arg_version, 543 "", "display version information and exit"}, 544 #if defined(TARGET_XTENSA) 545 {"xtensa-abi-call0", "QEMU_XTENSA_ABI_CALL0", false, handle_arg_abi_call0, 546 "", "assume CALL0 Xtensa ABI"}, 547 #endif 548 {"perfmap", "QEMU_PERFMAP", false, handle_arg_perfmap, 549 "", "Generate a /tmp/perf-${pid}.map file for perf"}, 550 {"jitdump", "QEMU_JITDUMP", false, handle_arg_jitdump, 551 "", "Generate a jit-${pid}.dump file for perf"}, 552 {NULL, NULL, false, NULL, NULL, NULL} 553 }; 554 555 static void usage(int exitcode) 556 { 557 const struct qemu_argument *arginfo; 558 int maxarglen; 559 int maxenvlen; 560 561 printf("usage: qemu-" TARGET_NAME " [options] program [arguments...]\n" 562 "Linux CPU emulator (compiled for " TARGET_NAME " emulation)\n" 563 "\n" 564 "Options and associated environment variables:\n" 565 "\n"); 566 567 /* Calculate column widths. We must always have at least enough space 568 * for the column header. 569 */ 570 maxarglen = strlen("Argument"); 571 maxenvlen = strlen("Env-variable"); 572 573 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { 574 int arglen = strlen(arginfo->argv); 575 if (arginfo->has_arg) { 576 arglen += strlen(arginfo->example) + 1; 577 } 578 if (strlen(arginfo->env) > maxenvlen) { 579 maxenvlen = strlen(arginfo->env); 580 } 581 if (arglen > maxarglen) { 582 maxarglen = arglen; 583 } 584 } 585 586 printf("%-*s %-*s Description\n", maxarglen+1, "Argument", 587 maxenvlen, "Env-variable"); 588 589 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { 590 if (arginfo->has_arg) { 591 printf("-%s %-*s %-*s %s\n", arginfo->argv, 592 (int)(maxarglen - strlen(arginfo->argv) - 1), 593 arginfo->example, maxenvlen, arginfo->env, arginfo->help); 594 } else { 595 printf("-%-*s %-*s %s\n", maxarglen, arginfo->argv, 596 maxenvlen, arginfo->env, 597 arginfo->help); 598 } 599 } 600 601 printf("\n" 602 "Defaults:\n" 603 "QEMU_LD_PREFIX = %s\n" 604 "QEMU_STACK_SIZE = %ld byte\n", 605 interp_prefix, 606 guest_stack_size); 607 608 printf("\n" 609 "You can use -E and -U options or the QEMU_SET_ENV and\n" 610 "QEMU_UNSET_ENV environment variables to set and unset\n" 611 "environment variables for the target process.\n" 612 "It is possible to provide several variables by separating them\n" 613 "by commas in getsubopt(3) style. Additionally it is possible to\n" 614 "provide the -E and -U options multiple times.\n" 615 "The following lines are equivalent:\n" 616 " -E var1=val2 -E var2=val2 -U LD_PRELOAD -U LD_DEBUG\n" 617 " -E var1=val2,var2=val2 -U LD_PRELOAD,LD_DEBUG\n" 618 " QEMU_SET_ENV=var1=val2,var2=val2 QEMU_UNSET_ENV=LD_PRELOAD,LD_DEBUG\n" 619 "Note that if you provide several changes to a single variable\n" 620 "the last change will stay in effect.\n" 621 "\n" 622 QEMU_HELP_BOTTOM "\n"); 623 624 exit(exitcode); 625 } 626 627 static int parse_args(int argc, char **argv) 628 { 629 const char *r; 630 int optind; 631 const struct qemu_argument *arginfo; 632 633 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { 634 if (arginfo->env == NULL) { 635 continue; 636 } 637 638 r = getenv(arginfo->env); 639 if (r != NULL) { 640 arginfo->handle_opt(r); 641 } 642 } 643 644 optind = 1; 645 for (;;) { 646 if (optind >= argc) { 647 break; 648 } 649 r = argv[optind]; 650 if (r[0] != '-') { 651 break; 652 } 653 optind++; 654 r++; 655 if (!strcmp(r, "-")) { 656 break; 657 } 658 /* Treat --foo the same as -foo. */ 659 if (r[0] == '-') { 660 r++; 661 } 662 663 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { 664 if (!strcmp(r, arginfo->argv)) { 665 if (arginfo->has_arg) { 666 if (optind >= argc) { 667 (void) fprintf(stderr, 668 "qemu: missing argument for option '%s'\n", r); 669 exit(EXIT_FAILURE); 670 } 671 arginfo->handle_opt(argv[optind]); 672 optind++; 673 } else { 674 arginfo->handle_opt(NULL); 675 } 676 break; 677 } 678 } 679 680 /* no option matched the current argv */ 681 if (arginfo->handle_opt == NULL) { 682 (void) fprintf(stderr, "qemu: unknown option '%s'\n", r); 683 exit(EXIT_FAILURE); 684 } 685 } 686 687 if (optind >= argc) { 688 (void) fprintf(stderr, "qemu: no user program specified\n"); 689 exit(EXIT_FAILURE); 690 } 691 692 exec_path = argv[optind]; 693 694 return optind; 695 } 696 697 int main(int argc, char **argv, char **envp) 698 { 699 struct target_pt_regs regs1, *regs = ®s1; 700 struct image_info info1, *info = &info1; 701 struct linux_binprm bprm; 702 TaskState *ts; 703 CPUArchState *env; 704 CPUState *cpu; 705 int optind; 706 char **target_environ, **wrk; 707 char **target_argv; 708 int target_argc; 709 int i; 710 int ret; 711 int execfd; 712 int host_page_size; 713 unsigned long max_reserved_va; 714 bool preserve_argv0; 715 716 error_init(argv[0]); 717 module_call_init(MODULE_INIT_TRACE); 718 qemu_init_cpu_list(); 719 module_call_init(MODULE_INIT_QOM); 720 721 envlist = envlist_create(); 722 723 /* 724 * add current environment into the list 725 * envlist_setenv adds to the front of the list; to preserve environ 726 * order add from back to front 727 */ 728 for (wrk = environ; *wrk != NULL; wrk++) { 729 continue; 730 } 731 while (wrk != environ) { 732 wrk--; 733 (void) envlist_setenv(envlist, *wrk); 734 } 735 736 /* Read the stack limit from the kernel. If it's "unlimited", 737 then we can do little else besides use the default. */ 738 { 739 struct rlimit lim; 740 if (getrlimit(RLIMIT_STACK, &lim) == 0 741 && lim.rlim_cur != RLIM_INFINITY 742 && lim.rlim_cur == (target_long)lim.rlim_cur 743 && lim.rlim_cur > guest_stack_size) { 744 guest_stack_size = lim.rlim_cur; 745 } 746 } 747 748 cpu_model = NULL; 749 750 qemu_add_opts(&qemu_trace_opts); 751 qemu_plugin_add_opts(); 752 753 optind = parse_args(argc, argv); 754 755 qemu_set_log_filename_flags(last_log_filename, 756 last_log_mask | (enable_strace * LOG_STRACE), 757 &error_fatal); 758 759 if (!trace_init_backends()) { 760 exit(1); 761 } 762 trace_init_file(); 763 qemu_plugin_load_list(&plugins, &error_fatal); 764 765 /* Zero out regs */ 766 memset(regs, 0, sizeof(struct target_pt_regs)); 767 768 /* Zero out image_info */ 769 memset(info, 0, sizeof(struct image_info)); 770 771 memset(&bprm, 0, sizeof (bprm)); 772 773 /* Scan interp_prefix dir for replacement files. */ 774 init_paths(interp_prefix); 775 776 init_qemu_uname_release(); 777 778 /* 779 * Manage binfmt-misc open-binary flag 780 */ 781 errno = 0; 782 execfd = qemu_getauxval(AT_EXECFD); 783 if (errno != 0) { 784 execfd = open(exec_path, O_RDONLY); 785 if (execfd < 0) { 786 printf("Error while loading %s: %s\n", exec_path, strerror(errno)); 787 _exit(EXIT_FAILURE); 788 } 789 } 790 791 /* Resolve executable file name to full path name */ 792 if (realpath(exec_path, real_exec_path)) { 793 exec_path = real_exec_path; 794 } 795 796 /* 797 * get binfmt_misc flags 798 */ 799 preserve_argv0 = !!(qemu_getauxval(AT_FLAGS) & AT_FLAGS_PRESERVE_ARGV0); 800 801 /* 802 * Manage binfmt-misc preserve-arg[0] flag 803 * argv[optind] full path to the binary 804 * argv[optind + 1] original argv[0] 805 */ 806 if (optind + 1 < argc && preserve_argv0) { 807 optind++; 808 } 809 810 if (cpu_model == NULL) { 811 cpu_model = cpu_get_model(get_elf_eflags(execfd)); 812 } 813 cpu_type = parse_cpu_option(cpu_model); 814 815 /* init tcg before creating CPUs */ 816 { 817 AccelState *accel = current_accel(); 818 AccelClass *ac = ACCEL_GET_CLASS(accel); 819 820 accel_init_interfaces(ac); 821 object_property_set_bool(OBJECT(accel), "one-insn-per-tb", 822 opt_one_insn_per_tb, &error_abort); 823 object_property_set_int(OBJECT(accel), "tb-size", 824 opt_tb_size, &error_abort); 825 ac->init_machine(accel, NULL); 826 } 827 828 /* 829 * Finalize page size before creating CPUs. 830 * This will do nothing if !TARGET_PAGE_BITS_VARY. 831 * The most efficient setting is to match the host. 832 */ 833 host_page_size = qemu_real_host_page_size(); 834 set_preferred_target_page_bits(ctz32(host_page_size)); 835 finalize_target_page_bits(); 836 837 cpu = cpu_create(cpu_type); 838 env = cpu_env(cpu); 839 cpu_reset(cpu); 840 thread_cpu = cpu; 841 842 /* 843 * Reserving too much vm space via mmap can run into problems with rlimits, 844 * oom due to page table creation, etc. We will still try it, if directed 845 * by the command-line option, but not by default. Unless we're running a 846 * target address space of 32 or fewer bits on a host with 64 bits. 847 */ 848 max_reserved_va = MAX_RESERVED_VA(cpu); 849 if (reserved_va != 0) { 850 if ((reserved_va + 1) % host_page_size) { 851 char *s = size_to_str(host_page_size); 852 fprintf(stderr, "Reserved virtual address not aligned mod %s\n", s); 853 g_free(s); 854 exit(EXIT_FAILURE); 855 } 856 if (max_reserved_va && reserved_va > max_reserved_va) { 857 fprintf(stderr, "Reserved virtual address too big\n"); 858 exit(EXIT_FAILURE); 859 } 860 } else if (HOST_LONG_BITS == 64 && TARGET_VIRT_ADDR_SPACE_BITS <= 32) { 861 /* MAX_RESERVED_VA + 1 is a large power of 2, so is aligned. */ 862 reserved_va = max_reserved_va; 863 } 864 if (reserved_va != 0) { 865 guest_addr_max = reserved_va; 866 } else if (MIN(TARGET_VIRT_ADDR_SPACE_BITS, TARGET_ABI_BITS) <= 32) { 867 guest_addr_max = UINT32_MAX; 868 } else { 869 guest_addr_max = ~0ul; 870 } 871 872 /* 873 * Temporarily disable 874 * "comparison is always false due to limited range of data type" 875 * due to comparison between (possible) uint64_t and uintptr_t. 876 */ 877 #pragma GCC diagnostic push 878 #pragma GCC diagnostic ignored "-Wtype-limits" 879 #pragma GCC diagnostic ignored "-Wtautological-compare" 880 881 /* 882 * Select an initial value for task_unmapped_base that is in range. 883 */ 884 if (reserved_va) { 885 if (TASK_UNMAPPED_BASE < reserved_va) { 886 task_unmapped_base = TASK_UNMAPPED_BASE; 887 } else { 888 /* The most common default formula is TASK_SIZE / 3. */ 889 task_unmapped_base = TARGET_PAGE_ALIGN(reserved_va / 3); 890 } 891 } else if (TASK_UNMAPPED_BASE < UINTPTR_MAX) { 892 task_unmapped_base = TASK_UNMAPPED_BASE; 893 } else { 894 /* 32-bit host: pick something medium size. */ 895 task_unmapped_base = 0x10000000; 896 } 897 mmap_next_start = task_unmapped_base; 898 899 /* Similarly for elf_et_dyn_base. */ 900 if (reserved_va) { 901 if (ELF_ET_DYN_BASE < reserved_va) { 902 elf_et_dyn_base = ELF_ET_DYN_BASE; 903 } else { 904 /* The most common default formula is TASK_SIZE / 3 * 2. */ 905 elf_et_dyn_base = TARGET_PAGE_ALIGN(reserved_va / 3) * 2; 906 } 907 } else if (ELF_ET_DYN_BASE < UINTPTR_MAX) { 908 elf_et_dyn_base = ELF_ET_DYN_BASE; 909 } else { 910 /* 32-bit host: pick something medium size. */ 911 elf_et_dyn_base = 0x18000000; 912 } 913 914 #pragma GCC diagnostic pop 915 916 { 917 Error *err = NULL; 918 if (seed_optarg != NULL) { 919 qemu_guest_random_seed_main(seed_optarg, &err); 920 } else { 921 qcrypto_init(&err); 922 } 923 if (err) { 924 error_reportf_err(err, "cannot initialize crypto: "); 925 exit(1); 926 } 927 } 928 929 target_environ = envlist_to_environ(envlist, NULL); 930 envlist_free(envlist); 931 932 /* 933 * Read in mmap_min_addr kernel parameter. This value is used 934 * When loading the ELF image to determine whether guest_base 935 * is needed. It is also used in mmap_find_vma. 936 */ 937 { 938 FILE *fp; 939 940 if ((fp = fopen("/proc/sys/vm/mmap_min_addr", "r")) != NULL) { 941 unsigned long tmp; 942 if (fscanf(fp, "%lu", &tmp) == 1 && tmp != 0) { 943 mmap_min_addr = MAX(tmp, host_page_size); 944 qemu_log_mask(CPU_LOG_PAGE, "host mmap_min_addr=0x%lx\n", 945 mmap_min_addr); 946 } 947 fclose(fp); 948 } 949 } 950 951 /* 952 * We prefer to not make NULL pointers accessible to QEMU. 953 * If we're in a chroot with no /proc, fall back to 1 page. 954 */ 955 if (mmap_min_addr == 0) { 956 mmap_min_addr = host_page_size; 957 qemu_log_mask(CPU_LOG_PAGE, 958 "host mmap_min_addr=0x%lx (fallback)\n", 959 mmap_min_addr); 960 } 961 962 /* 963 * Prepare copy of argv vector for target. 964 */ 965 target_argc = argc - optind; 966 target_argv = g_new0(char *, target_argc + 1); 967 968 /* 969 * If argv0 is specified (using '-0' switch) we replace 970 * argv[0] pointer with the given one. 971 */ 972 i = 0; 973 if (argv0 != NULL) { 974 target_argv[i++] = strdup(argv0); 975 } 976 for (; i < target_argc; i++) { 977 target_argv[i] = strdup(argv[optind + i]); 978 } 979 target_argv[target_argc] = NULL; 980 981 ts = g_new0(TaskState, 1); 982 init_task_state(ts); 983 /* build Task State */ 984 ts->info = info; 985 ts->bprm = &bprm; 986 cpu->opaque = ts; 987 task_settid(ts); 988 989 fd_trans_init(); 990 991 ret = loader_exec(execfd, exec_path, target_argv, target_environ, regs, 992 info, &bprm); 993 if (ret != 0) { 994 printf("Error while loading %s: %s\n", exec_path, strerror(-ret)); 995 _exit(EXIT_FAILURE); 996 } 997 998 for (wrk = target_environ; *wrk; wrk++) { 999 g_free(*wrk); 1000 } 1001 1002 g_free(target_environ); 1003 1004 if (qemu_loglevel_mask(CPU_LOG_PAGE)) { 1005 FILE *f = qemu_log_trylock(); 1006 if (f) { 1007 fprintf(f, "guest_base %p\n", (void *)guest_base); 1008 fprintf(f, "page layout changed following binary load\n"); 1009 page_dump(f); 1010 1011 fprintf(f, "end_code 0x" TARGET_ABI_FMT_lx "\n", 1012 info->end_code); 1013 fprintf(f, "start_code 0x" TARGET_ABI_FMT_lx "\n", 1014 info->start_code); 1015 fprintf(f, "start_data 0x" TARGET_ABI_FMT_lx "\n", 1016 info->start_data); 1017 fprintf(f, "end_data 0x" TARGET_ABI_FMT_lx "\n", 1018 info->end_data); 1019 fprintf(f, "start_stack 0x" TARGET_ABI_FMT_lx "\n", 1020 info->start_stack); 1021 fprintf(f, "brk 0x" TARGET_ABI_FMT_lx "\n", 1022 info->brk); 1023 fprintf(f, "entry 0x" TARGET_ABI_FMT_lx "\n", 1024 info->entry); 1025 fprintf(f, "argv_start 0x" TARGET_ABI_FMT_lx "\n", 1026 info->argv); 1027 fprintf(f, "env_start 0x" TARGET_ABI_FMT_lx "\n", 1028 info->envp); 1029 fprintf(f, "auxv_start 0x" TARGET_ABI_FMT_lx "\n", 1030 info->saved_auxv); 1031 qemu_log_unlock(f); 1032 } 1033 } 1034 1035 target_set_brk(info->brk); 1036 syscall_init(); 1037 signal_init(rtsig_map); 1038 1039 /* Now that we've loaded the binary, GUEST_BASE is fixed. Delay 1040 generating the prologue until now so that the prologue can take 1041 the real value of GUEST_BASE into account. */ 1042 tcg_prologue_init(); 1043 1044 target_cpu_copy_regs(env, regs); 1045 1046 if (gdbstub) { 1047 gdbserver_start(gdbstub, &error_fatal); 1048 } 1049 1050 #ifdef CONFIG_SEMIHOSTING 1051 qemu_semihosting_guestfd_init(); 1052 #endif 1053 1054 cpu_loop(env); 1055 /* never exits */ 1056 return 0; 1057 } 1058