From owner-freebsd-questions@FreeBSD.ORG Thu Aug 2 21:26:50 2007 Return-Path: Delivered-To: questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9654716A41A for ; Thu, 2 Aug 2007 21:26:50 +0000 (UTC) (envelope-from jin@george.lbl.gov) Received: from smtp121.sbc.mail.sp1.yahoo.com (smtp121.sbc.mail.sp1.yahoo.com [69.147.64.94]) by mx1.freebsd.org (Postfix) with SMTP id 86F8513C47E for ; Thu, 2 Aug 2007 21:26:50 +0000 (UTC) (envelope-from jin@george.lbl.gov) Received: (qmail 53624 invoked from network); 2 Aug 2007 21:00:10 -0000 Received: from unknown (HELO ?192.168.1.238?) (jinmtb@sbcglobal.net@67.111.218.125 with plain) by smtp121.sbc.mail.sp1.yahoo.com with SMTP; 2 Aug 2007 21:00:10 -0000 X-YMail-OSG: bA74fIwVM1mKLd9sHPGsHGKHRgnwjGOfn4DzdPh8_At1ifTb0UmvlczMOweA1J9AdTrGwCMwNg-- Message-ID: <46B245D5.1050606@george.lbl.gov> Date: Thu, 02 Aug 2007 14:00:05 -0700 From: Jin Guojun User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.13) Gecko/20061027 X-Accept-Language: zh, zh-CN, en MIME-Version: 1.0 To: threads@freebsd.org, questions@freebsd.org Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Subject: how sys_select, sys_fork, ... are defined for thread libraries? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Aug 2007 21:26:50 -0000 I am trying to understand how these __sys_xxx functions are defined for thread libraries. Following string search tells that all thread libraries are using these __sys_xxx functions, for example, __sys_select(). However, the search also shows that these functions are not defined anywhere in the entire source tree. /usr/src: findstring sys_select "*.[hcS]" total files= 21687 : pattern= sys_select rootdir= /usr/src regular mode: Thu Aug 2 13:31:40 PDT 2007 ./lib/libc_r/uthread/uthread_fork.c 91: * __sys_select: ./lib/libpthread/thread/thr_private.h 1264:int __sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); ./lib/libpthread/thread/thr_select.c 61: ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout); ./lib/libthr/thread/thr_private.h 805:int __sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); ./lib/libthr/thread/thr_syscalls.c 435: ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout); By searching the usr/lib objects, I found them in libc, but they are not in libc source tree. Can someone shed some light on how these system calls are built into libc and what is the different between standard syscall APIs and these __sys_syscall APIs, e.g., __sys_read() vs. read(), etc. Thanks, -Jin nm /usr/lib/libc.a | grep __sys_ 00000008 T __sys_sigreturn 00000008 T __sys_setlogin 00000008 T __sys_reboot ... snapped 00000008 T __sys_kse_release 00000008 T __sys_kse_thr_interrupt 00000008 T __sys_kse_create 00000008 T __sys_kse_wakeup ... skipped 00000008 T __sys_getdtablesize 00000008 T __sys_select 00000008 T __sys_ioctl 00000008 T __sys_close 00000008 T __sys_write 00000008 T __sys_read 00000008 T __sys___syscall