From owner-freebsd-bugs@FreeBSD.ORG Wed Mar 8 16:00:30 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6151616A420 for ; Wed, 8 Mar 2006 16:00:30 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id E77EC43D48 for ; Wed, 8 Mar 2006 16:00:29 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k28G0T10036981 for ; Wed, 8 Mar 2006 16:00:29 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k28G0TA7036978; Wed, 8 Mar 2006 16:00:29 GMT (envelope-from gnats) Resent-Date: Wed, 8 Mar 2006 16:00:29 GMT Resent-Message-Id: <200603081600.k28G0TA7036978@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Stanislav Sedov Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D8DD916A420 for ; Wed, 8 Mar 2006 15:58:28 +0000 (GMT) (envelope-from ssedov@mbsd.msk.ru) Received: from com0.310.ru (com1.ht-systems.ru [83.97.104.204]) by mx1.FreeBSD.org (Postfix) with ESMTP id 118EC43D72 for ; Wed, 8 Mar 2006 15:58:25 +0000 (GMT) (envelope-from ssedov@mbsd.msk.ru) Received: from [213.87.86.107] (helo=fonon.realnet) by com0.310.ru with esmtpa (Exim 4.60) (envelope-from ) id 1FH16J-000238-L5 for FreeBSD-gnats-submit@freebsd.org; Wed, 08 Mar 2006 19:01:25 +0300 Message-Id: <20060308155837.GA1762@fonon.realnet> Date: Wed, 8 Mar 2006 18:58:37 +0300 From: Stanislav Sedov To: FreeBSD-gnats-submit@FreeBSD.org Cc: Subject: kern/94232: missing rt_sigpending call in Linux emulation code X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Stanislav Sedov List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Mar 2006 16:00:30 -0000 >Number: 94232 >Category: kern >Synopsis: missing rt_sigpending call in Linux emulation code >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Mar 08 16:00:29 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Stanislav Sedov >Release: FreeBSD 7.0-CURRENT i386 >Organization: MBSD labs >Environment: System: FreeBSD fonon.realnet 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Tue Feb 21 18:07:56 MSK 2006 stas@fonon.realnet:/work/src/fbsd-cur/src/sys/i386/compile/FONON i386 >Description: rt_sigpending call is missing. Recent Linux applications require this (e.g. Maple 10, Cadence). >How-To-Repeat: Try to run Maple 10, for example. >Fix: --- linux_signal.c.diff begins here --- --- linux_signal.c.orig Wed Mar 8 00:44:49 2006 +++ linux_signal.c Wed Mar 8 00:49:28 2006 @@ -406,6 +406,30 @@ mask = lset.__bits[0]; return (copyout(&mask, args->mask, sizeof(mask))); } + +/* + * MPSAFE + */ +int +linux_sigpending(struct thread *td, struct linux_rt_sigpending_args *args) +{ + struct proc *p = td->td_proc; + sigset_t bset; + l_sigset_t lset; + +#ifdef DEBUG + if (ldebug(rt_sigpending)) + printf(ARGS(rt_sigpending, "*")); +#endif + + PROC_LOCK(p); + bset = p->p_siglist; + SIGSETOR(bset, td->td_siglist); + SIGSETAND(bset, td->td_sigmask); + PROC_UNLOCK(p); + bsd_to_linux_sigset(&bset, &lset); + return (copyout(&lset, args->mask, args->sigsetsize)); +} #endif /*!__alpha__*/ int --- linux_signal.c.diff ends here --- --- syscalls.master.diff begins here --- --- syscalls.master.orig Wed Mar 8 00:43:01 2006 +++ syscalls.master Wed Mar 8 00:52:07 2006 @@ -316,7 +316,8 @@ 175 AUE_NULL MSTD { int linux_rt_sigprocmask(l_int how, \ l_sigset_t *mask, l_sigset_t *omask, \ l_size_t sigsetsize); } -176 AUE_NULL MSTD { int linux_rt_sigpending(void); } +176 AUE_NULL MSTD { int linux_rt_sigpending(l_sigset_t *mask, \ + l_size_t sigsetsize); } 177 AUE_NULL MSTD { int linux_rt_sigtimedwait(void); } 178 AUE_NULL MSTD { int linux_rt_sigqueueinfo(void); } 179 AUE_NULL MSTD { int linux_rt_sigsuspend( \ --- syscalls.master.diff ends here --- --- linux_dummy.c.diff begins here --- --- linux_dummy.c.orig Wed Mar 8 00:54:36 2006 +++ linux_dummy.c Wed Mar 8 00:53:34 2006 @@ -60,7 +60,6 @@ DUMMY(prctl); DUMMY(rt_sigtimedwait); DUMMY(rt_sigqueueinfo); -DUMMY(rt_sigpending); DUMMY(capget); DUMMY(capset); DUMMY(sendfile); --- linux_dummy.c.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: