diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2016-08-20 16:03:14 +0200 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2016-08-20 17:14:55 +0200 |
commit | 06ac6718119dfd382c1904b1162f6cd7f9749dc3 (patch) | |
tree | a13828d9643b846c1488eb16adb868e620c6d532 | |
parent | 5e9b414e1cdb697bd3f437928eb1846054feea4c (diff) | |
download | cygnal-06ac6718119dfd382c1904b1162f6cd7f9749dc3.tar.gz cygnal-06ac6718119dfd382c1904b1162f6cd7f9749dc3.tar.bz2 cygnal-06ac6718119dfd382c1904b1162f6cd7f9749dc3.zip |
Only define __getreent inline function when building newlib or Cygwin
Commit 6f3943b erroneously removed the `#ifdef _COMPILING_NEWLIB'
guarding the __getreent inline function. This patch ignored the
fact that config.h is included when building applications, and the
code in question requires internal, auto-generated headers to be
available which are not exposed to user-space.
Reinstantiate defined(_COMPILING_NEWLIB) test and alternatively
check for defined (__INSIDE_CYGWIN__), otherwise we'd have to
reinstantiate the __getreent macro in cygtls.h which is really
confusing.
While testing it turned out that a low number of source codes inside
Cygwin won't see the inline __getreent due to a missing __INSIDE_CYGWIN__
definition. For malloc.cc this was actually deliberate to get different
definitions from including cygmalloc.h. Change this by defining
__INSIDE_CYGWIN__ in malloc.cc but changing the test in cygmalloc.h
to test for defined(DLMALLOC_VERSION). This might need a change if we
ever get around to replace dlmalloc with a newer, more threading-aware
malloc implementation.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/cygmalloc.h | 11 | ||||
-rw-r--r-- | winsup/cygwin/include/cygwin/config.h | 2 | ||||
-rw-r--r-- | winsup/cygwin/libc/strfmon.c | 1 | ||||
-rw-r--r-- | winsup/cygwin/malloc.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/random.cc | 2 |
5 files changed, 14 insertions, 3 deletions
diff --git a/winsup/cygwin/cygmalloc.h b/winsup/cygwin/cygmalloc.h index 753ca33e4..84bad824c 100644 --- a/winsup/cygwin/cygmalloc.h +++ b/winsup/cygwin/cygmalloc.h @@ -26,17 +26,22 @@ void dlmalloc_stats (); #define MALLOC_ALIGNMENT ((size_t)16U) #endif -#ifndef __INSIDE_CYGWIN__ +#if defined (DLMALLOC_VERSION) /* Building malloc.cc */ + extern "C" void __set_ENOMEM (); void *mmap64 (void *, size_t, int, int, int, off_t); -#define mmap mmap64 +# define mmap mmap64 # define MALLOC_FAILURE_ACTION __set_ENOMEM () # define USE_DL_PREFIX 1 -#else + +#elif defined (__INSIDE_CYGWIN__) + # define __malloc_lock() mallock.acquire () # define __malloc_unlock() mallock.release () extern muto mallock; + #endif + #ifdef __cplusplus } #endif diff --git a/winsup/cygwin/include/cygwin/config.h b/winsup/cygwin/include/cygwin/config.h index 46c020897..dad6a350b 100644 --- a/winsup/cygwin/include/cygwin/config.h +++ b/winsup/cygwin/include/cygwin/config.h @@ -35,6 +35,7 @@ extern "C" { compute these offsets already exists for the sake of gendef so we might as well just use it here. */ +#if defined (_COMPILING_NEWLIB) || defined (__INSIDE_CYGWIN__) #ifdef __x86_64__ #include "../tlsoffsets64.h" #else @@ -51,6 +52,7 @@ extern inline struct _reent *__getreent (void) #endif return (struct _reent *) (ret + tls_local_clib); } +#endif /* _COMPILING_NEWLIB || __INSIDE_CYGWIN__ */ #ifdef __x86_64__ # define __SYMBOL_PREFIX diff --git a/winsup/cygwin/libc/strfmon.c b/winsup/cygwin/libc/strfmon.c index 533fc2121..f824fceb2 100644 --- a/winsup/cygwin/libc/strfmon.c +++ b/winsup/cygwin/libc/strfmon.c @@ -30,6 +30,7 @@ * */ +#define __INSIDE_CYGWIN__ #define _GNU_SOURCE #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); diff --git a/winsup/cygwin/malloc.cc b/winsup/cygwin/malloc.cc index b1d5f6c04..23c354074 100644 --- a/winsup/cygwin/malloc.cc +++ b/winsup/cygwin/malloc.cc @@ -577,6 +577,7 @@ MAX_RELEASE_CHECK_RATE default: 4095 unless not HAVE_MMAP #endif /* HAVE_MORECORE */ #endif /* DARWIN */ +#define __INSIDE_CYGWIN__ #ifndef LACKS_SYS_TYPES_H #include <sys/types.h> /* For size_t */ #endif /* LACKS_SYS_TYPES_H */ diff --git a/winsup/cygwin/random.cc b/winsup/cygwin/random.cc index a6ae05543..802c33b8a 100644 --- a/winsup/cygwin/random.cc +++ b/winsup/cygwin/random.cc @@ -27,6 +27,8 @@ * SUCH DAMAGE. */ +#define __INSIDE_CYGWIN__ + extern "C" { #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 8.2 (Berkeley) 5/19/95"; |