diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-01-12 19:29:11 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-01-12 19:29:11 +0000 |
commit | addb5f3176382693f987f0f44f3708f610d2e984 (patch) | |
tree | 7c1f62aba569850e1e15199b3e51573cf4759aeb /linuxthreads | |
parent | 76426e0247ecd09c574ac124d8c0329d3d6d0ff7 (diff) | |
download | glibc-addb5f3176382693f987f0f44f3708f610d2e984.tar glibc-addb5f3176382693f987f0f44f3708f610d2e984.tar.gz glibc-addb5f3176382693f987f0f44f3708f610d2e984.tar.bz2 glibc-addb5f3176382693f987f0f44f3708f610d2e984.zip |
Update.
2002-01-09 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Assume only
ret follows pseudo, and thus avoid branch-to-branch in cancel
case. Use SYSCALL_ERROR_LABEL.
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/ChangeLog | 6 | ||||
-rw-r--r-- | linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 15 |
2 files changed, 17 insertions, 4 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 5f0c1bfb2b..de0204dc80 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,9 @@ +2002-01-09 Richard Henderson <rth@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Assume only + ret follows pseudo, and thus avoid branch-to-branch in cancel + case. Use SYSCALL_ERROR_LABEL. + 2003-01-11 Philip Blundell <philb@gnu.org> * sysdeps/unix/sysv/linux/arm/vfork.S: New file. diff --git a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h index 18ea29c49f..083db2f39a 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h @@ -33,6 +33,9 @@ # define PSEUDO_PROF # endif +/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END + besides "ret". */ + # undef PSEUDO # define PSEUDO(name, syscall_name, args) \ .globl name; \ @@ -47,7 +50,7 @@ __LABEL(name) \ bne t0, $pseudo_cancel; \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ - bne a3, $syscall_error; \ + bne a3, SYSCALL_ERROR_LABEL; \ __LABEL($pseudo_ret) \ .subsection 2; \ __LABEL($pseudo_cancel) \ @@ -59,13 +62,17 @@ __LABEL($pseudo_cancel) \ lda v0, SYS_ify(syscall_name); \ call_pal PAL_callsys; \ stq v0, 8(sp); \ - stq a3, 16(sp); \ + bne a3, $multi_error; \ + CDISABLE; \ + ldq ra, 0(sp); \ + ldq v0, 8(sp); \ + addq sp, 64, sp; \ + ret; \ +__LABEL($multi_error) \ CDISABLE; \ ldq ra, 0(sp); \ ldq v0, 8(sp); \ - ldq a3, 16(sp); \ addq sp, 64, sp; \ - beq a3, $pseudo_ret; \ __LABEL($syscall_error) \ SYSCALL_ERROR_HANDLER; \ END(name); \ |