This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: [PATCH] Maybe change __size_t definition in <stddef.h>?
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Sebastian Huber <sebastian dot huber at embedded-brains dot de>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, devel at rtems dot org, newlib at sourceware dot org
- Date: Fri, 15 Apr 2016 12:23:25 +0200
- Subject: Re: [PATCH] Maybe change __size_t definition in <stddef.h>?
- Authentication-results: sourceware.org; auth=none
- References: <1460713488-18283-1-git-send-email-sebastian dot huber at embedded-brains dot de>
On Fri, Apr 15, 2016 at 11:44 AM, Sebastian Huber
<sebastian.huber@embedded-brains.de> wrote:
> I work currently on a better FreeBSD compatibility for Newlib. For
> RTEMS we use the network, USB, SD/MMC stacks from FreeBSD. It would be
> nice to use <sys/types.h>, etc. from Newlib directly to compile FreeBSD
> user and kernel space files.
>
> Various FreeBSD source and header files need a typedef __size_t via
> <sys/_types.h>. Unfortunately the GCC provided <stddef.h> uses
>
> #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
> || defined(__DragonFly__) \
> || defined(__FreeBSD_kernel__)
> /* __size_t is a typedef on FreeBSD 5, must not trash it. */
> #elif defined (__VMS__)
> /* __size_t is also a typedef on VMS. */
> #else
> #define __size_t
This looks odd - maybe it was meant to be a #undef? OTOH there are
a whole lot of other similar cases there which do not make sense to me...
Richard.
> #endif
>
> and therefore defines __size_t to nothing on Newlib targets which would
> trash a __size_t typedef. There exists no Newlib builtin define which
> we could add here. As a workaround I include <stddef.h> before
> <sys/_types.h> in <sys/types.h> and undefine __size_t in <sys/_types.h>.
>
> This works fine so far, but breaks if someone includes <stddef.h> after
> <sys/_types.h> the first time.
>
> This patch would address this issue, but I do not know which other
> issues it generates.
>
> gcc/ChangeLog
> 2016-04-15 Sebastian Huber <sebastian.huber@embedded-brains.de>
>
> * ginclude/stddef.h (__size_t): Define to __SIZE_TYPE__.
> ---
> gcc/ginclude/stddef.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
> index d711530..8c2e22e 100644
> --- a/gcc/ginclude/stddef.h
> +++ b/gcc/ginclude/stddef.h
> @@ -207,7 +207,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
> #elif defined (__VMS__)
> /* __size_t is also a typedef on VMS. */
> #else
> -#define __size_t
> +#define __size_t __SIZE_TYPE__
> #endif
> #ifndef __SIZE_TYPE__
> #define __SIZE_TYPE__ long unsigned int
> --
> 1.8.4.5
>