From owner-svn-src-head@freebsd.org Sun Aug 28 01:15:07 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A7DDCA949ED; Sun, 28 Aug 2016 01:15:07 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5080637F; Sun, 28 Aug 2016 01:15:07 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id u7S1F2BZ032907 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Sun, 28 Aug 2016 04:15:02 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua u7S1F2BZ032907 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id u7S1F2Ep032906; Sun, 28 Aug 2016 04:15:02 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 28 Aug 2016 04:15:01 +0300 From: Konstantin Belousov To: Andrey Chernov Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r304928 - in head/lib/libc: amd64/sys i386/sys sys Message-ID: <20160828011501.GH83214@kib.kiev.ua> References: <201608272303.u7RN3N0D078505@repo.freebsd.org> <9bcf10db-de3f-33ce-e418-03ce3283ac90@freebsd.org> <20160828005637.GG83214@kib.kiev.ua> <59ac1812-7c77-b677-51c4-dcadc6b2be7f@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <59ac1812-7c77-b677-51c4-dcadc6b2be7f@freebsd.org> User-Agent: Mutt/1.6.1 (2016-04-27) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Aug 2016 01:15:07 -0000 On Sun, Aug 28, 2016 at 03:50:04AM +0300, Andrey Chernov wrote: > On 28.08.2016 3:38, Andrey Chernov wrote: > > On 28.08.2016 2:03, Konstantin Belousov wrote: > >> Since ptrace(2) syscall can return -1 for non-error situations, libc > >> wrappers set errno to 0 before performing the syscall, as the service > >> to the caller. > > > > Both C99 and POSIX directly prohibits any standard function to set errno > > to 0. ptrace() should either choose other errno to indicate non-error > > situation or change return -1 to something else. > > > ...and don't touch errno. > > POSIX: "No function in this volume of POSIX.1-2008 shall set errno to zero." I am quite curious where ptrace(2) is defined by POSIX. > > > On both i386 and amd64, the errno symbol was directly > > referenced, which only works correctly in single-threaded process. > > POSIX: "For each thread of a process, the value of errno shall not be > affected by function calls or assignments to errno by other threads." And ? What should the citation add new to the substance of the code change ? On Sun, Aug 28, 2016 at 04:04:00AM +0300, Andrey Chernov wrote: > On 28.08.2016 3:56, Konstantin Belousov wrote: > > On Sun, Aug 28, 2016 at 03:38:10AM +0300, Andrey Chernov wrote: > >> On 28.08.2016 2:03, Konstantin Belousov wrote: > >>> Since ptrace(2) syscall can return -1 for non-error situations, libc > >>> wrappers set errno to 0 before performing the syscall, as the service > >>> to the caller. > >> > >> Both C99 and POSIX directly prohibits any standard function to set errno > >> to 0. ptrace() should either choose other errno to indicate non-error > >> situation or change return -1 to something else. > >> > > ptrace(2) is not a standard function. > > And, we cannot break ABI for the syscall. > > > > C99 statement sounds stricter: > "The value of errno is zero at program startup, but is never set to zero > by any library function. 176)" > And syscall is not different from library function from C99 point of view. Point me to a single line in C99 which mentions ptrace(). Do you understand what did the commit changed, and what it did not ? Setting errno to zero before the syscall was the existing behaviour before the change, and I did not modified anything there. But previous wrapper set errno to zero in main thread even if called from some other thread, which was the bug fixed.