bin/120870: truss(1) shows 'pipe' system call as having 6 arguments when it only has one

Jaakko Heinonen jh at saunalahti.fi
Sat Feb 23 12:20:03 UTC 2008


The following reply was made to PR bin/120870; it has been noted by GNATS.

From: Jaakko Heinonen <jh at saunalahti.fi>
To: bug-followup at FreeBSD.org, yuri at tsoft.com
Cc: alfred at FreeBSD.org
Subject: Re: bin/120870: truss(1) shows 'pipe' system call as having 6
	arguments when it only has one
Date: Sat, 23 Feb 2008 14:12:23 +0200

 --BOKacYhQ+x31HxR3
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 
 Hi,
 
 The following patch fixes truss output for geteuid, getpid, getuid and
 pipe system calls for me. (Tested on i386 only.) The pipe case probably
 needs a better fix because the special case is handled only in
 i386-fbsd.c.
 
 (alfred@ cc'd because you are listed in src/MAINTAINERS for truss.)
 
 -- 
 Jaakko
 
 --BOKacYhQ+x31HxR3
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="truss-arguments.diff"
 
 Index: i386-fbsd.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.bin/truss/i386-fbsd.c,v
 retrieving revision 1.29
 diff -u -r1.29 i386-fbsd.c
 --- i386-fbsd.c	28 Jul 2007 23:15:04 -0000	1.29
 +++ i386-fbsd.c	23 Feb 2008 12:05:34 -0000
 @@ -309,10 +309,8 @@
    /*
     * The pipe syscall returns its fds in two registers and has assembly glue
     * to provide the libc API, so it cannot be handled like regular syscalls.
 -   * The nargs check is so we don't have to do yet another strcmp on every
 -   * syscall.
     */
 -  if (!errorp && fsc.nargs == 0 && fsc.name && strcmp(fsc.name, "pipe") == 0) {
 +  if (!errorp && fsc.name && strcmp(fsc.name, "pipe") == 0) {
        fsc.nargs = 1;
        fsc.s_args = malloc((1+fsc.nargs) * sizeof(char*));
        asprintf(&fsc.s_args[0], "[%d,%d]", (int)retval, regs.r_edx);
 Index: syscalls.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.bin/truss/syscalls.c,v
 retrieving revision 1.56
 diff -u -r1.56 syscalls.c
 --- syscalls.c	3 Jan 2008 00:18:03 -0000	1.56
 +++ syscalls.c	23 Feb 2008 12:05:35 -0000
 @@ -93,6 +93,12 @@
  struct syscall syscalls[] = {
  	{ "fcntl", 1, 3,
  	  { { Int, 0 } , { Fcntl, 1 }, { Fcntlflag | OUT, 2 }}},
 +	{ "geteuid", 1, 0,
 +	  { { None, 0 }}},
 +	{ "getpid", 1, 0,
 +	  { { None, 0 }}},
 +	{ "getuid", 1, 0,
 +	  { { None, 0 }}},
  	{ "readlink", 1, 3,
  	  { { Name, 0 } , { Readlinkres | OUT, 1 }, { Int, 2 }}},
  	{ "lseek", 2, 3,
 
 --BOKacYhQ+x31HxR3--


More information about the freebsd-bugs mailing list