This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] AArch64: Fix handling of nocancel syscall failures
- From: Will Newton <will dot newton at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Mon, 19 May 2014 15:53:54 +0100
- Subject: [PATCH] AArch64: Fix handling of nocancel syscall failures
- Authentication-results: sourceware.org; auth=none
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-19 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.
---
sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h | 1 +
1 file changed, 1 insertion(+)
Note that I suspect the reason I saw this issue was due to some change in
the way sysdep-cancel.h is getting included which may or may not be
correct.
diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
index f6903b5..0e9bef3 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; \
--
1.9.0