2002-12-16  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/unix/sysv/linux/i386/socket.S: Use CENABLE and CDISABLE
	macros instead of doing the calls directly.
	* sysdeps/unix/make-syscalls.sh: Add ptw-*.$o target name to rules.
	* Makerules ($(+sysdir_pfx)sysd-rules): Emit rules for ptw-%
	targets.

2002-12-16  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/i386/fpu/bits/mathinline.h: Backout last change.
	* sysdeps/ieee754/bits/nan.h: Likewise.

	* sysdeps/unix/sysv/linux/ia64/syscalls.list (__syscall_open,
	__syscall_wait4, __syscall_ioctl, __syscall_write): Add.
This commit is contained in:
Ulrich Drepper 2002-12-16 20:52:36 +00:00
parent e150fddc7c
commit 9634cf9d4f
40 changed files with 1364 additions and 2542 deletions

View File

@ -1,3 +1,19 @@
2002-12-16 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/i386/socket.S: Use CENABLE and CDISABLE
macros instead of doing the calls directly.
* sysdeps/unix/make-syscalls.sh: Add ptw-*.$o target name to rules.
* Makerules ($(+sysdir_pfx)sysd-rules): Emit rules for ptw-%
targets.
2002-12-16 Jakub Jelinek <jakub@redhat.com>
* sysdeps/i386/fpu/bits/mathinline.h: Backout last change.
* sysdeps/ieee754/bits/nan.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/syscalls.list (__syscall_open,
__syscall_wait4, __syscall_ioctl, __syscall_write): Add.
2002-12-16 Roland McGrath <roland@redhat.com>
* sunrpc/xdr_mem.c (xdrmem_inline): Fix argument type.

2544
Makerules

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,44 @@
2002-12-16 Jakub Jelinek <jakub@redhat.com>
* libc-cancellation.c: Guard both function with
#if !defined NOT_IN_libc.
* Makefile (libpthread-routines): Use ptw-, not pt- prefix for the
automatically provided pthread wrappers.
* pthreadP.h (LIBC_CANCEL_ASYNC, LIBC_CANCEL_RESET): Define to
CANCEL_* if IS_IN_libpthread and to dummy versions if not in libc
nor in libpthread.
* pt-open.c: Removed.
* pt-fcntl.c: Removed.
* pt-fsync.c: Removed.
* pt-lseek.c: Removed.
* pt-msgrcv.c: Removed.
* pt-msgsnd.c: Removed.
* pt-msync.c: Removed.
* pt-nanosleep.c: Removed.
* pt-open64.c: Removed.
* pt-pause.c: Removed.
* pt-pread.c: Removed.
* pt-pread64.c: Removed.
* pt-pwrite.c: Removed.
* pt-pwrite64.c: Removed.
* pt-read.c: Removed.
* pt-recv.c: Removed.
* pt-recvfrom.c: Removed.
* pt-recvmsg.c: Removed.
* pt-send.c: Removed.
* pt-sendto.c: Removed.
* pt-sigtimedwait.c: Removed.
* pt-sigwait.c: Removed.
* pt-wait.c: Removed.
* pt-waitpid.c: Removed.
* pt-write.c: Removed.
* pt-accept.c: Removed.
* pt-close.c: Removed.
* pt-connect.c: Removed.
* pt-lseek64.c: Removed.
* pt-sendmsg.c: Removed.
* pt-tcdrain.c: Removed.
2002-12-15 Ulrich Drepper <drepper@redhat.com>
* init.c (__pthread_initialize_minimal_internal): Renamed from

View File

