unicorn/qemu
Peter Maydell 4abcf14b52
target/arm: Handle small regions in get_phys_addr_pmsav8()
Allow ARMv8M to handle small MPU and SAU region sizes, by making
get_phys_add_pmsav8() set the page size to the 1 if the MPU or
SAU region covers less than a TARGET_PAGE_SIZE.

We choose to use a size of 1 because it makes no difference to
the core code, and avoids having to track both the base and
limit for SAU and MPU and then convert into an artificially
restricted "page size" that the core code will then ignore.

Since the core TCG code can't handle execution from small
MPU regions, we strip the exec permission from them so that
any execution attempts will cause an MPU exception, rather
than allowing it to end up with a cpu_abort() in
get_page_addr_code().

(The previous code's intention was to make any small page be
treated as having no permissions, but unfortunately errors
in the implementation meant that it didn't behave that way.
It's possible that some binaries using small regions were
accidentally working with our old behaviour and won't now.)

We also retain an existing bug, where we ignored the possibility
that the SAU region might not cover the entire page, in the
case of executable regions. This is necessary because some
currently-working guest code images rely on being able to
execute from addresses which are covered by a page-sized
MPU region but a smaller SAU region. We can remove this
workaround if we ever support execution from small regions.

Backports commit 720424359917887c926a33d248131fbff84c9c28 from qemu
2018-07-03 00:55:37 -04:00
..
accel cpu-defs.h: Document CPUIOTLBEntry 'addr' field 2018-06-15 12:07:39 -04: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/softfloat: Define floatN_silence_nan in terms of parts_silence_nan 2018-05-20 00:13:42 -04:00
hw Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
include i386: Fix up the Node id for CPUID_8000_001E 2018-07-03 00:31:38 -04:00
qapi qobject: Modify qobject_ref() to return obj 2018-05-04 10:24:10 -04:00
qobject qobject: Modify qobject_ref() to return obj 2018-05-04 10:24:10 -04:00
qom qobject: Replace qobject_incref/QINCREF qobject_decref/QDECREF 2018-05-04 10:16:07 -04:00
scripts qapi: Open files with encoding='utf-8' 2018-07-02 23:01:31 -04:00
target target/arm: Handle small regions in get_phys_addr_pmsav8() 2018-07-03 00:55:37 -04:00
tcg tcg/i386: Use byte form of xgetbv instruction 2018-06-28 13:23:32 -05:00
util i386: Fix up the Node id for CPUID_8000_001E 2018-07-03 00:31:38 -04:00
aarch64.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
aarch64eb.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
accel.c clean-up: removed duplicate #includes 2018-02-28 08:51:56 -05:00
arm.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
armeb.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
CODING_STYLE import 2015-08-21 15:04:50 +08:00
configure Makefile: Rename TARGET_DIRS to TARGET_LIST 2018-06-08 19:22:45 -04:00
COPYING import 2015-08-21 15:04:50 +08:00
COPYING.LIB import 2015-08-21 15:04:50 +08:00
cpus.c Include qapi/error.h exactly where needed 2018-03-07 12:26:38 -05:00
exec.c exec.c: Use stn_p() and ldn_p() instead of explicit switches 2018-06-15 12:20:59 -04:00
gen_all_header.sh arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
glib_compat.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
HACKING HACKING: document preference for g_new instead of g_malloc 2018-05-22 00:30:50 -04:00
header_gen.py target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04: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 target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
Makefile Revert commit d4e5ec877ca 2018-07-02 23:03:11 -04:00
Makefile.objs qapi: Move qapi-schema.json to qapi/, rename generated files 2018-03-09 11:35:11 -05:00
Makefile.target tcg: remove softfloat from --disable-tcg builds 2018-06-07 11:49:35 -04:00
memory.c memory: Protect against use-after-free 2018-03-21 09:40:33 -04:00
memory_ldst.inc.c exec: Drop unnecessary code for unicorn 2018-03-12 10:11:46 -04:00
memory_mapping.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
mips.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
mips64.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
mips64el.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
mipsel.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
powerpc.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
qemu-timer.c timer/cpus: fix some typos and update some comments 2018-02-25 23:21:57 -05:00
rules.mak build-sys: silence make by default or V=0 2018-03-06 08:58:03 -05:00
sparc.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
sparc64.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00
unicorn_common.h cpu: Convert cpu_index into a bitmap 2018-03-21 08:06:07 -04:00
VERSION import 2015-08-21 15:04:50 +08:00
vl.c Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-20 14:20:30 -04:00
vl.h import 2015-08-21 15:04:50 +08:00
x86_64.h target/arm: Implement SVE Floating Point Arithmetic - Unpredicated Group 2018-06-15 14:10:16 -04:00