From owner-freebsd-arch Thu Jan 23 14:36:45 2003 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A5FCA37B401 for ; Thu, 23 Jan 2003 14:36:43 -0800 (PST) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1AF0943F18 for ; Thu, 23 Jan 2003 14:36:43 -0800 (PST) (envelope-from eischen@pcnet1.pcnet.com) Received: from localhost (eischen@localhost) by mail.pcnet.com (8.12.3/8.12.1) with ESMTP id h0NMagTm025772; Thu, 23 Jan 2003 17:36:42 -0500 (EST) Date: Thu, 23 Jan 2003 17:36:42 -0500 (EST) From: Daniel Eischen To: Ben Mesander Cc: Warner Losh , freebsd-arch@FreeBSD.ORG Subject: Re: _REENTRANT in math.h & libm oddities. In-Reply-To: <15920.25508.766136.494182@piglet.timing.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Thu, 23 Jan 2003, Ben Mesander wrote: > Warner Losh writes: > > In message Daniel Eischen writes: > > : The gcc manpage is wrong. It should state _REENTRANT instead of > > : _THREAD_SAFE. POSIX specifies that _REENTRANT be defined to get > > : these functions. I know that we always provide implementations > > : of most of these _r functions so it might not make sense to > > : #ifdef them in the header files, but I don't know that always > > : making them visible would be against the spec or cause namespace > > : pollution. > > > > Then FreeBSD's source tree is basically wrong, since it uses > > _THREAD_SAFE for this in many places. But most of them appear to be > > just defining the macro for compiles and such. There's a little bit > > in libc's stdio still, but that's the only significant place that uses > > it in the tree. I'm not sure about out-of-tree software. > > Lots of things for various UNIX flavors seem to use _REENTRANT (see > contrib & ports for examples). > > But even so, I disagree that the _r function definitions should only > appear in math.h if _REENTRANT is defined. That is, I disagree unless > the POSIX specification says otherwise; I've been surprised by it > before. I was unaware that POSIX mentioned _REENTRANT. > > You can call _r functions even if you are not a threaded application. Compiling with -D_REENTRANT doesn't mean you have to be a threaded program, nor automatically linked to the threads library :-) > Other _r functions in libc, etc. can be called even if you are not > threaded; I don't see why the gamma functions in the math library would > be different. Here's an excerpt from Solaris 9 : #if defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) ... /* * Reentrant version of gamma & lgamma; passes signgam back by reference * as the second argument; user must allocate space for signgam. */ #ifdef _REENTRANT extern double gamma_r __P((double, int *)); extern double lgamma_r __P((double, int *)); #if defined(__MATHERR_ERRNO_DONTCARE) #pragma does_not_read_global_data(gamma_r, lgamma_r) #endif #endif ... #endif /* defined(__EXTENSIONS__) || !defined(_XOPEN_SOURCE) */ -- Dan Eischen To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message