about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2014-08-03 16:14:35 +0000
committerMike Frysinger <vapier@gentoo.org>2014-08-04 10:05:51 -0400
commitb76ae12144e6949706ba7d9d50eef37c2198e933 (patch)
treeb376d129ff6a8650d0ff354fa7739512bfcb3e57
parent43a94c647d037b62b55a67f53304a2d3f9d7f66c (diff)
downloadglibc-b76ae12144e6949706ba7d9d50eef37c2198e933.tar.gz
glibc-b76ae12144e6949706ba7d9d50eef37c2198e933.tar.xz
glibc-b76ae12144e6949706ba7d9d50eef37c2198e933.zip
ia64: define nocancel entry points in PSEUDO
The previous set of not-cancel.h headers (prior to the commit
2fbdf5339aaeaa423bd661524f7ec7af41fa2606) did not require the
arch to define nocancel entry points, so ia64 never did.
However, after the various files were merged, it became a hard
requirement for arches which mean ia64 failed to build.

Here we add dedicated entry points.  It'd be nice to merge
with the existing stubs like other arches do, but the ia64
asm does not lend itself to interleaving of functions.  If
someone has a suggestion on merging these, that'd be great,
but at least now we build & pass tests again.
-rw-r--r--sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
index 5b08748949..c44c48460c 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
@@ -121,6 +121,25 @@ ENTRY (name)								      \
 (p6) br.cond.spnt.few __syscall_error;					      \
      ret;;								      \
      .endp name;							      \
+									      \
+      .proc __##syscall_name##_nocancel;				      \
+     .globl __##syscall_name##_nocancel;				      \
+__##syscall_name##_nocancel:						      \
+     .prologue;								      \
+     adds r2 = SYSINFO_OFFSET, r13;					      \
+     .save ar.pfs, r11;							      \
+     mov r11 = ar.pfs;;							      \
+     .body;								      \
+     ld8 r2 = [r2];							      \
+     mov r15 = SYS_ify(syscall_name);;					      \
+     mov b7 = r2;							      \
+     br.call.sptk.many b6 = b7;;					      \
+     mov ar.pfs = r11;							      \
+     cmp.eq p6,p0 = -1, r10;						      \
+(p6) br.cond.spnt.few __syscall_error;					      \
+     ret;;								      \
+     .endp __##syscall_name##_nocancel;					      \
+									      \
      .proc __GC_##name;							      \
      .globl __GC_##name;						      \
      .hidden __GC_##name;						      \