@ -94,13 +94,14 @@ libpthread-routines = init events \
lowlevellock lowlevelmutex lowlevelcond lowlevelrwlock \
lowlevelsem \
pt-vfork \
pt-write pt-read pt-close pt-fcntl pt-accept pt-connect \
pt-recv pt-recvfrom pt-recvmsg pt-send pt-sendmsg \
pt-sendto pt-fsync pt-lseek pt-lseek64 pt-msync \
pt-nanosleep pt-open pt-open64 pt-pause pt-pread \
pt-pread64 pt-pwrite pt-pwrite64 pt-tcdrain pt-system \
pt-wait pt-waitpid pt-msgrcv pt-msgsnd pt-sigwait \
pt-raise \
ptw-write ptw-read ptw-close ptw-fcntl ptw-accept \
ptw-connect ptw-recv ptw-recvfrom ptw-recvmsg ptw-send \
ptw-sendmsg ptw-sendto ptw-fsync ptw-lseek ptw-llseek \
ptw-msync ptw-nanosleep ptw-open ptw-open64 ptw-pause \
ptw-pread ptw-pread64 ptw-pwrite ptw-pwrite64 \
ptw-tcdrain ptw-wait ptw-waitpid ptw-msgrcv ptw-msgsnd \
ptw-sigwait \
pt-raise pt-system \
flockfile ftrylockfile funlockfile \
sigaction \
herrno res pt-allocrtsig \

View File

@ -23,6 +23,8 @@
#include "atomic.h"
#if !defined NOT_IN_libc
/* The next two functions are similar to pthread_setcanceltype() but
more specialized for the use in the cancelable functions like write().
They do not need to check parameters etc. */
@ -82,3 +84,5 @@ __libc_disable_asynccancel (int oldtype)
break;
}
}
#endif

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
int
accept (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len)
{
int oldtype = CANCEL_ASYNC ();
int result = __libc_accept (fd, addr, addr_len);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,42 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
__close (int fd)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (close, 1, fd);
#else
int result = __libc_close (fd);
#endif
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__close, close)

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
int
__connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t addr_len)
{
int oldtype = CANCEL_ASYNC ();
int result = __libc_connect (fd, addr, addr_len);
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__connect, connect)

View File

@ -1,53 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
__fcntl (int fd, int cmd, ...)
{
int oldtype = 0;
va_list ap;
if (cmd == F_SETLKW)
oldtype = CANCEL_ASYNC ();
va_start (ap, cmd);
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (fcntl64, 3, fd, cmd, va_arg (ap, long int));
#else
int result = __libc_fcntl (fd, cmd, va_arg (ap, long int));
#endif
va_end (ap);
if (cmd == F_SETLKW)
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__fcntl, fcntl)

View File

