unicorn/qemu
James Hogan 8689c6efef
target-mips: Fix exceptions while UX=0
Commit 01f728857941 ("target-mips: Status.UX/SX/KX enable 32-bit address
wrapping") added a new hflag MIPS_HFLAG_AWRAP, which indicates that
64-bit addressing is disallowed in the current mode, so hflag users
don't need to worry about the complexities of working that out, for
example checking both MIPS_HFLAG_KSU and MIPS_HFLAG_UX.

However when exceptions are taken outside of exception level,
mips_cpu_do_interrupt() manipulates the env->hflags directly rather than
using compute_hflags() to update them, and this code wasn't updated
accordingly. As a result, when UX is cleared, MIPS_HFLAG_AWRAP is set,
but it doesn't get cleared on entry back into kernel mode due to an
exception. Kernel mode then cannot access the 64-bit segments resulting
in a nested exception loop. The same applies to errors and debug
exceptions.

Fix by updating mips_cpu_do_interrupt() to clear the MIPS_HFLAG_WRAP
flag when necessary, according to compute_hflags().

Backports commit 7871abb94c2f4adc39f2487f6edf5e69ba872a65 from qemu
2018-02-17 18:57:52 -05:00
..
crypto Drop unused crypto source files 2018-02-17 15:23:57 -05:00
default-configs arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
docs docs: clarify memory region lifecycle 2018-02-12 15:11:21 -05:00
fpu softfloat: expand out STATUS macro 2018-02-12 13:43:13 -05:00
hw osdep.h: Move some compiler-specific things to compiler.h 2018-02-17 15:23:28 -05:00
include qom: Introduce ObjectPropertyIterator struct for iteration 2018-02-17 18:39:00 -05:00
qapi qstring: Make conversion from QObject * accept null 2018-02-17 15:24:12 -05:00
qobject qstring: Make conversion from QObject * accept null 2018-02-17 15:24:12 -05:00
qom qom: Introduce ObjectPropertyIterator struct for iteration 2018-02-17 18:39:00 -05:00
scripts Save copies of generated qapi files. 2017-01-21 00:30:50 +11:00
target-arm target-arm: Don't mask out bits [47:40] in LPAE descriptors for v8 2018-02-17 18:55:32 -05:00
target-i386 target-i386: Add clflushopt/clwb/pcommit to TCG_7_0_EBX_FEATURES 2018-02-17 17:26:53 -05:00
target-m68k target-*: Advance pc after recognizing a breakpoint 2018-02-17 15:24:11 -05:00
target-mips target-mips: Fix exceptions while UX=0 2018-02-17 18:57:52 -05:00
target-sparc target-*: Advance pc after recognizing a breakpoint 2018-02-17 15:24:11 -05:00
tcg tcg: Fix highwater check 2018-02-17 18:53:18 -05:00
util mmap-alloc: fix error handling 2018-02-17 15:24:11 -05:00
aarch64.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
aarch64eb.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
accel.c Automated leading tab to spaces conversion. 2017-01-21 12:28:22 +11:00
arm.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
armeb.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure tcg: Drop ia64 host support 2018-02-04 18:33:02 -05:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpu-exec-common.c cpu-exec: Migrate some generic fns to cpu-exec-common 2018-02-17 15:23:51 -05:00
cpu-exec.c cpu-exec: Fix compiler warning (-Werror=clobbered) 2018-02-17 15:24:15 -05:00
cpus.c cpu-exec: Purge all uses of ENV_GET_CPU() 2018-02-17 15:23:18 -05:00
cputlb.c cputlb: Change tlb_set_dirty() arg to cpu 2018-02-17 15:23:52 -05:00
exec.c qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c crypto: introduce new module for computing hash digests 2018-02-17 15:23:17 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
ioport.c ioport: do not use CPU_LOG_IOPORT 2018-02-17 15:24:15 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
Makefile crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.objs crypto: move crypto objects out of libqemuutil.la 2018-02-17 15:23:50 -05:00
Makefile.target tcg: split tcg_op_defs to -common 2018-02-17 15:23:51 -05:00
memory.c pc: resizeable ROM blocks 2018-02-17 17:18:38 -05:00
memory_mapping.c memory_mapping: Rework cpu related includes 2018-02-17 15:23:15 -05:00
mips.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
mips64.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
mips64el.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
mipsel.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
powerpc.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
qapi-schema.json import 2015-08-21 15:04:50 +08:00
qemu-log.c import 2015-08-21 15:04:50 +08:00
qemu-timer.c timer is redundant 2017-01-20 16:46:58 +08:00
rules.mak import 2015-08-21 15:04:50 +08:00
softmmu_template.h softmmu: remove now unused functions 2018-02-17 15:23:38 -05:00
sparc.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
sparc64.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00
tcg-runtime.c platform.h move #3 2017-01-21 00:13:21 +11:00
translate-all.c tcg/ppc: Revise goto_tb implementation 2018-02-17 15:24:03 -05:00
translate-all.h translate-all: remove unnecessary argument to tb_invalidate_phys_range 2018-02-13 09:04:51 -05:00
translate-common.c translate-all: Move tcg_handle_interrupt() to -common 2018-02-17 15:23:51 -05:00
unicorn_common.h This code should now build the x86_x64-softmmu part 2. 2017-01-19 22:50:28 +11:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c vl.c: Remove periods and exclamation points from error messages 2018-02-17 15:24:14 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h qemu_ram_block_by_name 2018-02-17 18:01:16 -05:00