sync changelog with gcc, plus commit the following patch:

2010-06-09  Iain Sandoe  <iains@gcc.gnu.org>

	PR bootstrap/43170
	* tls.m4 (GCC_CHECK_TLS): Add volatile qualifier to the test
	references.  Move the main () test reference ahead of
	pthread_create().  Add a comment to explain the requirements
	of the test.
This commit is contained in:
Paolo Bonzini
2010-06-10 16:01:32 +00:00
parent 3baae9d67e
commit 8b4e6b9f21
2 changed files with 28 additions and 13 deletions

View File

@ -38,11 +38,16 @@ AC_DEFUN([GCC_CHECK_TLS], [
CFLAGS="$chktls_save_CFLAGS"
if test "X$thread_CFLAGS" != Xfailed; then
CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
dnl Test for an old glibc bug that violated the __thread property.
dnl Use volatile to ensure the compiler won't optimize away pointer
dnl accesses it might otherwise assume to be redundant, or reorder
dnl them and reuse storage, which might lead to them pointing to
dnl the same location.
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[#include <pthread.h>
__thread int a;
static int *a_in_other_thread;
static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
@ -51,11 +56,11 @@ AC_DEFUN([GCC_CHECK_TLS], [
}],
[pthread_t thread;
void *thread_retval;
int *a_in_main_thread;
int *volatile a_in_main_thread;
a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);])],