Date: Wed, 20 Jun 2012 22:52:00 +1200 From: Andrew Turner <andrew@fubar.geek.nz> To: Bruce Evans <brde@optusnet.com.au> Cc: arch@FreeBSD.org Subject: Re: wchar_t change for ARM EABI Message-ID: <20120620225200.7566b177@fubar.geek.nz> In-Reply-To: <20120620011811.X2306@besplex.bde.org> References: <20120617171125.18836c93@fubar.geek.nz> <20120619234520.76121ece@fubar.geek.nz> <20120620011811.X2306@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I have updated the patch at [1]. [1] http://people.freebsd.org/~andrew/wchar_unsigned_2.diff On Wed, 20 Jun 2012 01:47:34 +1000 (EST) Bruce Evans <brde@optusnet.com.au> wrote: > On Tue, 19 Jun 2012, Andrew Turner wrote: > > I have an updated patch at [1]. This moves __WCHAR_MIN/__WCHAR_MAX > > from <machine/_types.h> to <machine/_limits.h> as they are limits > > rather than types. Does anybody see any issues with this? If not > > I'll update it for all architectures and commit later in the week. > > I hoped to keep the types and limits closer together, especially for > the types that are declared in <machine/_types.h>. > <machine/_limits.h> has mainly limits for basic (non-typedefed) > types. The exceptions were just for size_t, ssize_t, off_t, and > *quad_t (ugh). I've moved them back to <machine/_types.h>. > This still says that wchar_t MUST be the same as rune_t... > > % typedef int __ct_rune_t; /* arg type > for ctype funcs */ % typedef __ct_rune_t > __rune_t; /* rune_t (see above) */ % -typedef > __ct_rune_t __wchar_t; /* wchar_t (see above) */ > > ... but rune_t is still int, while wchar_t can be different (it is > unsigned on arm_eabi). As far as I can tell the comment was incorrect. rune_t must be the same type as wint_t, it just happens that wchar_t was also the same type. > % typedef __ct_rune_t __wint_t; /* wint_t (see > above) */ > > The above removes a MUST on wint_t instead, but wint_t hasn't been > changed. Was that intended? The MUST is still satisfied, but isn't > stated quite right, since the sign bit is normally counted as part of > the width but probably shouldn't be in this requirement. I removed the MUST as, on ARM EABI, the number of usable bits for a character in a wint_t is now less than the number of bits in a wchar_t. > % > % typedef __uint32_t __dev_t; /* device number > */ % ... > % Index: sys/arm/include/_limits.h > % =================================================================== > % --- sys/arm/include/_limits.h (revision 237150) > % +++ sys/arm/include/_limits.h (working copy) > % @@ -78,6 +78,14 @@ > % #define __QUAD_MAX __LLONG_MAX /* max value > for a quad_t */ % #define __QUAD_MIN > __LLONG_MIN /* min value for a quad_t */ % > % +#ifdef __ARM_EABI__ > % +#define __WCHAR_MIN (0) > > Bogus parentheses. Ok. > % +#define __WCHAR_MAX __UINT_MAX > % +#else > % +#define __WCHAR_MIN __INT_MIN > % +#define __WCHAR_MAX __INT_MAX > % +#endif > % + > > These definitions are missing banal comments, unlike all the other > definitions except the ones for __LONG_BIT and __WORD_BIT. (The one > for __MINSIGSTKSZ is not missing, but is in an inconsistent style.) Ok. Andrew
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120620225200.7566b177>