thr_syscalls.c revision 211522
1112918Sjeff/* 2144518Sdavidxu * Copyright (C) 2005 David Xu <davidxu@freebsd.org>. 3144518Sdavidxu * Copyright (c) 2003 Daniel Eischen <deischen@freebsd.org>. 4144518Sdavidxu * Copyright (C) 2000 Jason Evans <jasone@freebsd.org>. 5112918Sjeff * All rights reserved. 6112918Sjeff * 7112918Sjeff * Redistribution and use in source and binary forms, with or without 8112918Sjeff * modification, are permitted provided that the following conditions 9112918Sjeff * are met: 10112918Sjeff * 1. Redistributions of source code must retain the above copyright 11112918Sjeff * notice(s), this list of conditions and the following disclaimer as 12112918Sjeff * the first lines of this file unmodified other than the possible 13112918Sjeff * addition of one or more copyright notices. 14112918Sjeff * 2. Redistributions in binary form must reproduce the above copyright 15112918Sjeff * notice(s), this list of conditions and the following disclaimer in 16112918Sjeff * the documentation and/or other materials provided with the 17112918Sjeff * distribution. 18112918Sjeff * 19112918Sjeff * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 20112918Sjeff * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22112918Sjeff * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE 23112918Sjeff * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24112918Sjeff * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25112918Sjeff * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 26112918Sjeff * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27112918Sjeff * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 28112918Sjeff * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29112918Sjeff * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30112918Sjeff * 31112918Sjeff * $FreeBSD: head/lib/libthr/thread/thr_syscalls.c 211522 2010-08-20 04:15:05Z davidxu $ 32112918Sjeff */ 33112918Sjeff 34112918Sjeff/* 35112918Sjeff * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> 36112918Sjeff * All rights reserved. 37112918Sjeff * 38112918Sjeff * Redistribution and use in source and binary forms, with or without 39112918Sjeff * modification, are permitted provided that the following conditions 40112918Sjeff * are met: 41112918Sjeff * 1. Redistributions of source code must retain the above copyright 42112918Sjeff * notice, this list of conditions and the following disclaimer. 43112918Sjeff * 2. Redistributions in binary form must reproduce the above copyright 44112918Sjeff * notice, this list of conditions and the following disclaimer in the 45112918Sjeff * documentation and/or other materials provided with the distribution. 46165967Simp * 3. Neither the name of the author nor the names of any co-contributors 47112918Sjeff * may be used to endorse or promote products derived from this software 48112918Sjeff * without specific prior written permission. 49112918Sjeff * 50112918Sjeff * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND 51112918Sjeff * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52112918Sjeff * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 53112918Sjeff * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 54112918Sjeff * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 55112918Sjeff * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56112918Sjeff * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57112918Sjeff * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58112918Sjeff * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59112918Sjeff * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60112918Sjeff * SUCH DAMAGE. 61112918Sjeff * 62112918Sjeff */ 63112918Sjeff 64157457Sdavidxu#include "namespace.h" 65144518Sdavidxu#include <sys/types.h> 66112918Sjeff#include <sys/mman.h> 67112918Sjeff#include <sys/param.h> 68112918Sjeff#include <sys/select.h> 69144518Sdavidxu#include <sys/signalvar.h> 70135301Smtm#include <sys/socket.h> 71144518Sdavidxu#include <sys/stat.h> 72112918Sjeff#include <sys/time.h> 73112918Sjeff#include <sys/uio.h> 74112918Sjeff#include <sys/wait.h> 75112918Sjeff#include <aio.h> 76112918Sjeff#include <dirent.h> 77112918Sjeff#include <errno.h> 78112918Sjeff#include <fcntl.h> 79112918Sjeff#include <poll.h> 80112918Sjeff#include <signal.h> 81112918Sjeff#include <stdarg.h> 82112918Sjeff#include <stdio.h> 83112918Sjeff#include <stdlib.h> 84112918Sjeff#include <string.h> 85112918Sjeff#include <termios.h> 86112918Sjeff#include <unistd.h> 87144518Sdavidxu#include <pthread.h> 88157457Sdavidxu#include "un-namespace.h" 89112918Sjeff 90112918Sjeff#include "thr_private.h" 91112918Sjeff 92157457Sdavidxuextern int __creat(const char *, mode_t); 93157457Sdavidxuextern int __pselect(int, fd_set *, fd_set *, fd_set *, 94157457Sdavidxu const struct timespec *, const sigset_t *); 95157457Sdavidxuextern unsigned __sleep(unsigned int); 96157457Sdavidxuextern int __system(const char *); 97157457Sdavidxuextern int __tcdrain(int); 98157457Sdavidxuextern int __usleep(useconds_t); 99157457Sdavidxuextern pid_t __wait(int *); 100157457Sdavidxuextern pid_t __waitpid(pid_t, int *, int); 101157457Sdavidxuextern int __sys_aio_suspend(const struct aiocb * const[], int, 102157457Sdavidxu const struct timespec *); 103157457Sdavidxuextern int __sys_accept(int, struct sockaddr *, socklen_t *); 104157457Sdavidxuextern int __sys_connect(int, const struct sockaddr *, socklen_t); 105157457Sdavidxuextern int __sys_fsync(int); 106157457Sdavidxuextern int __sys_msync(void *, size_t, int); 107198508Skibextern int __sys_pselect(int, fd_set *, fd_set *, fd_set *, 108198508Skib const struct timespec *, const sigset_t *); 109157457Sdavidxuextern int __sys_poll(struct pollfd *, unsigned, int); 110157457Sdavidxuextern ssize_t __sys_recv(int, void *, size_t, int); 111157457Sdavidxuextern ssize_t __sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); 112157457Sdavidxuextern ssize_t __sys_recvmsg(int, struct msghdr *, int); 113157457Sdavidxuextern int __sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); 114157457Sdavidxuextern int __sys_sendfile(int, int, off_t, size_t, struct sf_hdtr *, 115157457Sdavidxu off_t *, int); 116157457Sdavidxuextern ssize_t __sys_sendmsg(int, const struct msghdr *, int); 117157457Sdavidxuextern ssize_t __sys_sendto(int, const void *,size_t, int, const struct sockaddr *, socklen_t); 118157457Sdavidxuextern ssize_t __sys_readv(int, const struct iovec *, int); 119157457Sdavidxuextern pid_t __sys_wait4(pid_t, int *, int, struct rusage *); 120157457Sdavidxuextern ssize_t __sys_writev(int, const struct iovec *, int); 121115260Smtm 122157457Sdavidxuint ___creat(const char *, mode_t); 123160662Sdavidxuint ___pselect(int, fd_set *, fd_set *, fd_set *, 124160662Sdavidxu const struct timespec *, const sigset_t *); 125160662Sdavidxuunsigned ___sleep(unsigned); 126160662Sdavidxuint ___system(const char *); 127160662Sdavidxuint ___tcdrain(int); 128160662Sdavidxuint ___usleep(useconds_t useconds); 129160662Sdavidxupid_t ___wait(int *); 130160662Sdavidxupid_t ___waitpid(pid_t, int *, int); 131157457Sdavidxuint __accept(int, struct sockaddr *, socklen_t *); 132160662Sdavidxuint __aio_suspend(const struct aiocb * const iocbs[], int, 133160662Sdavidxu const struct timespec *); 134157457Sdavidxuint __close(int); 135157457Sdavidxuint __connect(int, const struct sockaddr *, socklen_t); 136157457Sdavidxuint __fcntl(int, int,...); 137189549Sdavidxu#ifdef SYSCALL_COMPAT 138179434Sdfrextern int __fcntl_compat(int, int,...); 139189549Sdavidxu#endif 140157457Sdavidxuint __fsync(int); 141157457Sdavidxuint __msync(void *, size_t, int); 142157457Sdavidxuint __nanosleep(const struct timespec *, struct timespec *); 143157457Sdavidxuint __open(const char *, int,...); 144197968Sjillesint __openat(int, const char *, int,...); 145157457Sdavidxuint __poll(struct pollfd *, unsigned int, int); 146157457Sdavidxussize_t __read(int, void *buf, size_t); 147157457Sdavidxussize_t __readv(int, const struct iovec *, int); 148157457Sdavidxussize_t __recvfrom(int, void *, size_t, int f, struct sockaddr *, socklen_t *); 149157457Sdavidxussize_t __recvmsg(int, struct msghdr *, int); 150157457Sdavidxuint __select(int, fd_set *, fd_set *, fd_set *, struct timeval *); 151157457Sdavidxussize_t __sendmsg(int, const struct msghdr *, int); 152157457Sdavidxussize_t __sendto(int, const void *, size_t, int, 153157457Sdavidxu const struct sockaddr *, socklen_t); 154160662Sdavidxupid_t __wait3(int *, int, struct rusage *); 155157457Sdavidxupid_t __wait4(pid_t, int *, int, struct rusage *); 156157457Sdavidxussize_t __write(int, const void *, size_t); 157157457Sdavidxussize_t __writev(int, const struct iovec *, int); 158157457Sdavidxu 159144518Sdavidxu__weak_reference(__accept, accept); 160157457Sdavidxu 161135301Smtmint 162144518Sdavidxu__accept(int s, struct sockaddr *addr, socklen_t *addrlen) 163135301Smtm{ 164144518Sdavidxu struct pthread *curthread; 165135301Smtm int ret; 166135301Smtm 167144518Sdavidxu curthread = _get_curthread(); 168164583Sdavidxu _thr_cancel_enter(curthread); 169135301Smtm ret = __sys_accept(s, addr, addrlen); 170164583Sdavidxu _thr_cancel_leave(curthread); 171144518Sdavidxu 172144518Sdavidxu return (ret); 173135301Smtm} 174135301Smtm 175160662Sdavidxu__weak_reference(__aio_suspend, aio_suspend); 176112918Sjeff 177112918Sjeffint 178160662Sdavidxu__aio_suspend(const struct aiocb * const iocbs[], int niocb, const struct 179112918Sjeff timespec *timeout) 180112918Sjeff{ 181144518Sdavidxu struct pthread *curthread = _get_curthread(); 182144518Sdavidxu int ret; 183112918Sjeff 184164583Sdavidxu _thr_cancel_enter(curthread); 185112918Sjeff ret = __sys_aio_suspend(iocbs, niocb, timeout); 186164583Sdavidxu _thr_cancel_leave(curthread); 187112918Sjeff 188144518Sdavidxu return (ret); 189112918Sjeff} 190112918Sjeff 191144518Sdavidxu__weak_reference(__close, close); 192112918Sjeff 193112918Sjeffint 194144518Sdavidxu__close(int fd) 195112918Sjeff{ 196144518Sdavidxu struct pthread *curthread = _get_curthread(); 197112918Sjeff int ret; 198112918Sjeff 199164583Sdavidxu _thr_cancel_enter(curthread); 200112918Sjeff ret = __sys_close(fd); 201164583Sdavidxu _thr_cancel_leave(curthread); 202112918Sjeff 203144518Sdavidxu return (ret); 204112918Sjeff} 205135301Smtm 206144518Sdavidxu__weak_reference(__connect, connect); 207135301Smtm 208135301Smtmint 209144518Sdavidxu__connect(int fd, const struct sockaddr *name, socklen_t namelen) 210135301Smtm{ 211144518Sdavidxu struct pthread *curthread = _get_curthread(); 212135301Smtm int ret; 213135301Smtm 214164583Sdavidxu _thr_cancel_enter(curthread); 215144518Sdavidxu ret = __sys_connect(fd, name, namelen); 216164583Sdavidxu _thr_cancel_leave(curthread); 217144518Sdavidxu 218144518Sdavidxu return (ret); 219135301Smtm} 220112918Sjeff 221144518Sdavidxu__weak_reference(___creat, creat); 222144518Sdavidxu 223112918Sjeffint 224144518Sdavidxu___creat(const char *path, mode_t mode) 225112918Sjeff{ 226144518Sdavidxu struct pthread *curthread = _get_curthread(); 227144518Sdavidxu int ret; 228112918Sjeff 229164583Sdavidxu _thr_cancel_enter(curthread); 230112918Sjeff ret = __creat(path, mode); 231164583Sdavidxu _thr_cancel_leave(curthread); 232112918Sjeff 233112918Sjeff return ret; 234112918Sjeff} 235112918Sjeff 236144518Sdavidxu__weak_reference(__fcntl, fcntl); 237112918Sjeff 238112918Sjeffint 239144518Sdavidxu__fcntl(int fd, int cmd,...) 240112918Sjeff{ 241144518Sdavidxu struct pthread *curthread = _get_curthread(); 242112918Sjeff int ret; 243112918Sjeff va_list ap; 244112918Sjeff 245112918Sjeff va_start(ap, cmd); 246112918Sjeff switch (cmd) { 247144518Sdavidxu case F_DUPFD: 248144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 249144518Sdavidxu break; 250144518Sdavidxu case F_SETFD: 251144518Sdavidxu case F_SETFL: 252144518Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, int)); 253144518Sdavidxu break; 254144518Sdavidxu case F_GETFD: 255144518Sdavidxu case F_GETFL: 256144518Sdavidxu ret = __sys_fcntl(fd, cmd); 257144518Sdavidxu break; 258211522Sdavidxu 259211522Sdavidxu case F_OSETLKW: 260211522Sdavidxu case F_SETLKW: 261211522Sdavidxu _thr_cancel_enter(curthread); 262211522Sdavidxu#ifdef SYSCALL_COMPAT 263211522Sdavidxu ret = __fcntl_compat(fd, cmd, va_arg(ap, void *)); 264211522Sdavidxu#else 265211522Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, void *)); 266211522Sdavidxu#endif 267211522Sdavidxu _thr_cancel_leave(curthread); 268211522Sdavidxu break; 269144518Sdavidxu default: 270189549Sdavidxu#ifdef SYSCALL_COMPAT 271179434Sdfr ret = __fcntl_compat(fd, cmd, va_arg(ap, void *)); 272189549Sdavidxu#else 273189553Sdavidxu ret = __sys_fcntl(fd, cmd, va_arg(ap, void *)); 274189549Sdavidxu#endif 275112918Sjeff } 276112918Sjeff va_end(ap); 277112918Sjeff 278144518Sdavidxu return (ret); 279112918Sjeff} 280112918Sjeff 281144518Sdavidxu__weak_reference(__fsync, fsync); 282131181Smtm 283131181Smtmint 284144518Sdavidxu__fsync(int fd) 285131181Smtm{ 286144518Sdavidxu struct pthread *curthread = _get_curthread(); 287131181Smtm int ret; 288131181Smtm 289164583Sdavidxu _thr_cancel_enter(curthread); 290112918Sjeff ret = __sys_fsync(fd); 291164583Sdavidxu _thr_cancel_leave(curthread); 292112918Sjeff 293144518Sdavidxu return (ret); 294112918Sjeff} 295112918Sjeff 296144518Sdavidxu__weak_reference(__msync, msync); 297135301Smtm 298135301Smtmint 299144518Sdavidxu__msync(void *addr, size_t len, int flags) 300135301Smtm{ 301144518Sdavidxu struct pthread *curthread = _get_curthread(); 302112918Sjeff int ret; 303112918Sjeff 304164583Sdavidxu _thr_cancel_enter(curthread); 305112918Sjeff ret = __sys_msync(addr, len, flags); 306164583Sdavidxu _thr_cancel_leave(curthread); 307112918Sjeff 308112918Sjeff return ret; 309112918Sjeff} 310112918Sjeff 311144518Sdavidxu__weak_reference(__nanosleep, nanosleep); 312112918Sjeff 313112918Sjeffint 314144518Sdavidxu__nanosleep(const struct timespec *time_to_sleep, 315144518Sdavidxu struct timespec *time_remaining) 316112918Sjeff{ 317144518Sdavidxu struct pthread *curthread = _get_curthread(); 318144518Sdavidxu int ret; 319112918Sjeff 320164583Sdavidxu _thr_cancel_enter(curthread); 321112918Sjeff ret = __sys_nanosleep(time_to_sleep, time_remaining); 322164583Sdavidxu _thr_cancel_leave(curthread); 323112918Sjeff 324144518Sdavidxu return (ret); 325112918Sjeff} 326112918Sjeff 327144518Sdavidxu__weak_reference(__open, open); 328112918Sjeff 329112918Sjeffint 330144518Sdavidxu__open(const char *path, int flags,...) 331112918Sjeff{ 332144518Sdavidxu struct pthread *curthread = _get_curthread(); 333112918Sjeff int ret; 334112918Sjeff int mode = 0; 335112918Sjeff va_list ap; 336112918Sjeff 337164583Sdavidxu _thr_cancel_enter(curthread); 338112918Sjeff 339112918Sjeff /* Check if the file is being created: */ 340112918Sjeff if (flags & O_CREAT) { 341112918Sjeff /* Get the creation mode: */ 342112918Sjeff va_start(ap, flags); 343112918Sjeff mode = va_arg(ap, int); 344112918Sjeff va_end(ap); 345112918Sjeff } 346112918Sjeff 347112918Sjeff ret = __sys_open(path, flags, mode); 348112918Sjeff 349164583Sdavidxu _thr_cancel_leave(curthread); 350144518Sdavidxu 351112918Sjeff return ret; 352112918Sjeff} 353112918Sjeff 354197968Sjilles__weak_reference(__openat, openat); 355197968Sjilles 356197968Sjillesint 357197968Sjilles__openat(int fd, const char *path, int flags, ...) 358197968Sjilles{ 359197968Sjilles struct pthread *curthread = _get_curthread(); 360197968Sjilles int ret; 361197968Sjilles int mode = 0; 362197968Sjilles va_list ap; 363197968Sjilles 364197968Sjilles _thr_cancel_enter(curthread); 365197968Sjilles 366197968Sjilles /* Check if the file is being created: */ 367197968Sjilles if (flags & O_CREAT) { 368197968Sjilles /* Get the creation mode: */ 369197968Sjilles va_start(ap, flags); 370197968Sjilles mode = va_arg(ap, int); 371197968Sjilles va_end(ap); 372197968Sjilles } 373197968Sjilles 374197968Sjilles ret = __sys_openat(fd, path, flags, mode); 375197968Sjilles 376197968Sjilles _thr_cancel_leave(curthread); 377197968Sjilles 378197968Sjilles return ret; 379197968Sjilles} 380197968Sjilles 381144518Sdavidxu__weak_reference(__poll, poll); 382112918Sjeff 383112918Sjeffint 384144518Sdavidxu__poll(struct pollfd *fds, unsigned int nfds, int timeout) 385112918Sjeff{ 386144518Sdavidxu struct pthread *curthread = _get_curthread(); 387112918Sjeff int ret; 388112918Sjeff 389164583Sdavidxu _thr_cancel_enter(curthread); 390112918Sjeff ret = __sys_poll(fds, nfds, timeout); 391164583Sdavidxu _thr_cancel_leave(curthread); 392112918Sjeff 393112918Sjeff return ret; 394112918Sjeff} 395112918Sjeff 396160662Sdavidxu__weak_reference(___pselect, pselect); 397135301Smtm 398112918Sjeffint 399160662Sdavidxu___pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds, 400112918Sjeff const struct timespec *timo, const sigset_t *mask) 401112918Sjeff{ 402144518Sdavidxu struct pthread *curthread = _get_curthread(); 403112918Sjeff int ret; 404112918Sjeff 405164583Sdavidxu _thr_cancel_enter(curthread); 406198508Skib ret = __sys_pselect(count, rfds, wfds, efds, timo, mask); 407164583Sdavidxu _thr_cancel_leave(curthread); 408112918Sjeff 409112918Sjeff return (ret); 410112918Sjeff} 411112918Sjeff 412144518Sdavidxu__weak_reference(__read, read); 413112918Sjeff 414112918Sjeffssize_t 415144518Sdavidxu__read(int fd, void *buf, size_t nbytes) 416112918Sjeff{ 417144518Sdavidxu struct pthread *curthread = _get_curthread(); 418112918Sjeff ssize_t ret; 419112918Sjeff 420164583Sdavidxu _thr_cancel_enter(curthread); 421112918Sjeff ret = __sys_read(fd, buf, nbytes); 422164583Sdavidxu _thr_cancel_leave(curthread); 423112918Sjeff 424112918Sjeff return ret; 425112918Sjeff} 426112918Sjeff 427144518Sdavidxu__weak_reference(__readv, readv); 428112918Sjeff 429112918Sjeffssize_t 430144518Sdavidxu__readv(int fd, const struct iovec *iov, int iovcnt) 431112918Sjeff{ 432144518Sdavidxu struct pthread *curthread = _get_curthread(); 433112918Sjeff ssize_t ret; 434112918Sjeff 435164583Sdavidxu _thr_cancel_enter(curthread); 436112918Sjeff ret = __sys_readv(fd, iov, iovcnt); 437164583Sdavidxu _thr_cancel_leave(curthread); 438112918Sjeff 439112918Sjeff return ret; 440112918Sjeff} 441112918Sjeff 442144518Sdavidxu__weak_reference(__recvfrom, recvfrom); 443135301Smtm 444135301Smtmssize_t 445144518Sdavidxu__recvfrom(int s, void *b, size_t l, int f, struct sockaddr *from, 446135301Smtm socklen_t *fl) 447135301Smtm{ 448144518Sdavidxu struct pthread *curthread = _get_curthread(); 449135301Smtm ssize_t ret; 450135301Smtm 451164583Sdavidxu _thr_cancel_enter(curthread); 452135301Smtm ret = __sys_recvfrom(s, b, l, f, from, fl); 453164583Sdavidxu _thr_cancel_leave(curthread); 454135301Smtm return (ret); 455135301Smtm} 456135301Smtm 457144518Sdavidxu__weak_reference(__recvmsg, recvmsg); 458135301Smtm 459135301Smtmssize_t 460144518Sdavidxu__recvmsg(int s, struct msghdr *m, int f) 461135301Smtm{ 462144518Sdavidxu struct pthread *curthread = _get_curthread(); 463135301Smtm ssize_t ret; 464135301Smtm 465164583Sdavidxu _thr_cancel_enter(curthread); 466135301Smtm ret = __sys_recvmsg(s, m, f); 467164583Sdavidxu _thr_cancel_leave(curthread); 468135301Smtm return (ret); 469135301Smtm} 470135301Smtm 471144518Sdavidxu__weak_reference(__select, select); 472112918Sjeff 473112918Sjeffint 474144518Sdavidxu__select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, 475112918Sjeff struct timeval *timeout) 476112918Sjeff{ 477144518Sdavidxu struct pthread *curthread = _get_curthread(); 478112918Sjeff int ret; 479112918Sjeff 480164583Sdavidxu _thr_cancel_enter(curthread); 481112918Sjeff ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout); 482164583Sdavidxu _thr_cancel_leave(curthread); 483112918Sjeff return ret; 484112918Sjeff} 485112918Sjeff 486144518Sdavidxu__weak_reference(__sendmsg, sendmsg); 487135301Smtm 488135301Smtmssize_t 489144518Sdavidxu__sendmsg(int s, const struct msghdr *m, int f) 490135301Smtm{ 491144518Sdavidxu struct pthread *curthread = _get_curthread(); 492135301Smtm ssize_t ret; 493135301Smtm 494164583Sdavidxu _thr_cancel_enter(curthread); 495135301Smtm ret = __sys_sendmsg(s, m, f); 496164583Sdavidxu _thr_cancel_leave(curthread); 497135301Smtm return (ret); 498135301Smtm} 499135301Smtm 500144518Sdavidxu__weak_reference(__sendto, sendto); 501135301Smtm 502135301Smtmssize_t 503144518Sdavidxu__sendto(int s, const void *m, size_t l, int f, const struct sockaddr *t, 504135301Smtm socklen_t tl) 505135301Smtm{ 506144518Sdavidxu struct pthread *curthread = _get_curthread(); 507135301Smtm ssize_t ret; 508135301Smtm 509164583Sdavidxu _thr_cancel_enter(curthread); 510135301Smtm ret = __sys_sendto(s, m, l, f, t, tl); 511164583Sdavidxu _thr_cancel_leave(curthread); 512135301Smtm return (ret); 513135301Smtm} 514135301Smtm 515160662Sdavidxu__weak_reference(___sleep, sleep); 516148658Sdeischen 517112918Sjeffunsigned int 518160662Sdavidxu___sleep(unsigned int seconds) 519112918Sjeff{ 520144518Sdavidxu struct pthread *curthread = _get_curthread(); 521112918Sjeff unsigned int ret; 522112918Sjeff 523164583Sdavidxu _thr_cancel_enter(curthread); 524112918Sjeff ret = __sleep(seconds); 525164583Sdavidxu _thr_cancel_leave(curthread); 526112918Sjeff 527144518Sdavidxu return (ret); 528112918Sjeff} 529112918Sjeff 530160662Sdavidxu__weak_reference(___system, system); 531112918Sjeff 532112918Sjeffint 533160662Sdavidxu___system(const char *string) 534112918Sjeff{ 535144518Sdavidxu struct pthread *curthread = _get_curthread(); 536112918Sjeff int ret; 537112918Sjeff 538164583Sdavidxu _thr_cancel_enter(curthread); 539112918Sjeff ret = __system(string); 540164583Sdavidxu _thr_cancel_leave(curthread); 541112918Sjeff 542112918Sjeff return ret; 543112918Sjeff} 544112918Sjeff 545160662Sdavidxu__weak_reference(___tcdrain, tcdrain); 546112918Sjeff 547112918Sjeffint 548160662Sdavidxu___tcdrain(int fd) 549112918Sjeff{ 550144518Sdavidxu struct pthread *curthread = _get_curthread(); 551112918Sjeff int ret; 552112918Sjeff 553164583Sdavidxu _thr_cancel_enter(curthread); 554112918Sjeff ret = __tcdrain(fd); 555164583Sdavidxu _thr_cancel_leave(curthread); 556112918Sjeff 557144518Sdavidxu return (ret); 558112918Sjeff} 559112918Sjeff 560160662Sdavidxu__weak_reference(___usleep, usleep); 561148658Sdeischen 562148658Sdeischenint 563160662Sdavidxu___usleep(useconds_t useconds) 564148658Sdeischen{ 565148658Sdeischen struct pthread *curthread = _get_curthread(); 566148658Sdeischen int ret; 567148658Sdeischen 568164583Sdavidxu _thr_cancel_enter(curthread); 569148658Sdeischen ret = __usleep(useconds); 570164583Sdavidxu _thr_cancel_leave(curthread); 571148658Sdeischen 572148658Sdeischen return (ret); 573148658Sdeischen} 574148658Sdeischen 575160662Sdavidxu__weak_reference(___wait, wait); 576112918Sjeff 577112918Sjeffpid_t 578160662Sdavidxu___wait(int *istat) 579112918Sjeff{ 580144518Sdavidxu struct pthread *curthread = _get_curthread(); 581112918Sjeff pid_t ret; 582112918Sjeff 583164583Sdavidxu _thr_cancel_enter(curthread); 584112918Sjeff ret = __wait(istat); 585164583Sdavidxu _thr_cancel_leave(curthread); 586112918Sjeff 587112918Sjeff return ret; 588112918Sjeff} 589112918Sjeff 590160662Sdavidxu__weak_reference(__wait3, wait3); 591160662Sdavidxu 592160662Sdavidxupid_t 593160662Sdavidxu__wait3(int *status, int options, struct rusage *rusage) 594160662Sdavidxu{ 595160662Sdavidxu struct pthread *curthread = _get_curthread(); 596160662Sdavidxu pid_t ret; 597160662Sdavidxu 598164583Sdavidxu _thr_cancel_enter(curthread); 599160662Sdavidxu ret = _wait4(WAIT_ANY, status, options, rusage); 600164583Sdavidxu _thr_cancel_leave(curthread); 601160662Sdavidxu 602160662Sdavidxu return (ret); 603160662Sdavidxu} 604160662Sdavidxu 605144518Sdavidxu__weak_reference(__wait4, wait4); 606112918Sjeff 607112918Sjeffpid_t 608160662Sdavidxu__wait4(pid_t pid, int *status, int options, struct rusage *rusage) 609112918Sjeff{ 610144518Sdavidxu struct pthread *curthread = _get_curthread(); 611112918Sjeff pid_t ret; 612112918Sjeff 613164583Sdavidxu _thr_cancel_enter(curthread); 614160662Sdavidxu ret = __sys_wait4(pid, status, options, rusage); 615164583Sdavidxu _thr_cancel_leave(curthread); 616112918Sjeff 617112918Sjeff return ret; 618112918Sjeff} 619112918Sjeff 620160662Sdavidxu__weak_reference(___waitpid, waitpid); 621112918Sjeff 622112918Sjeffpid_t 623160662Sdavidxu___waitpid(pid_t wpid, int *status, int options) 624112918Sjeff{ 625144518Sdavidxu struct pthread *curthread = _get_curthread(); 626112918Sjeff pid_t ret; 627112918Sjeff 628164583Sdavidxu _thr_cancel_enter(curthread); 629112918Sjeff ret = __waitpid(wpid, status, options); 630164583Sdavidxu _thr_cancel_leave(curthread); 631112918Sjeff 632112918Sjeff return ret; 633112918Sjeff} 634112918Sjeff 635144518Sdavidxu__weak_reference(__write, write); 636112918Sjeff 637112918Sjeffssize_t 638144518Sdavidxu__write(int fd, const void *buf, size_t nbytes) 639112918Sjeff{ 640144518Sdavidxu struct pthread *curthread = _get_curthread(); 641112918Sjeff ssize_t ret; 642112918Sjeff 643164583Sdavidxu _thr_cancel_enter(curthread); 644112918Sjeff ret = __sys_write(fd, buf, nbytes); 645164583Sdavidxu _thr_cancel_leave(curthread); 646112918Sjeff 647112918Sjeff return ret; 648112918Sjeff} 649112918Sjeff 650144518Sdavidxu__weak_reference(__writev, writev); 651112918Sjeff 652112918Sjeffssize_t 653144518Sdavidxu__writev(int fd, const struct iovec *iov, int iovcnt) 654112918Sjeff{ 655144518Sdavidxu struct pthread *curthread = _get_curthread(); 656112918Sjeff ssize_t ret; 657112918Sjeff 658164583Sdavidxu _thr_cancel_enter(curthread); 659112918Sjeff ret = __sys_writev(fd, iov, iovcnt); 660164583Sdavidxu _thr_cancel_leave(curthread); 661112918Sjeff 662112918Sjeff return ret; 663112918Sjeff} 664