From owner-svn-src-all@FreeBSD.ORG Thu Jun 16 14:06:49 2011 Return-Path: Delivered-To: svn-src-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3A09A106564A; Thu, 16 Jun 2011 14:06:49 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail06.syd.optusnet.com.au (mail06.syd.optusnet.com.au [211.29.132.187]) by mx1.freebsd.org (Postfix) with ESMTP id C7DAA8FC13; Thu, 16 Jun 2011 14:06:48 +0000 (UTC) Received: from c122-106-165-191.carlnfd1.nsw.optusnet.com.au (c122-106-165-191.carlnfd1.nsw.optusnet.com.au [122.106.165.191]) by mail06.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p5GE6hF2030993 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 17 Jun 2011 00:06:46 +1000 Date: Fri, 17 Jun 2011 00:06:43 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Tai-hwa Liang In-Reply-To: <11061619555315.44181@www.mmlab.cse.yzu.edu.tw> Message-ID: <20110616235239.D1926@besplex.bde.org> References: <201106160714.p5G7Etfx017112@svn.freebsd.org> <20110616180803.D1005@besplex.bde.org> <11061619555315.44181@www.mmlab.cse.yzu.edu.tw> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Garrett Cooper , svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org, Bruce Evans Subject: Re: svn commit: r223139 - head/lib/libstand X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Jun 2011 14:06:49 -0000 On Thu, 16 Jun 2011, Tai-hwa Liang wrote: > On Thu, 16 Jun 2011, Bruce Evans wrote: > >> On Thu, 16 Jun 2011, Garrett Cooper wrote: >>> >>> And you need to add #include to stand.h in order to get >>> uintmax_t. Here's a proper patch for amd64.. >> >> This would add namespace pollution. stand.h doesn't use anything in >> . It depends on normal namespace pollution in an XXX section >> in for the declaration of uintptr_t. It and other headers >> should use __uintptr_t instead. Strangely, declares >> uintptr_t but not uintmax_t. > > What about casting to __uintmax_t instead? > > Index: zalloc.c > =================================================================== > --- zalloc.c (revision 223146) > +++ zalloc.c (working copy) > @@ -154,7 +154,7 @@ > if ((char *)ptr < (char *)mp->mp_Base || > (char *)ptr + bytes > (char *)mp->mp_End || > ((iaddr_t)ptr & MEMNODE_SIZE_MASK) != 0) > - panic("zfree(%p,%ju): wild pointer", ptr, bytes); > + panic("zfree(%p,%ju): wild pointer", ptr, (__uintmax_t)bytes); > ... zalloc.c is not the (header) implementation, so it should not use the implementation detail (anything beginning with __). The latest tinderbox errors for this are hard to understand. For amd64 they say: > /src/lib/libstand/zalloc.c: In function 'zfree': > /src/lib/libstand/zalloc.c:157: warning: format '%ju' expects type 'uintmax_t', but argument 3 has type 'iaddr_t' but amd64 seems to be just like sparc64 -- both seem to declare all the types as `unsigned long' at the lowest level. I would expect all 64-bit arches to do this, although this is logically wrong (it makes the largest integral type uintmax_t logically smaller than the standard bogus type unsigned long long). This logic error is partly intentional (it detects different type mismatches than uintmax_t = `unsigned long long' combined with uint64_t = `unsigned long' would). Bruce