Date: Thu, 16 Jun 2011 19:57:27 +0800 (CST) From: Tai-hwa Liang <avatar@mmlab.cse.yzu.edu.tw> To: Bruce Evans <brde@optusnet.com.au> Cc: Garrett Cooper <yanegomi@gmail.com>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r223139 - head/lib/libstand Message-ID: <11061619555315.44181@www.mmlab.cse.yzu.edu.tw> In-Reply-To: <20110616180803.D1005@besplex.bde.org> References: <201106160714.p5G7Etfx017112@svn.freebsd.org> <BANLkTi=X0_SBLAQ6t7amTLv7jF6_oXAV4Q@mail.gmail.com> <BANLkTimG4svFzv1QPiKQcC7QdChLica9xA@mail.gmail.com> <20110616180803.D1005@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --3425325993-407207228-1308225447=:44181 Content-Type: TEXT/PLAIN; charset=big5; format=flowed Content-Transfer-Encoding: 8BIT On Thu, 16 Jun 2011, Bruce Evans wrote: > On Thu, 16 Jun 2011, Garrett Cooper wrote: > >> On Thu, Jun 16, 2011 at 12:19 AM, Garrett Cooper <yanegomi@gmail.com> >> wrote: >>> On Thu, Jun 16, 2011 at 12:14 AM, Tai-hwa Liang <avatar@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@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. 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); /* * free the segment @@ -177,8 +177,10 @@ /* * range check */ - if ((char *)ptr + bytes > (char *)mn) - panic("zfree(%p,%ju): corrupt memlist1",ptr, bytes); + if ((char *)ptr + bytes > (char *)mn) { + panic("zfree(%p,%ju): corrupt memlist1", ptr, + (__uintmax_t)bytes); + } /* * merge against next area or create independant area @@ -208,8 +210,10 @@ return; /* NOT REACHED */ } - if ((char *)ptr < (char *)mn + mn->mr_Bytes) - panic("zfree(%p,%ju): corrupt memlist2", ptr, bytes); + if ((char *)ptr < (char *)mn + mn->mr_Bytes) { + panic("zfree(%p,%ju): corrupt memlist2", ptr, + (__uintmax_t)bytes); + } } /* * We are beyond the last MemNode, append new MemNode. Merge against --3425325993-407207228-1308225447=:44181--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?11061619555315.44181>