[PATCH] Avoid use of malloc _r functions in cygwin.

Christopher Faylor cgf@redhat.com
Sun Aug 25 21:38:00 GMT 2002


Cygwin is moving towards using its own version of malloc which is thread
safe, so there is no need for the _r functions.

The following patch, which has been checked in, causes newlib to avoid building
malloc functions and defines things like _free_r as simple calls to free().

If this was of generic use to any other system, it might be nice to
define a macro, like e.g.  __NOREENT_MALLOC in the machine/malloc.h file
and use this define to control the definition of the _foo_r macros in
stdlib.h and malloc.h.

cgf

2002-08-26  Christopher Faylor  <cgf@redhat.com>

	* libc/include/malloc.h: On cygwin, define malloc _r functions as
	wrapper macros to standard malloc functions.
	* libc/include/stdlib.h: Ditto.
	* configure.host: Always define MALLOC_PROVIDED on cygwin.

Index: configure.host
===================================================================
RCS file: /cvs/uberbaum/newlib/configure.host,v
retrieving revision 1.35
diff -u -p -r1.35 configure.host
--- configure.host	23 Aug 2002 01:56:02 -0000	1.35
+++ configure.host	26 Aug 2002 04:32:41 -0000
@@ -413,11 +413,7 @@ esac
 
 case "${host}" in
   *-*-cygwin*)
-	newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DSIGNAL_PROVIDED -DWANT_IO_LONG_DBL -DWANT_PRINTF_LONG_LONG -D_COMPILING_NEWLIB -DHAVE_FCNTL"
-# CYGWIN provides its own malloc if --enable-malloc-debugging is set
-	if [ "x${malloc_debugging}" = "xyes" ] ; then
-	  newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED"
-	fi
+	newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DSIGNAL_PROVIDED -DWANT_IO_LONG_DBL -DWANT_PRINTF_LONG_LONG -D_COMPILING_NEWLIB -DHAVE_FCNTL -DMALLOC_PROVIDED"
 	syscall_dir=syscalls
 	;;
 # RTEMS supplies its own versions of some routines:
