From a60339aaff82beadea6f580e587d64052cb5e3b8 Mon Sep 17 00:00:00 2001 From: Will Newton Date: Mon, 19 May 2014 14:38:30 +0100 Subject: AArch64: Fix handling of nocancel syscall failures The current code for nocancel syscalls does not do a comparison of the system call return value. This leads to code being generated where the b.cs follows the svc instruction directly without setting the flags on which the branch depends. ChangeLog: 2014-05-20 Will Newton * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h (PSEUDO): Test the return value of the system call in the nocancel case. --- sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h | 1 + 1 file changed, 1 insertion(+) (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h index f6903b5dd8..0e9bef3afc 100644 --- a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h @@ -32,6 +32,7 @@ __##syscall_name##_nocancel: \ cfi_startproc; \ DO_CALL (syscall_name, args); \ + cmn x0, 4095; \ PSEUDO_RET; \ cfi_endproc; \ .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ -- cgit 1.4.1