summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/include
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-08-18 10:27:14 +0200
committerCorinna Vinschen <corinna@vinschen.de>2016-08-18 10:27:14 +0200
commit4de8596b8e249c6201648352fc349023f0b230c9 (patch)
treeac0463b5018d109bdb729632607cdf76cb8e6beb /winsup/cygwin/include
parent0e2e3c958c9861861f0c556eba6e896707978c5c (diff)
downloadcygnal-4de8596b8e249c6201648352fc349023f0b230c9.tar.gz
cygnal-4de8596b8e249c6201648352fc349023f0b230c9.tar.bz2
cygnal-4de8596b8e249c6201648352fc349023f0b230c9.zip
Fix __getreent function for Cygwin
So far the lib function __getreent always returned _impure_ptr. On Cygwin this is only correct after _impure_ptr got initialized. The inline function in include/cygwin/config.h always returns the right _reent ptr, though. After introducing per-thread locales, the __getreent function is called prior to initialization of _impure_ptr (from dll_crt0_0) to access the locale pointer, which leads to a crash. Fix the __getreent lib function for Cygwin to return the correct _reent pointer all the time. Rename inline function to __inline_getreent and introduce a macro __getreent calling the inline function. Change the lib function __getreent to call __inline_getreent on Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r--winsup/cygwin/include/cygwin/config.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/winsup/cygwin/include/cygwin/config.h b/winsup/cygwin/include/cygwin/config.h
index c09641ed1..585a2567f 100644
--- a/winsup/cygwin/include/cygwin/config.h
+++ b/winsup/cygwin/include/cygwin/config.h
@@ -42,7 +42,7 @@ extern "C" {
#include "../tlsoffsets.h"
#endif
__attribute__((gnu_inline))
-extern inline struct _reent *__getreent (void)
+extern inline struct _reent *__inline_getreent (void)
{
register char *ret;
#ifdef __x86_64__
@@ -52,6 +52,7 @@ extern inline struct _reent *__getreent (void)
#endif
return (struct _reent *) (ret + tls_local_clib);
}
+#define __getreent() __inline_getreent()
#endif /* _COMPILING_NEWLIB */
#ifdef __x86_64__