diff options
author | Will Newton <will.newton@linaro.org> | 2014-05-19 14:38:30 +0100 |
---|---|---|
committer | Will Newton <will.newton@linaro.org> | 2014-05-20 13:48:23 +0100 |
commit | a60339aaff82beadea6f580e587d64052cb5e3b8 (patch) | |
tree | e56bf2998936414815daef3ed7f5ab5861a6254b | |
parent | 7d05a8168b45c0580e1f9a79c2dd26c8f0d31fca (diff) | |
download | glibc-a60339aaff82beadea6f580e587d64052cb5e3b8.tar.gz |
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 <will.newton@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h (PSEUDO):
Test the return value of the system call in the nocancel case.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h | 1 |
2 files changed, 6 insertions, 0 deletions
@@ -1,4 +1,9 @@ 2014-05-20 Will Newton <will.newton@linaro.org> + + * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h (PSEUDO): + Test the return value of the system call in the nocancel case. + +2014-05-20 Will Newton <will.newton@linaro.org> Yvan Roux <yvan.roux@linaro.org> * sysdeps/unix/sysv/linux/aarch64/sys/user.h: Remove unused 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; \ |