qemu/linux-user/arm
Peter Maydell 3986a1721e linux-user/arm: Fix identification of syscall numbers
Our code to identify syscall numbers has some issues:
 * for Thumb mode, we never need the immediate value from the insn,
   but we always read it anyway
 * bad immediate values in the svc insn should cause a SIGILL, but we
   were abort()ing instead (via "goto error")

We can fix both these things by refactoring the code that identifies
the syscall number to more closely follow the kernel COMPAT_OABI code:
 * for Thumb it is always r7
 * for Arm, if the immediate value is 0, then this is an EABI call
   with the syscall number in r7
 * otherwise, we XOR the immediate value with 0x900000
   (ARM_SYSCALL_BASE for QEMU; __NR_OABI_SYSCALL_BASE in the kernel),
   which converts valid syscall immediates into the desired value,
   and puts all invalid immediates in the range 0x100000 or above
 * then we can just let the existing "value too large, deliver
   SIGILL" case handle invalid numbers, and drop the 'goto error'

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Message-id: 20200420212206.12776-5-peter.maydell@linaro.org
2020-05-21 20:00:18 +01:00
..
nwfpe linux-user/arm/nwfpe: Check coprocessor number for FPA emulation 2018-01-11 13:25:39 +00:00
cpu_loop.c linux-user/arm: Fix identification of syscall numbers 2020-05-21 20:00:18 +01:00
Makefile.objs linux-user, arm: add syscall table generation support 2020-03-20 16:02:00 +01:00
semihost.c semihosting: add qemu_semihosting_console_inc for SYS_READC 2020-01-09 11:41:29 +00:00
signal.c target/arm: Add isar_feature_aa32_vfp_simd 2020-02-28 16:14:57 +00:00
sockbits.h linux-user: move socket.h generic definitions to generic/sockbits.h 2018-05-25 10:10:55 +02:00
syscall.tbl linux-user: update syscall.tbl from linux 0bf999f9c5e7 2020-03-20 16:02:00 +01:00
syscallhdr.sh linux-user, arm: add syscall table generation support 2020-03-20 16:02:00 +01:00
target_cpu.h linux-user: Introduce cpu_clone_regs_parent 2019-11-06 13:43:25 +01:00
target_elf.h linux-user: Move CPU type name selection to a function 2018-02-25 17:27:41 +01:00
target_fcntl.h linux-user: move arm/aarch64/m68k fcntl definitions to [arm|aarch64|m68k]/target_fcntl.h 2018-06-04 01:30:44 +02:00
target_signal.h linux-user: move generic signal definitions to generic/signal.h 2018-06-04 01:30:44 +02:00
target_structs.h linux-user: remove useless padding in flock64 structure 2018-05-03 18:40:19 +02:00
target_syscall.h target/arm: remove run-time semihosting checks for linux-user 2019-09-27 11:41:32 +01:00
termbits.h Supply missing header guards 2019-06-12 13:20:21 +02:00