runtime: Fix call to _dl_get_tls_static_info for i386.
From-SVN: r188230
This commit is contained in:
parent
70b9f51628
commit
44072af5b0
|
@ -286,6 +286,9 @@
|
||||||
/* Define to 1 if you have the `wait4' function. */
|
/* Define to 1 if you have the `wait4' function. */
|
||||||
#undef HAVE_WAIT4
|
#undef HAVE_WAIT4
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_dl_get_tls_static_info' function. */
|
||||||
|
#undef HAVE__DL_GET_TLS_STATIC_INFO
|
||||||
|
|
||||||
/* Define if the C++ compiler is configured for setjmp/longjmp exceptions. */
|
/* Define if the C++ compiler is configured for setjmp/longjmp exceptions. */
|
||||||
#undef LIBGO_SJLJ_EXCEPTIONS
|
#undef LIBGO_SJLJ_EXCEPTIONS
|
||||||
|
|
||||||
|
|
|
@ -14584,7 +14584,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
for ac_func in strerror_r strsignal wait4 mincore setenv
|
for ac_func in strerror_r strsignal wait4 mincore setenv _dl_get_tls_static_info
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
||||||
|
|
|
@ -481,7 +481,7 @@ fi
|
||||||
|
|
||||||
AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
|
AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
|
||||||
|
|
||||||
AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv)
|
AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv _dl_get_tls_static_info)
|
||||||
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
|
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
|
||||||
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
|
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
|
||||||
|
|
||||||
|
|
|
@ -1105,6 +1105,7 @@ runtime_newm(void)
|
||||||
M *m;
|
M *m;
|
||||||
pthread_attr_t attr;
|
pthread_attr_t attr;
|
||||||
pthread_t tid;
|
pthread_t tid;
|
||||||
|
size_t stacksize;
|
||||||
|
|
||||||
m = runtime_malloc(sizeof(M));
|
m = runtime_malloc(sizeof(M));
|
||||||
mcommoninit(m);
|
mcommoninit(m);
|
||||||
|
@ -1118,7 +1119,31 @@ runtime_newm(void)
|
||||||
#ifndef PTHREAD_STACK_MIN
|
#ifndef PTHREAD_STACK_MIN
|
||||||
#define PTHREAD_STACK_MIN 8192
|
#define PTHREAD_STACK_MIN 8192
|
||||||
#endif
|
#endif
|
||||||
if(pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN) != 0)
|
|
||||||
|
stacksize = PTHREAD_STACK_MIN;
|
||||||
|
|
||||||
|
#ifdef HAVE__DL_GET_TLS_STATIC_INFO
|
||||||
|
{
|
||||||
|
/* On GNU/Linux the static TLS size is taken out of
|
||||||
|
the stack size, and we get an error or a crash if
|
||||||
|
there is not enough stack space left. Add it back
|
||||||
|
in if we can, in case the program uses a lot of TLS
|
||||||
|
space. */
|
||||||
|
#ifndef internal_function
|
||||||
|
#ifdef __i386__
|
||||||
|
#define internal_function __attribute__ ((regparm (3), stdcall))
|
||||||
|
#else
|
||||||
|
#define internal_function
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
extern void _dl_get_tls_static_info(size_t*, size_t*) internal_function;
|
||||||
|
size_t tlssize, tlsalign;
|
||||||
|
_dl_get_tls_static_info(&tlssize, &tlsalign);
|
||||||
|
stacksize += tlssize;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(pthread_attr_setstacksize(&attr, stacksize) != 0)
|
||||||
runtime_throw("pthread_attr_setstacksize");
|
runtime_throw("pthread_attr_setstacksize");
|
||||||
|
|
||||||
if(pthread_create(&tid, &attr, runtime_mstart, m) != 0)
|
if(pthread_create(&tid, &attr, runtime_mstart, m) != 0)
|
||||||
|
|
Loading…
Reference in New Issue