Lines Matching +full:xtensa +full:- +full:linux +full:- +full:user

2  *  qemu user main
4 * Copyright (c) 2003-2008 Fabrice Bellard
21 #include "qemu/help-texts.h"
24 #include "qemu-version.h"
28 #include <linux/binfmts.h>
32 #include "user-internals.h"
35 #include "qemu/config-file.h"
37 #include "qemu/error-report.h"
41 #include "user/guest-base.h"
42 #include "user/page-protection.h"
44 #include "gdbstub/user.h"
45 #include "accel/accel-ops.h"
49 #include "qemu/guest-random.h"
53 #include "user/cpu_loop.h"
55 #include "fd-trans.h"
56 #include "signal-common.h"
58 #include "user-mmap.h"
60 #include "exec/page-vary.h"
87 * Used to implement backwards-compatibility for the `-strace`, and
89 * -strace, or vice versa.
94 * The last log mask given by the user in an environment variable or argument.
101 * When running 32-on-64 we should make sure we can fit all of the possible
107 * Many cpus reserve the high bit (or more than one for some 64-bit cpus)
108 * of the address for the kernel. Some cpus rely on this and user space
118 # define MAX_RESERVED_VA(CPU) ((1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1)
173 get_task_state(thread_cpu)->ts_tid = qemu_get_thread_id(); in fork_end()
200 if (ts->ts_tid == 0) { in task_settid()
201 ts->ts_tid = (pid_t)syscall(SYS_gettid); in task_settid()
220 ts->used = 1; in init_task_state()
221 ts->sigaltstack_used = (struct target_sigaltstack) { in init_task_state()
233 ts->start_boottime = bt.tv_sec * (uint64_t) ticks_per_sec; in init_task_state()
234 ts->start_boottime += bt.tv_nsec * (uint64_t) ticks_per_sec / in init_task_state()
249 new_cpu->tcg_cflags = cpu->tcg_cflags; in cpu_copy()
252 new_env->gdt.base = target_mmap(0, sizeof(uint64_t) * TARGET_GDT_ENTRIES, in cpu_copy()
254 MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); in cpu_copy()
255 memcpy(g2h_untagged(new_env->gdt.base), g2h_untagged(env->gdt.base), in cpu_copy()
257 OBJECT(new_cpu)->free = OBJECT(cpu)->free; in cpu_copy()
261 Note: Once we support ptrace with hw-debug register access, make sure in cpu_copy()
263 QTAILQ_INIT(&new_cpu->breakpoints); in cpu_copy()
264 QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { in cpu_copy()
265 cpu_breakpoint_insert(new_cpu, bp->pc, bp->flags, NULL); in cpu_copy()
413 fprintf(stderr, "Unrecognised -R size suffix '%s'\n", p); in handle_arg_reserved_va()
416 /* The representation is size - 1, with 0 remaining "default". */ in handle_arg_reserved_va()
417 reserved_va = val ? val - 1 : 0; in handle_arg_reserved_va()
446 printf("qemu-" TARGET_NAME " version " QEMU_FULL_VERSION in handle_arg_version()
503 "model", "select CPU (-cpu help for list)"},
521 "(use '-d help' for a list of items)"},
528 {"one-insn-per-tb",
531 {"tb-size", "QEMU_TB_SIZE", true, handle_arg_tb_size,
536 "", "Seed for pseudo-random number generator"},
546 {"xtensa-abi-call0", "QEMU_XTENSA_ABI_CALL0", false, handle_arg_abi_call0,
547 "", "assume CALL0 Xtensa ABI"},
550 "", "Generate a /tmp/perf-${pid}.map file for perf"},
552 "", "Generate a jit-${pid}.dump file for perf"},
562 printf("usage: qemu-" TARGET_NAME " [options] program [arguments...]\n" in usage()
563 "Linux CPU emulator (compiled for " TARGET_NAME " emulation)\n" in usage()
572 maxenvlen = strlen("Env-variable"); in usage()
574 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { in usage()
575 int arglen = strlen(arginfo->argv); in usage()
576 if (arginfo->has_arg) { in usage()
577 arglen += strlen(arginfo->example) + 1; in usage()
579 if (strlen(arginfo->env) > maxenvlen) { in usage()
580 maxenvlen = strlen(arginfo->env); in usage()
587 printf("%-*s %-*s Description\n", maxarglen+1, "Argument", in usage()
588 maxenvlen, "Env-variable"); in usage()
590 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { in usage()
591 if (arginfo->has_arg) { in usage()
592 printf("-%s %-*s %-*s %s\n", arginfo->argv, in usage()
593 (int)(maxarglen - strlen(arginfo->argv) - 1), in usage()
594 arginfo->example, maxenvlen, arginfo->env, arginfo->help); in usage()
596 printf("-%-*s %-*s %s\n", maxarglen, arginfo->argv, in usage()
597 maxenvlen, arginfo->env, in usage()
598 arginfo->help); in usage()
610 "You can use -E and -U options or the QEMU_SET_ENV and\n" in usage()
615 "provide the -E and -U options multiple times.\n" in usage()
617 " -E var1=val2 -E var2=val2 -U LD_PRELOAD -U LD_DEBUG\n" in usage()
618 " -E var1=val2,var2=val2 -U LD_PRELOAD,LD_DEBUG\n" in usage()
634 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { in parse_args()
635 if (arginfo->env == NULL) { in parse_args()
639 r = getenv(arginfo->env); in parse_args()
641 arginfo->handle_opt(r); in parse_args()
651 if (r[0] != '-') { in parse_args()
656 if (!strcmp(r, "-")) { in parse_args()
659 /* Treat --foo the same as -foo. */ in parse_args()
660 if (r[0] == '-') { in parse_args()
664 for (arginfo = arg_table; arginfo->handle_opt != NULL; arginfo++) { in parse_args()
665 if (!strcmp(r, arginfo->argv)) { in parse_args()
666 if (arginfo->has_arg) { in parse_args()
672 arginfo->handle_opt(argv[optind]); in parse_args()
675 arginfo->handle_opt(NULL); in parse_args()
682 if (arginfo->handle_opt == NULL) { in parse_args()
689 (void) fprintf(stderr, "qemu: no user program specified\n"); in parse_args()
733 wrk--; in main()
780 * Manage binfmt-misc open-binary flag in main()
803 * Manage binfmt-misc preserve-arg[0] flag in main()
822 object_property_set_bool(OBJECT(accel), "one-insn-per-tb", in main()
824 object_property_set_int(OBJECT(accel), "tb-size", in main()
826 ac->init_machine(accel, NULL); in main()
846 * by the command-line option, but not by default. Unless we're running a in main()
879 #pragma GCC diagnostic ignored "-Wtype-limits" in main()
880 #pragma GCC diagnostic ignored "-Wtautological-compare" in main()
895 /* 32-bit host: pick something medium size. */ in main()
911 /* 32-bit host: pick something medium size. */ in main()
966 target_argc = argc - optind; in main()
970 * If argv0 is specified (using '-0' switch) we replace in main()
985 ts->info = info; in main()
986 ts->bprm = &bprm; in main()
987 cpu->opaque = ts; in main()
995 printf("Error while loading %s: %s\n", exec_path, strerror(-ret)); in main()
1013 info->end_code); in main()
1015 info->start_code); in main()
1017 info->start_data); in main()
1019 info->end_data); in main()
1021 info->start_stack); in main()
1023 info->brk); in main()
1025 info->entry); in main()
1027 info->argv); in main()
1029 info->envp); in main()
1031 info->saved_auxv); in main()
1036 target_set_brk(info->brk); in main()