1d9f24bf5SPaolo Bonzini /*
2d9f24bf5SPaolo Bonzini * Target-specific parts of the CPU object
3d9f24bf5SPaolo Bonzini *
4d9f24bf5SPaolo Bonzini * Copyright (c) 2003 Fabrice Bellard
5d9f24bf5SPaolo Bonzini *
6d9f24bf5SPaolo Bonzini * This library is free software; you can redistribute it and/or
7d9f24bf5SPaolo Bonzini * modify it under the terms of the GNU Lesser General Public
8d9f24bf5SPaolo Bonzini * License as published by the Free Software Foundation; either
9d9f24bf5SPaolo Bonzini * version 2 of the License, or (at your option) any later version.
10d9f24bf5SPaolo Bonzini *
11d9f24bf5SPaolo Bonzini * This library is distributed in the hope that it will be useful,
12d9f24bf5SPaolo Bonzini * but WITHOUT ANY WARRANTY; without even the implied warranty of
13d9f24bf5SPaolo Bonzini * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14d9f24bf5SPaolo Bonzini * Lesser General Public License for more details.
15d9f24bf5SPaolo Bonzini *
16d9f24bf5SPaolo Bonzini * You should have received a copy of the GNU Lesser General Public
17d9f24bf5SPaolo Bonzini * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18d9f24bf5SPaolo Bonzini */
19d9f24bf5SPaolo Bonzini
20d9f24bf5SPaolo Bonzini #include "qemu/osdep.h"
218d535c31SPierrick Bouvier #include "cpu.h"
220f66536aSPhilippe Mathieu-Daudé #include "system/accel-ops.h"
2332cad1ffSPhilippe Mathieu-Daudé #include "system/cpus.h"
24d97c3b06SPierrick Bouvier #include "exec/cpu-common.h"
2542508261SPhilippe Mathieu-Daudé #include "exec/tswap.h"
265b5968c4SPhilippe Mathieu-Daudé #include "exec/replay-core.h"
27d9f24bf5SPaolo Bonzini #include "exec/log.h"
28*2492008dSPhilippe Mathieu-Daudé #include "hw/core/cpu.h"
29ad1a706fSRichard Henderson #include "trace/trace-root.h"
30d9f24bf5SPaolo Bonzini
318d535c31SPierrick Bouvier /* Validate correct placement of CPUArchState. */
328d535c31SPierrick Bouvier QEMU_BUILD_BUG_ON(offsetof(ArchCPU, parent_obj) != 0);
338d535c31SPierrick Bouvier QEMU_BUILD_BUG_ON(offsetof(ArchCPU, env) != sizeof(CPUState));
348d535c31SPierrick Bouvier
35d9f24bf5SPaolo Bonzini /* enable or disable single step mode. EXCP_DEBUG is returned by the
36d9f24bf5SPaolo Bonzini CPU loop after each instruction */
cpu_single_step(CPUState * cpu,int enabled)37d9f24bf5SPaolo Bonzini void cpu_single_step(CPUState *cpu, int enabled)
38d9f24bf5SPaolo Bonzini {
39d9f24bf5SPaolo Bonzini if (cpu->singlestep_enabled != enabled) {
40d9f24bf5SPaolo Bonzini cpu->singlestep_enabled = enabled;
41412ae126SMads Ynddal
42412ae126SMads Ynddal #if !defined(CONFIG_USER_ONLY)
43412ae126SMads Ynddal const AccelOpsClass *ops = cpus_get_accel();
44412ae126SMads Ynddal if (ops->update_guest_debug) {
45412ae126SMads Ynddal ops->update_guest_debug(cpu);
46d9f24bf5SPaolo Bonzini }
47412ae126SMads Ynddal #endif
48412ae126SMads Ynddal
49ad1a706fSRichard Henderson trace_breakpoint_singlestep(cpu->cpu_index, enabled);
50d9f24bf5SPaolo Bonzini }
51d9f24bf5SPaolo Bonzini }
52d9f24bf5SPaolo Bonzini
cpu_abort(CPUState * cpu,const char * fmt,...)53d9f24bf5SPaolo Bonzini void cpu_abort(CPUState *cpu, const char *fmt, ...)
54d9f24bf5SPaolo Bonzini {
55d9f24bf5SPaolo Bonzini va_list ap;
56d9f24bf5SPaolo Bonzini va_list ap2;
57d9f24bf5SPaolo Bonzini
58d9f24bf5SPaolo Bonzini va_start(ap, fmt);
59d9f24bf5SPaolo Bonzini va_copy(ap2, ap);
60d9f24bf5SPaolo Bonzini fprintf(stderr, "qemu: fatal: ");
61d9f24bf5SPaolo Bonzini vfprintf(stderr, fmt, ap);
62d9f24bf5SPaolo Bonzini fprintf(stderr, "\n");
63d9f24bf5SPaolo Bonzini cpu_dump_state(cpu, stderr, CPU_DUMP_FPU | CPU_DUMP_CCOP);
64d9f24bf5SPaolo Bonzini if (qemu_log_separate()) {
65c60f599bSRichard Henderson FILE *logfile = qemu_log_trylock();
6678b54858SRichard Henderson if (logfile) {
6778b54858SRichard Henderson fprintf(logfile, "qemu: fatal: ");
6878b54858SRichard Henderson vfprintf(logfile, fmt, ap2);
6978b54858SRichard Henderson fprintf(logfile, "\n");
7078b54858SRichard Henderson cpu_dump_state(cpu, logfile, CPU_DUMP_FPU | CPU_DUMP_CCOP);
71d9f24bf5SPaolo Bonzini qemu_log_unlock(logfile);
7278b54858SRichard Henderson }
73d9f24bf5SPaolo Bonzini }
74d9f24bf5SPaolo Bonzini va_end(ap2);
75d9f24bf5SPaolo Bonzini va_end(ap);
76d9f24bf5SPaolo Bonzini replay_finish();
77d9f24bf5SPaolo Bonzini #if defined(CONFIG_USER_ONLY)
78d9f24bf5SPaolo Bonzini {
79d9f24bf5SPaolo Bonzini struct sigaction act;
80d9f24bf5SPaolo Bonzini sigfillset(&act.sa_mask);
81d9f24bf5SPaolo Bonzini act.sa_handler = SIG_DFL;
82d9f24bf5SPaolo Bonzini act.sa_flags = 0;
83d9f24bf5SPaolo Bonzini sigaction(SIGABRT, &act, NULL);
84d9f24bf5SPaolo Bonzini }
85d9f24bf5SPaolo Bonzini #endif
86d9f24bf5SPaolo Bonzini abort();
87d9f24bf5SPaolo Bonzini }
88d9f24bf5SPaolo Bonzini
89b939b8e4SPhilippe Mathieu-Daudé #undef target_big_endian
target_big_endian(void)90b939b8e4SPhilippe Mathieu-Daudé bool target_big_endian(void)
91d9f24bf5SPaolo Bonzini {
92ded625e7SThomas Huth return TARGET_BIG_ENDIAN;
93d9f24bf5SPaolo Bonzini }
94