@ -1,41 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
fsync (int fd)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (fsync, 1, fd);
#else
int result = __libc_fsync (fd);
#endif
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,42 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
off_t
__lseek (int fd, off_t offset, int whence)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
off_t result = INLINE_SYSCALL (lseek, 3, fd, offset, whence);
#else
off_t result = __libc_lseek (fd, offset, whence);
#endif
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__lseek, lseek)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
off64_t
lseek64 (int fd, off64_t offset, int whence)
{
int oldtype = CANCEL_ASYNC ();
off64_t result = __libc_lseek64 (fd, offset, whence);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/msg.h>
#include "pthreadP.h"
int
msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
{
int oldtype = CANCEL_ASYNC ();
int result = __libc_msgrcv (msqid, msgp, msgsz, msgtyp, msgflg);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,43 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/msg.h>
#include <ipc_priv.h>
#include "pthreadP.h"
int
msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
{
int oldtype = CANCEL_ASYNC ();
#if defined INLINE_SYSCALL && defined __NR_ipc
int result = INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz,
msgflg, (void *) msgp);
#else
int result = __libc_msgsnd (msqid, msgp, msgsz, msgflg);
#endif
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,41 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/mman.h>
#include "pthreadP.h"
int
msync (void *addr, size_t length, int flags)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (msync, 3, addr, length, flags);
#else
int result = __libc_msync (addr, length, flags);
#endif
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,42 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <time.h>
#include "pthreadP.h"
int
__nanosleep (const struct timespec *requested_time, struct timespec *remaining)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (nanosleep, 2, requested_time, remaining);
#else
int result = __libc_nanosleep (requested_time, remaining);
#endif
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__nanosleep, nanosleep)

View File

@ -1,51 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
__open (const char *pathname, int flags, ...)
{
va_list ap;
va_start (ap, flags);
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (open, 3, pathname, flags,
va_arg (ap, __typeof ((mode_t) 0 + 0)));
#else
int result = __libc_open (pathname, flags,
va_arg (ap, __typeof ((mode_t) 0 + 0)));
#endif
CANCEL_RESET (oldtype);
va_end (ap);
return result;
}
strong_alias (__open, open)

View File

@ -1,52 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
__open64 (const char *pathname, int flags, ...)
{
va_list ap;
va_start (ap, flags);
int oldtype = CANCEL_ASYNC ();
#if defined INLINE_SYSCALL && defined O_LARGEFILE
int result = INLINE_SYSCALL (open, 3, pathname, flags | O_LARGEFILE,
va_arg (ap, __typeof ((mode_t) 0 + 0)));
#else
int result = __libc_open64 (pathname, flags,
va_arg (ap, __typeof ((mode_t) 0 + 0)));
#endif
CANCEL_RESET (oldtype);
va_end (ap);
return result;
}
strong_alias (__open64, open64)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
int
pause (void)
{
int oldtype = CANCEL_ASYNC ();
int result = __libc_pause ();
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
pread (int fd, void *buf, size_t count, off_t offset)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_pread (fd, buf, count, offset);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
__pread64 (int fd, void *buf, size_t count, off64_t offset)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_pread64 (fd, buf, count, offset);
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__pread64, pread64)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
pwrite (int fd, const void *buf, size_t count, off_t offset)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_pwrite (fd, buf, count, offset);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
__pwrite64 (int fd, const void *buf, size_t count, off64_t offset)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_pwrite64 (fd, buf, count, offset);
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__pwrite64, pwrite64)

View File

