From: Corinna Vinschen Date: Sat, 20 Aug 2016 14:03:14 +0000 (+0200) Subject: Only define __getreent inline function when building newlib or Cygwin X-Git-Tag: cygwin-2_6_0-release~37 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=06ac6718119dfd382c1904b1162f6cd7f9749dc3;p=newlib-cygwin.git 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 --- 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 __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 /* 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";