From 7a28f7f128fcca6ef0010b98cb21adcf8c3b8ae1 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 3 Mar 2014 23:45:26 +0000 Subject: aarch64: fix decoding of arm syscall numbers If an aarch64 strace is tracing a process using the arm personality, it also needs to call the shuffle_scno function for the ARM-specific syscalls. * syscall.c (shuffle_scno): Define on AARCH64. (get_scno) [AARCH64]: Call shuffle_scno when the tracee is in 32-bit mode. Signed-off-by: Elliott Hughes --- syscall.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syscall.c b/syscall.c index a0cc312..5c4b42e 100644 --- a/syscall.c +++ b/syscall.c @@ -926,7 +926,7 @@ print_pc(struct tcb *tcp) /* Shuffle syscall numbers so that we don't have huge gaps in syscall table. * The shuffling should be reversible: shuffle_scno(shuffle_scno(n)) == n. */ -#if defined(ARM) /* So far only ARM needs this */ +#if defined(ARM) || defined(AARCH64) /* So far only 32-bit ARM needs this */ static long shuffle_scno(unsigned long scno) { @@ -1347,6 +1347,7 @@ get_scno(struct tcb *tcp) /* We are in 32-bit mode */ /* Note: we don't support OABI, unlike 32-bit ARM build */ scno = arm_regs.ARM_r7; + scno = shuffle_scno(scno); update_personality(tcp, 0); break; } -- cgit v1.2.3