[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