svn commit: r223139 - head/lib/libstand

Bruce Evans brde at optusnet.com.au
Thu Jun 16 08:16:52 UTC 2011


On Thu, 16 Jun 2011, Garrett Cooper wrote:

> On Thu, Jun 16, 2011 at 12:19 AM, Garrett Cooper <yanegomi at gmail.com> wrote:
>> On Thu, Jun 16, 2011 at 12:14 AM, Tai-hwa Liang <avatar at freebsd.org> wrote:
>>> Author: avatar
>>> Date: Thu Jun 16 07:14:55 2011
>>> New Revision: 223139
>>> URL: http://svn.freebsd.org/changeset/base/223139
>>>
>>> Log:
>>>  Unbreaking build on sparc64.

Why not fix it on all arches?  This seems to break it on all 32-bit arches.

>>>  Submitted by: Garrett Cooper <yanegomi at gmail.com>
>>>
>>> Modified:
>>>  head/lib/libstand/zalloc.c
>>>
>>> Modified: head/lib/libstand/zalloc.c
>>> ==============================================================================
>>> --- head/lib/libstand/zalloc.c  Thu Jun 16 05:26:03 2011        (r223138)
>>> +++ head/lib/libstand/zalloc.c  Thu Jun 16 07:14:55 2011        (r223139)
>>> @@ -154,7 +154,7 @@ zfree(MemPool *mp, void *ptr, iaddr_t by
>>>     if ((char *)ptr < (char *)mp->mp_Base ||
>>>        (char *)ptr + bytes > (char *)mp->mp_End ||
>>>        ((iaddr_t)ptr & MEMNODE_SIZE_MASK) != 0)
>>> -       panic("zfree(%p,%d): wild pointer", ptr, bytes);
>>> +       panic("zfree(%p,%ju): wild pointer", ptr, bytes);
>>
>> All of those need to be cast to (uintmax_t). Sorry :(..

Indeed.  There is no format letter for intptr_t, and perhaps iaddr_t is
supposed to be opaque anyway.

> And you need to add #include <stdint.h> 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
<stdint.h>.  It depends on normal namespace pollution in an XXX section
in <sys/types.h> for the declaration of uintptr_t.  It and other headers
should use __uintptr_t instead.  Strangely, <sys/types.h> declares
uintptr_t but not uintmax_t.

Bruce


More information about the svn-src-head mailing list