qemu-patch-raspberry4/linux-user
Michael Matz fa2ef212df target-arm: A64: support for ld/st/cl exclusive
This implement exclusive loads/stores for aarch64 along the lines of
arm32 and ppc implementations. The exclusive load remembers the address
and loaded value. The exclusive store throws an an exception which uses
those values to check for equality in a proper exclusive region.

This is not actually the architecture mandated semantics (for either
AArch32 or AArch64) but it is close enough for typical guest code
sequences to work correctly, and saves us from having to monitor all
guest stores. It's fairly easy to come up with test cases where we
don't behave like hardware - we don't for example model cache line
behaviour. However in the common patterns this works, and the existing
32 bit ARM exclusive access implementation has the same limitations.

AArch64 also implements new acquire/release loads/stores (which may be
either exclusive or non-exclusive). These imposes extra ordering
constraints on memory operations (ie they act as if they have an implicit
barrier built into them). As TCG is single-threaded all our barriers
are no-ops, so these just behave like normal loads and stores.

Signed-off-by: Michael Matz <matz@suse.de>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
2014-01-08 19:07:20 +00:00
..
aarch64 target-arm: Widen thread-local register state fields to 64 bits 2014-01-07 19:17:59 +00:00
alpha linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
arm target-arm: Widen thread-local register state fields to 64 bits 2014-01-07 19:17:59 +00:00
cris linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
i386 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
m68k linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
microblaze linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
mips linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
mips64 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
openrisc linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
ppc linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
s390x linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
sh4 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
sparc linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
sparc64 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
unicore32 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
x86_64 linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
cpu-uname.c linux-user: Don't treat AArch64 cpu names specially 2013-09-10 19:11:28 +01:00
cpu-uname.h linux-user: adapt uname machine to emulated CPU 2010-02-06 17:19:43 +01:00
elfload.c linux-user: Add AArch64 support 2013-09-10 19:11:29 +01:00
errno_defs.h Remove unnecessary trailing newlines 2008-12-13 09:32:43 +00:00
flat.h Support for 32 bit ABI on 64 bit targets (only enabled Sparc64) 2007-10-14 16:27:31 +00:00
flatload.c flatload: fix non-GOT relocations 2013-11-29 10:58:37 +02:00
ioctls.h linux-user: allow use of TIOCGSID 2013-09-24 10:47:07 +03:00
linux_loop.h Fix build failure with old kernel headers (loop.h is incompatible with 2008-05-23 16:06:43 +00:00
linuxload.c linux-user: add support of binfmt_misc 'O' flag 2013-09-24 10:47:07 +03:00
m68k-sim.c linux-user: Fix typo m86k -> m68k 2010-10-05 13:53:56 -05:00
main.c target-arm: A64: support for ld/st/cl exclusive 2014-01-08 19:07:20 +00:00
Makefile.objs build: move *-user/ objects to nested Makefile.objs 2012-06-07 07:17:33 +02:00
mmap.c configure: Make NPTL non-optional 2013-07-22 21:54:52 +03:00
qemu.h linux-user: create target_structs header to place ipc_perm and shmid_ds 2013-11-29 11:42:04 +02:00
signal.c target-arm: Clean up handling of AArch64 PSTATE 2013-12-17 19:42:30 +00:00
socket.h linux-user: improve target_to_host_sock_type conversion 2013-07-05 15:45:40 +03:00
strace.c linux-user: Don't omit comma for strace of rt_sigaction() 2013-04-05 14:40:54 +02:00
strace.list [v2] linux-user: implement m68k atomic syscalls 2013-09-24 10:47:07 +03:00
syscall.c linux-user: pass correct parameter to do_shmctl() 2013-11-29 11:42:14 +02:00
syscall_defs.h linux-user: Add target struct defs needed for POSIX timer syscalls. 2013-11-29 10:58:10 +02:00
syscall_types.h linux-user: Fix SNDCTL_DSP_MAP{IN, OUT}BUF ioctl definitions 2012-08-13 12:45:46 +01:00
target_flat.h linux-user/FLAT: allow targets to override FLAT processing 2011-02-09 10:33:54 +02:00
uaccess.c Fix missing strnlen problems 2009-07-01 18:24:44 +00:00
vm86.c linux-user: fix abi_(u)long, target_ulong mismatch 2011-10-27 14:42:16 +03:00