From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1502 Path: news.gmane.org!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: Using unistd functions vs calling syscall straight in the code Date: Fri, 10 Aug 2012 16:59:23 +0200 Message-ID: <20120810145923.GB20243@port70.net> References: <20120810141613.GA20243@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: dough.gmane.org 1344610777 1007 80.91.229.3 (10 Aug 2012 14:59:37 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 10 Aug 2012 14:59:37 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1503-gllmg-musl=m.gmane.org@lists.openwall.com Fri Aug 10 16:59:37 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1SzqgZ-0003o1-Vz for gllmg-musl@plane.gmane.org; Fri, 10 Aug 2012 16:59:36 +0200 Original-Received: (qmail 11886 invoked by uid 550); 10 Aug 2012 14:59:35 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 11878 invoked from network); 10 Aug 2012 14:59:35 -0000 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:1502 Archived-At: * Murali Vijayaraghavan [2012-08-10 23:32:11 +0900]: > For example, I could have implemented src/stdio/__stdio_read.c using > src/unistd/readv.c's readv function instead of calling > syscall/syscall_cp(SYS_readv, ...) in lines 20 and 24. I believe unistd is > the POSIX compatibility layer (correct me if I am wrong). So shouldn't the > C standard library, namely stdio functions like scanf eventually use the > unistd functions instead of using the syscall directly? > that's not how it works, unistd is no more posix than stdio they are all part of the posix api stdio functions are also defined by the c standard so in this sense it's good that the stdio implementation does not depend on the larger posix api (it only depends on the syscall api) but yes otherwise stdio could use unistd functions and then it would be a bit slower (+1 call) and +1 symbol resolution during linking i guess > This would have made my job easier because I could have just modified this > POSIX compability layer instead of scanning through the C standard library > functions and changing them one by one. Remember I have multiple special you are not supposed to change the functions you only need to implement the syscalls and dummy out the ones you don't use (ie. have a large switch, with a defalut: return -ENOSYS;) if you modify the .c source files you are doing it wrong > instructions to perform each IO task instead of a single system call > instruction, since it's easier to implement hardware simulator that way - I > can get the function type simply by decoding the instruction rather than > reading some register. even if you have special instructions in your emulator i don't see why you cannot implement the syscall api (actually that seems simpler and more correct to me than putting random special instructions all over the place)