unicorn/qemu
Peter Maydell f2dcb81b27
Fix masking of PC lower bits when doing exception returns
In commit 9b6a3ea7a699594 store_reg() was changed to mask
both bits 0 and 1 of the new PC value when in ARM mode.
Unfortunately this broke the exception return code paths
when doing a return from ARM mode to Thumb mode: in some
of these we write a new CPSR including new Thumb mode
bit via gen_helper_cpsr_write_eret(), and then use store_reg()
to write the new PC. In this case if the new CPSR specified
Thumb mode then masking bit 1 of the PC is incorrect
(these code paths correspond to the v8 ARM ARM pseudocode
function AArch32.ExceptionReturn(), which always aligns the
new PC appropriately for the new instruction set state).

Instead of using store_reg() in exception-return code paths,
call a new store_pc_exc_ret() which stores the raw new PC
value to env->regs[15], and then mask it appropriately in
the subsequent helper_cpsr_write_eret() where the new
env->thumb state is available.

This fixes a bug introduced by 9b6a3ea7a699594 which caused
crashes/hangs or otherwise bad behaviour for Linux when
userspace was using Thumb.

Backports commit fb0e8e79a9d77ee240dbca036fa8698ce654e5d1 from qemu
2018-02-26 08:09:28 -05:00
..
crypto crypto: Clean up includes 2018-02-19 00:47:40 -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 fpu: add mechanism to check for invalid long double formats 2018-02-26 02:27:40 -05:00
hw qdev: Fix object reference leak in case device.realize() fails 2018-02-25 21:00:26 -05:00
include atomic.h: fix __SANITIZE_THREAD__ build 2018-02-26 05:12:17 -05:00
qapi qapi: return a 'missing parameter' error 2018-02-26 05:19:53 -05:00
qobject util: move declarations out of qemu-common.h 2018-02-22 09:25:48 -05:00
qom cpu: atomically modify cpu->exit_request 2018-02-26 05:11:18 -05:00
scripts qapi: Implement boxed types for commands/events 2018-02-25 20:22:03 -05:00
target-arm Fix masking of PC lower bits when doing exception returns 2018-02-26 08:09:28 -05:00
target-i386 target-i386: Correct family/model/stepping for Opteron_G3 2018-02-26 04:59:18 -05:00
target-m68k Remove unused function declarations 2018-02-26 02:31:46 -05:00
target-mips target-mips: generate fences 2018-02-26 03:52:35 -05:00
target-sparc sparc: Use g_memdup() instead of g_new0() + memcpy() 2018-02-25 23:19:44 -05:00
tcg tcg/optimize: move default return out of if statement 2018-02-26 05:05:21 -05:00
util cutils: Remove unused vector ifdef block 2018-02-26 02:28:50 -05:00
aarch64.h target-arm: Infrastucture changes to enable handling of tagged address loading into PC 2018-02-26 07:58:17 -05:00
aarch64eb.h target-arm: Infrastucture changes to enable handling of tagged address loading into PC 2018-02-26 07:58:17 -05:00
accel.c accel: make configure_accelerator return void 2018-02-24 00:31:28 -05:00
arm.h target-arm: Infrastucture changes to enable handling of tagged address loading into PC 2018-02-26 07:58:17 -05:00
armeb.h target-arm: Infrastucture changes to enable handling of tagged address loading into PC 2018-02-26 07:58:17 -05:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure configure: Always compile with -fwrapv 2018-02-25 23:17:41 -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: Rename cpu_resume_from_signal() to cpu_loop_exit_noexc() 2018-02-24 17:25:28 -05:00
cpu-exec.c cpu: atomically modify cpu->exit_request 2018-02-26 05:11:18 -05:00
cpus.c cpus: pass CPUState to run_on_cpu helpers 2018-02-26 04:54:55 -05:00
cputlb.c tcg: Merge GETPC and GETRA 2018-02-26 02:54:44 -05:00
exec.c exec: avoid realloc in phys_map_node_reserve 2018-02-25 19:32:40 -05:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c qapi: Fix memleak in string visitors on int lists 2018-02-25 00:20:34 -05:00
HACKING import 2015-08-21 15:04:50 +08:00
header_gen.py target-arm: Infrastucture changes to enable handling of tagged address loading into PC 2018-02-26 07:58:17 -05:00
ioport.c hw: remove pio_addr_t 2018-02-24 02:43:16 -05:00
LICENSE import 2015-08-21 15:04:50 +08:00
m68k.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
Makefile Makefile: Add a FORCE target 2018-02-24 17:03:51 -05:00
Makefile.objs util: Move qemu-log to utils 2018-02-25 22:17:44 -05:00
Makefile.target tcg: split tcg_op_defs to -common 2018-02-17 15:23:51 -05:00
memory.c memory: Don't use memcpy for ram_device regions 2018-02-25 23:06:36 -05:00
memory_mapping.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
mips.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
mips64.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
mips64el.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
mipsel.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
powerpc.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
qapi-schema.json qapi: Lazy creation of array types 2018-02-19 18:55:35 -05:00
qemu-timer.c timer/cpus: fix some typos and update some comments 2018-02-25 23:21:57 -05:00
rules.mak rules.mak: Don't extract libs from .mo-libs in link command 2018-02-26 02:08:03 -05:00
softmmu_template.h tcg: Merge GETPC and GETRA 2018-02-26 02:54:44 -05:00
sparc.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
sparc64.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00
tcg-runtime.c all: Clean up includes 2018-02-19 01:34:28 -05:00
translate-all.c tcg: Merge GETPC and GETRA 2018-02-26 02:54:44 -05:00
translate-all.h user-exec: Push resume-from-signal code out to handle_cpu_signal() 2018-02-24 17:21:06 -05:00
translate-common.c exec: Clean up includes 2018-02-19 00:49:55 -05:00
unicorn_common.h qom/cpu: Add MemoryRegion property 2018-02-18 21:54:50 -05:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c hw: explicitly include qemu/log.h 2018-02-24 02:00:45 -05:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h Introduce TCGOpcode for memory barrier 2018-02-26 03:02:41 -05:00