Skip site navigation (1)Skip section navigation (2)
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>