From owner-freebsd-hackers@FreeBSD.ORG Wed Dec 15 14:49:07 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2A79916A4CE for ; Wed, 15 Dec 2004 14:49:07 +0000 (GMT) Received: from wproxy.gmail.com (wproxy.gmail.com [64.233.184.199]) by mx1.FreeBSD.org (Postfix) with ESMTP id BEDB243D31 for ; Wed, 15 Dec 2004 14:49:06 +0000 (GMT) (envelope-from ravikrish@gmail.com) Received: by wproxy.gmail.com with SMTP id 69so213119wri for ; Wed, 15 Dec 2004 06:49:06 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:mime-version:content-type:content-transfer-encoding; b=UcRzkJaU73lZKoa4/BYYVaQ0T2Ssh0sdQLQOw397mUhzATs7yqJXT1zga02oOIIeXm+5EMoofSos86JbThnheXSaKQPO28qLhKAPNRpwGN5JsYwtchKrrC0P7DrrOOP/A627E10eGgr/ZBMkRijxbS3YYC9ZPcsWuzNE8pFXi+4= Received: by 10.54.45.21 with SMTP id s21mr1509268wrs; Wed, 15 Dec 2004 06:49:06 -0800 (PST) Received: by 10.54.6.31 with HTTP; Wed, 15 Dec 2004 06:49:05 -0800 (PST) Message-ID: <6669fd8604121506494c5afe65@mail.gmail.com> Date: Wed, 15 Dec 2004 20:19:05 +0530 From: Ravi Krishna To: freebsd-hackers@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: FreeBSD system call implementation X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Ravi Krishna List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Dec 2004 14:49:07 -0000 Hi ! I am new to bsd internals and was looking at the implementation of syscall in sys/i386/i386/trap.c here its seems we get the handler for the syscall by if (p->p_sysent->sv_mask) code &= p->p_sysent->sv_mask; if (code >= p->p_sysent->sv_size) callp = &p->p_sysent->sv_table[0]; else callp = &p->p_sysent->sv_table[code]; and call using if (error == 0) { td->td_retval[0] = 0; td->td_retval[1] = frame.tf_edx; STOPEVENT(p, S_SCE, narg); PTRACESTOP_SC(p, td, S_PT_SCE); error = (*callp->sy_call)(td, args); } My question is why we store the p->p_sysent->sv_table for each process. What is the reason for keeping this per process? Are there some situations where two processes can have different system calls available? Regards, Ravi