@ -1,42 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
__read (int fd, void *buf, size_t count)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
ssize_t result = INLINE_SYSCALL (read, 3, fd, buf, count);
#else
ssize_t result = __libc_read (fd, buf, count);
#endif
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__read, read)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
recv (int fd, __ptr_t buf, size_t n, int flags)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_recv (fd, buf, n, flags);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
recvfrom (int fd, __ptr_t buf, size_t n, int flags, __SOCKADDR_ARG addr,
socklen_t *addr_len)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_recvfrom (fd, buf, n, flags, addr, addr_len);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
recvmsg (int fd, struct msghdr *message, int flags)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_recvmsg (fd, message, flags);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
__send (int fd, const __ptr_t buf, size_t n, int flags)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_send (fd, buf, n, flags);
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__send, send)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
sendmsg (int fd, const struct msghdr *message, int flags)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_sendmsg (fd, message, flags);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/socket.h>
#include "pthreadP.h"
ssize_t
sendto (int fd, const __ptr_t buf, size_t n, int flags,
__CONST_SOCKADDR_ARG addr, socklen_t addr_len)
{
int oldtype = CANCEL_ASYNC ();
ssize_t result = __libc_sendto (fd, buf, n, flags, addr, addr_len);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,43 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <sysdep.h>
#include "pthreadP.h"
int
sigtimedwait (const sigset_t *set, siginfo_t *info,
const struct timespec *timeout)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, timeout,
_NSIG / 8);
#else
int result = __sigtimedwait (set, info, timeout);
#endif
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,58 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#include <sysdep.h>
#include "pthreadP.h"
int
sigwait (const sigset_t *set, int *sig)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INTERNAL_SYSCALL
int result = INTERNAL_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL,
_NSIG / 8);
if (! INTERNAL_SYSCALL_ERROR_P (result))
{
*sig = result;
result = 0;
}
else
result = INTERNAL_SYSCALL_ERRNO (result);
#elif defined INLINE_SYSCALL
int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL, _NSIG / 8);
if (result != -1)
{
*sig = result;
result = 0;
}
else
result = errno;
#else
int result = __sigwait (set, sig);
#endif
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <termios.h>
#include "pthreadP.h"
int
tcdrain (int fd)
{
int oldtype = CANCEL_ASYNC ();
int result = __libc_tcdrain (fd);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,38 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/wait.h>
#include "pthreadP.h"
pid_t
__wait (__WAIT_STATUS_DEFN stat_loc)
{
int oldtype = CANCEL_ASYNC ();
pid_t result = __libc_wait (stat_loc);
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__wait, wait)

View File

@ -1,37 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <sys/wait.h>
#include "pthreadP.h"
pid_t
waitpid (pid_t pid, int *stat_loc, int options)
{
int oldtype = CANCEL_ASYNC ();
pid_t result = __libc_waitpid (pid, stat_loc, options);
CANCEL_RESET (oldtype);
return result;
}

View File

@ -1,42 +0,0 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <errno.h>
#include <stdlib.h>
#include <sysdep.h>
#include <unistd.h>
#include "pthreadP.h"
ssize_t
__write (int fd, const void *buf, size_t count)
{
int oldtype = CANCEL_ASYNC ();
#ifdef INLINE_SYSCALL
ssize_t result = INLINE_SYSCALL (write, 3, fd, buf, count);
#else
ssize_t result = __libc_write (fd, buf, count);
#endif
CANCEL_RESET (oldtype);
return result;
}
strong_alias (__write, write)

View File

@ -129,12 +129,20 @@ extern struct pthread_functions __libc_pthread_functions attribute_hidden;
#define CANCEL_RESET(oldtype) \
__pthread_disable_asynccancel (oldtype)
#if !defined NOT_IN_libc
/* Same as CANCEL_ASYNC, but for use in libc.so. */
#define LIBC_CANCEL_ASYNC() \
# define LIBC_CANCEL_ASYNC() \
__libc_enable_asynccancel ()
/* Same as CANCEL_RESET, but for use in libc.so. */
#define LIBC_CANCEL_RESET(oldtype) \
# define LIBC_CANCEL_RESET(oldtype) \
__libc_disable_asynccancel (oldtype)
#elif defined NOT_IN_libc && defined IS_IN_libpthread
# define LIBC_CANCEL_ASYNC() CANCEL_ASYNC ()
# define LIBC_CANCEL_RESET(val) CANCEL_RESET (val)
#else
# define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */
# define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */
#endif
/* This function is responsible for calling all registered cleanup

View File

@ -134,6 +134,7 @@ shared-only-routines += $file
*)
echo "\
\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o) \
\$(foreach o,\$(object-suffixes),\$(objpfx)ptw-$file\$o) \
\$(objpfx)rtld-$file.os: \\"
;;
esac

View File

@ -76,7 +76,7 @@ L(pseudo_end):
1: pushl %esi
/* Enable asynchronous cancellation. */
call __libc_enable_asynccancel /* No @plt */
CENABLE
movl %eax, %esi
/* Save registers. */
@ -93,7 +93,7 @@ L(pseudo_end):
/* Restore the cancellation. */
xchgl %esi, %eax
call __libc_disable_asynccancel /* No @plt */
CDISABLE
/* Restore registers. */
movl %esi, %eax

View File

@ -81,6 +81,10 @@ s_stat xstat stat i:sp __syscall_stat
s_lstat lxstat lstat i:sp __syscall_lstat
s_fstat fxstat fstat i:ip __syscall_fstat
s_sysctl sysctl _sysctl i:p __syscall__sysctl
s_open open open i:siv __syscall_open
s_wait4 wait4 wait4 i:iWiP __syscall_wait4
s_ioctl ioctl ioctl i:iiI __syscall_ioctl
s_write write write i:ibn __syscall_write
# IA-64 specific
getunwind EXTRA getunwind i:pi getunwind