Index: libc/include/malloc.h
===================================================================
RCS file: /cvs/uberbaum/newlib/libc/include/malloc.h,v
retrieving revision 1.5
diff -u -p -r1.5 malloc.h
--- libc/include/malloc.h	19 Apr 2002 19:16:09 -0000	1.5
+++ libc/include/malloc.h	26 Aug 2002 04:32:41 -0000
@@ -35,48 +35,113 @@ struct mallinfo {
 /* The routines.  */
 
 extern _PTR malloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _malloc_r
+#define _malloc_r(r, s) malloc (s)
+#else
 extern _PTR _malloc_r _PARAMS ((struct _reent *, size_t));
+#endif
 
 extern _VOID free _PARAMS ((_PTR));
+#ifdef __CYGWIN__
+#undef _free_r
+#define _free_r(r, p) free (p)
+#else
 extern _VOID _free_r _PARAMS ((struct _reent *, _PTR));
+#endif
 
 extern _PTR realloc _PARAMS ((_PTR, size_t));
+#ifdef __CYGWIN__
+#undef _realloc_r
+#define _realloc_r(r, p, s) realloc (p, s)
+#else
 extern _PTR _realloc_r _PARAMS ((struct _reent *, _PTR, size_t));
+#endif
 
 extern _PTR calloc _PARAMS ((size_t, size_t));
+#ifdef __CYGWIN__
+#undef _calloc_r
+#define _calloc_r(r, s1, s2) calloc (s1, s2);
+#else
 extern _PTR _calloc_r _PARAMS ((struct _reent *, size_t, size_t));
+#endif
 
 extern _PTR memalign _PARAMS ((size_t, size_t));
+#ifdef __CYGWIN__
+#undef _memalign_r
+#define _memalign_r(r, s1, s2) memalign (s1, s2);
+#else
 extern _PTR _memalign_r _PARAMS ((struct _reent *, size_t, size_t));
+#endif
 
 extern struct mallinfo mallinfo _PARAMS ((void));
+#ifdef __CYGWIN__
+#undef _mallinfo_r
+#define _mallinfo_r(r) mallinfo ()
+#else
 extern struct mallinfo _mallinfo_r _PARAMS ((struct _reent *));
+#endif
 
 extern void malloc_stats _PARAMS ((void));
+#ifdef __CYGWIN__
+#undef _malloc_stats_r
+#define _malloc_stats_r(r) malloc_stats ()
+#else
 extern void _malloc_stats_r _PARAMS ((struct _reent *));
+#endif
 
 extern int mallopt _PARAMS ((int, int));
+#ifdef __CYGWIN__
+#undef _mallopt_r
+#define _mallopt_r(i1, i2) mallopt (i1, i2)
+#else
 extern int _mallopt_r _PARAMS ((struct _reent *, int, int));
+#endif
 
 extern size_t malloc_usable_size _PARAMS ((_PTR));
+#ifdef __CYGWIN__
+#undef _malloc_usable_size_r
+#define _malloc_usable_size_r(r, p) malloc_usable_size (p)
+#else
 extern size_t _malloc_usable_size_r _PARAMS ((struct _reent *, _PTR));
+#endif
 
 /* These aren't too useful on an embedded system, but we define them
    anyhow.  */
 
 extern _PTR valloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _valloc_r
+#define _valloc_r(r, s) valloc (s)
+#else
 extern _PTR _valloc_r _PARAMS ((struct _reent *, size_t));
+#endif
 
 extern _PTR pvalloc _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _pvalloc_r
+#define _pvalloc_r(r, s) pvalloc (s)
+#else
 extern _PTR _pvalloc_r _PARAMS ((struct _reent *, size_t));
+#endif
 
 extern int malloc_trim _PARAMS ((size_t));
+#ifdef __CYGWIN__
+#undef _malloc_trim_r
+#define _malloc_trim_r(r, s) malloc_trim (s)
+#else
 extern int _malloc_trim_r _PARAMS ((struct _reent *, size_t));
+#endif
 
 /* A compatibility routine for an earlier version of the allocator.  */
 
 extern _VOID mstats _PARAMS ((char *));
+#ifdef __CYGWIN__
+#undef _mstats_r
+#define _mstats_r(r, p) mstats (p)
+#else
 extern _VOID _mstats_r _PARAMS ((struct _reent *, char *));
+#endif
 
 /* SVID2/XPG mallopt options */
 
Index: libc/include/stdlib.h
===================================================================
RCS file: /cvs/uberbaum/newlib/libc/include/stdlib.h,v
retrieving revision 1.18
diff -u -p -r1.18 stdlib.h
--- libc/include/stdlib.h	23 Aug 2002 01:56:02 -0000	1.18
+++ libc/include/stdlib.h	26 Aug 2002 04:32:41 -0000
@@ -166,14 +166,45 @@ int     _EXFUN(unlockpt,(int));
 #endif /* ! __STRICT_ANSI__ */
 
 char *	_EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**));
+#ifndef __CYGWIN__
 _PTR	_EXFUN(_malloc_r,(struct _reent *, size_t));
 _PTR	_EXFUN(_calloc_r,(struct _reent *, size_t, size_t));
 _VOID	_EXFUN(_free_r,(struct _reent *, _PTR));
 _PTR	_EXFUN(_realloc_r,(struct _reent *, _PTR, size_t));
 _VOID	_EXFUN(_mstats_r,(struct _reent *, char *));
+#endif
 int	_EXFUN(_system_r,(struct _reent *, const char *));
 
 _VOID	_EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *));
+
+#ifdef __CYGWIN__
+#undef _malloc_r
+#define _malloc_r(r, s) malloc (s)
+#undef _free_r
+#define _free_r(r, p) free (p)
+#undef _realloc_r
+#define _realloc_r(r, p, s) realloc (p, s)
+#undef _calloc_r
+#define _calloc_r(r, s1, s2) calloc (s1, s2);
+#undef _memalign_r
+#define _memalign_r(r, s1, s2) memalign (s1, s2);
+#undef _mallinfo_r
+#define _mallinfo_r(r) mallinfo ()
+#undef _malloc_stats_r
+#define _malloc_stats_r(r) malloc_stats ()
+#undef _mallopt_r
+#define _mallopt_r(i1, i2) mallopt (i1, i2)
+#undef _malloc_usable_size_r
+#define _malloc_usable_size_r(r, p) malloc_usable_size (p)
+#undef _valloc_r
+#define _valloc_r(r, s) valloc (s)
+#undef _pvalloc_r
+#define _pvalloc_r(r, s) pvalloc (s)
+#undef _malloc_trim_r
+#define _malloc_trim_r(r, s) malloc_trim (s)
+#undef _mstats_r
+#define _mstats_r(r, p) mstats (p)
+#endif
 
 _END_STD_C
 



More information about the Newlib mailing list