patches/glibc/2.9/370-hppa_glibc-2.7-hppa-nptl-carlos.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1201 c9967a6e3b25
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

When configuring in an hg clone, we need hg to compute the version string.
It can happen that users do not have Mercurial (eg. if they got a snapshot
rather that they did a full clone). In this case, we can still run, of
course, so simply fill the version string with a sufficiently explicit
value, that does not require hg. The date is a good candidate.
yann@1201
     1
Original patch from: gentoo/src/patchsets/glibc/2.9/1503_hppa_glibc-2.7-hppa-nptl-carlos.patch
yann@1201
     2
yann@1201
     3
-= BEGIN original header =-
yann@1201
     4
-= END original header =-
yann@1201
     5
yann@1201
     6
diff -durN glibc-2_9.orig/elf/rtld.c glibc-2_9/elf/rtld.c
yann@1201
     7
--- glibc-2_9.orig/elf/rtld.c	2009-02-02 22:00:34.000000000 +0100
yann@1201
     8
+++ glibc-2_9/elf/rtld.c	2009-02-02 22:01:12.000000000 +0100
yann@1201
     9
@@ -386,14 +386,14 @@
yann@1201
    10
      know it is available.  We do not have to clear the memory if we
yann@1201
    11
      do not have to use the temporary bootstrap_map.  Global variables
yann@1201
    12
      are initialized to zero by default.  */
yann@1201
    13
-#ifndef DONT_USE_BOOTSTRAP_MAP
yann@1201
    14
+#if !defined DONT_USE_BOOTSTRAP_MAP
yann@1201
    15
 # ifdef HAVE_BUILTIN_MEMSET
yann@1201
    16
   __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
yann@1201
    17
 # else
yann@1201
    18
-  for (size_t cnt = 0;
yann@1201
    19
-       cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
yann@1201
    20
-       ++cnt)
yann@1201
    21
-    bootstrap_map.l_info[cnt] = 0;
yann@1201
    22
+  /* Clear the whole bootstrap_map structure */
yann@1201
    23
+  for (char *cnt = (char *)&(bootstrap_map);
yann@1201
    24
+       cnt < ((char *)&(bootstrap_map) + sizeof (bootstrap_map));
yann@1201
    25
+       *cnt++ = '\0');
yann@1201
    26
 # endif
yann@1201
    27
 # if USE___THREAD
yann@1201
    28
   bootstrap_map.l_tls_modid = 0;
yann@1201
    29
diff -durN glibc-2_9.orig/include/atomic.h glibc-2_9/include/atomic.h
yann@1201
    30
--- glibc-2_9.orig/include/atomic.h	2006-12-21 22:44:00.000000000 +0100
yann@1201
    31
+++ glibc-2_9/include/atomic.h	2009-02-02 22:01:12.000000000 +0100
yann@1201
    32
@@ -174,7 +174,7 @@
yann@1201
    33
      __typeof (*(mem)) __atg5_value = (newvalue);			      \
yann@1201
    34
 									      \
yann@1201
    35
      do									      \
yann@1201
    36
-       __atg5_oldval = *__atg5_memp;					      \
yann@1201
    37
+       __atg5_oldval = *(volatile __typeof (mem))__atg5_memp;		      \
yann@1201
    38
      while (__builtin_expect						      \
yann@1201
    39
 	    (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
yann@1201
    40
 						   __atg5_oldval), 0));	      \
yann@1201
    41
@@ -195,7 +195,7 @@
yann@1201
    42
      __typeof (*(mem)) __atg6_value = (value);				      \
yann@1201
    43
 									      \
yann@1201
    44
      do									      \
yann@1201
    45
-       __atg6_oldval = *__atg6_memp;					      \
yann@1201
    46
+       __atg6_oldval = *(volatile __typeof (mem))__atg6_memp;		      \
yann@1201
    47
      while (__builtin_expect						      \
yann@1201
    48
 	    (atomic_compare_and_exchange_bool_acq (__atg6_memp,		      \
yann@1201
    49
 						   __atg6_oldval	      \
yann@1201
    50
@@ -213,7 +213,7 @@
yann@1201
    51
      __typeof (*(mem)) __atg7_value = (value);				      \
yann@1201
    52
 									      \
yann@1201
    53
      do									      \
yann@1201
    54
-       __atg7_oldv = *__atg7_memp;					      \
yann@1201
    55
+       __atg7_oldv = *(volatile __typeof (mem))__atg7_memp;		      \
yann@1201
    56
      while (__builtin_expect						      \
yann@1201
    57
 	    (catomic_compare_and_exchange_bool_acq (__atg7_memp,	      \
yann@1201
    58
 						    __atg7_oldv		      \
yann@1201
    59
@@ -231,7 +231,7 @@
yann@1201
    60
     __typeof (mem) __atg8_memp = (mem);					      \
yann@1201
    61
     __typeof (*(mem)) __atg8_value = (value);				      \
yann@1201
    62
     do {								      \
yann@1201
    63
-      __atg8_oldval = *__atg8_memp;					      \
yann@1201
    64
+      __atg8_oldval = *(volatile __typeof (mem))__atg8_memp;		      \
yann@1201
    65
       if (__atg8_oldval >= __atg8_value)				      \
yann@1201
    66
 	break;								      \
yann@1201
    67
     } while (__builtin_expect						      \
yann@1201
    68
@@ -248,7 +248,7 @@
yann@1201
    69
     __typeof (mem) __atg9_memp = (mem);					      \
yann@1201
    70
     __typeof (*(mem)) __atg9_value = (value);				      \
yann@1201
    71
     do {								      \
yann@1201
    72
-      __atg9_oldv = *__atg9_memp;					      \
yann@1201
    73
+      __atg9_oldv = *(volatile __typeof (mem))__atg9_memp;		      \
yann@1201
    74
       if (__atg9_oldv >= __atg9_value)					      \
yann@1201
    75
 	break;								      \
yann@1201
    76
     } while (__builtin_expect						      \
yann@1201
    77
@@ -266,7 +266,7 @@
yann@1201
    78
     __typeof (mem) __atg10_memp = (mem);				      \
yann@1201
    79
     __typeof (*(mem)) __atg10_value = (value);				      \
yann@1201
    80
     do {								      \
yann@1201
    81
-      __atg10_oldval = *__atg10_memp;					      \
yann@1201
    82
+      __atg10_oldval = *(volatile __typeof (mem))__atg10_memp;		      \
yann@1201
    83
       if (__atg10_oldval <= __atg10_value)				      \
yann@1201
    84
 	break;								      \
yann@1201
    85
     } while (__builtin_expect						      \
yann@1201
    86
@@ -350,7 +350,7 @@
yann@1201
    87
 									      \
yann@1201
    88
      do									      \
yann@1201
    89
        {								      \
yann@1201
    90
-	 __atg11_oldval = *__atg11_memp;				      \
yann@1201
    91
+	 __atg11_oldval = *(volatile __typeof (mem))__atg11_memp;	      \
yann@1201
    92
 	 if (__builtin_expect (__atg11_oldval <= 0, 0))			      \
yann@1201
    93
 	   break;							      \
yann@1201
    94
        }								      \
yann@1201
    95
@@ -389,7 +389,7 @@
yann@1201
    96
      __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit));	      \
yann@1201
    97
 									      \
yann@1201
    98
      do									      \
yann@1201
    99
-       __atg14_old = (*__atg14_memp);					      \
yann@1201
   100
+       __atg14_old = (*(volatile __typeof (mem))__atg14_memp);		      \
yann@1201
   101
      while (__builtin_expect						      \
yann@1201
   102
 	    (atomic_compare_and_exchange_bool_acq (__atg14_memp,	      \
yann@1201
   103
 						   __atg14_old | __atg14_mask,\
yann@1201
   104
@@ -407,7 +407,7 @@
yann@1201
   105
     __typeof (*(mem)) __atg15_mask = (mask);				      \
yann@1201
   106
 									      \
yann@1201
   107
     do									      \
yann@1201
   108
-      __atg15_old = (*__atg15_memp);					      \
yann@1201
   109
+      __atg15_old = (*(volatile __typeof (mem))__atg15_memp);		      \
yann@1201
   110
     while (__builtin_expect						      \
yann@1201
   111
 	   (atomic_compare_and_exchange_bool_acq (__atg15_memp,		      \
yann@1201
   112
 						  __atg15_old & __atg15_mask, \
yann@1201
   113
@@ -423,7 +423,7 @@
yann@1201
   114
      __typeof (*(mem)) __atg16_mask = (mask);				      \
yann@1201
   115
 									      \
yann@1201
   116
      do									      \
yann@1201
   117
-       __atg16_old = (*__atg16_memp);					      \
yann@1201
   118
+       __atg16_old = (*(volatile __typeof (mem))__atg16_memp);		      \
yann@1201
   119
      while (__builtin_expect						      \
yann@1201
   120
 	    (atomic_compare_and_exchange_bool_acq (__atg16_memp,	      \
yann@1201
   121
 						   __atg16_old & __atg16_mask,\
yann@1201
   122
@@ -441,7 +441,7 @@
yann@1201
   123
     __typeof (*(mem)) __atg17_mask = (mask);				      \
yann@1201
   124
 									      \
yann@1201
   125
     do									      \
yann@1201
   126
-      __atg17_old = (*__atg17_memp);					      \
yann@1201
   127
+      __atg17_old = (*(volatile __typeof (mem))__atg17_memp);		      \
yann@1201
   128
     while (__builtin_expect						      \
yann@1201
   129
 	   (atomic_compare_and_exchange_bool_acq (__atg17_memp,		      \
yann@1201
   130
 						  __atg17_old | __atg17_mask, \
yann@1201
   131
@@ -457,7 +457,7 @@
yann@1201
   132
     __typeof (*(mem)) __atg18_mask = (mask);				      \
yann@1201
   133
 									      \
yann@1201
   134
     do									      \
yann@1201
   135
-      __atg18_old = (*__atg18_memp);					      \
yann@1201
   136
+      __atg18_old = (*(volatile __typeof (mem))__atg18_memp);		      \
yann@1201
   137
     while (__builtin_expect						      \
yann@1201
   138
 	   (catomic_compare_and_exchange_bool_acq (__atg18_memp,	      \
yann@1201
   139
 						   __atg18_old | __atg18_mask,\
yann@1201
   140
@@ -473,7 +473,7 @@
yann@1201
   141
      __typeof (*(mem)) __atg19_mask = (mask);				      \
yann@1201
   142
 									      \
yann@1201
   143
      do									      \
yann@1201
   144
-       __atg19_old = (*__atg19_memp);					      \
yann@1201
   145
+       __atg19_old = (*(volatile __typeof (mem))__atg19_memp);		      \
yann@1201
   146
      while (__builtin_expect						      \
yann@1201
   147
 	    (atomic_compare_and_exchange_bool_acq (__atg19_memp,	      \
yann@1201
   148
 						   __atg19_old | __atg19_mask,\
yann@1201
   149
diff -durN glibc-2_9.orig/nptl/Makefile glibc-2_9/nptl/Makefile
yann@1201
   150
--- glibc-2_9.orig/nptl/Makefile	2008-11-12 14:38:23.000000000 +0100
yann@1201
   151
+++ glibc-2_9/nptl/Makefile	2009-02-02 22:01:12.000000000 +0100
yann@1201
   152
@@ -262,9 +262,9 @@
yann@1201
   153
 # Files which must not be linked with libpthread.
yann@1201
   154
 tests-nolibpthread = tst-unload
yann@1201
   155
 
yann@1201
   156
-# This sets the stack resource limit to 1023kb, which is not a multiple
yann@1201
   157
-# of the page size since every architecture's page size is > 1k.
yann@1201
   158
-tst-oddstacklimit-ENV = ; ulimit -s 1023;
yann@1201
   159
+# This sets the stack resource limit to 8193kb, which is not a multiple
yann@1201
   160
+# of the page size since every architecture's page size is 4096 bytes.
yann@1201
   161
+tst-oddstacklimit-ENV = ; ulimit -s 8193;
yann@1201
   162
 
yann@1201
   163
 distribute = eintr.c tst-cleanup4aux.c
yann@1201
   164
 
yann@1201
   165
@@ -423,6 +423,35 @@
yann@1201
   166
 CFLAGS-tst-cleanupx4.c += -fexceptions
yann@1201
   167
 CFLAGS-tst-oncex3.c += -fexceptions
yann@1201
   168
 CFLAGS-tst-oncex4.c += -fexceptions
yann@1201
   169
+
yann@1201
   170
+ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
yann@1201
   171
+LDFLAGS-tst-cancelx2 += $(ldflags-libgcc_s)
yann@1201
   172
+LDFLAGS-tst-cancelx3 += $(ldflags-libgcc_s)
yann@1201
   173
+LDFLAGS-tst-cancelx4 += $(ldflags-libgcc_s)
yann@1201
   174
+LDFLAGS-tst-cancelx5 += $(ldflags-libgcc_s)
yann@1201
   175
+LDFLAGS-tst-cancelx6 += $(ldflags-libgcc_s)
yann@1201
   176
+LDFLAGS-tst-cancelx7 += $(ldflags-libgcc_s)
yann@1201
   177
+LDFLAGS-tst-cancelx8 += $(ldflags-libgcc_s)
yann@1201
   178
+LDFLAGS-tst-cancelx9 += $(ldflags-libgcc_s)
yann@1201
   179
+LDFLAGS-tst-cancelx10 += $(ldflags-libgcc_s)
yann@1201
   180
+LDFLAGS-tst-cancelx11 += $(ldflags-libgcc_s)
yann@1201
   181
+LDFLAGS-tst-cancelx12 += $(ldflags-libgcc_s)
yann@1201
   182
+LDFLAGS-tst-cancelx13 += $(ldflags-libgcc_s)
yann@1201
   183
+LDFLAGS-tst-cancelx14 += $(ldflags-libgcc_s)
yann@1201
   184
+LDFLAGS-tst-cancelx15 += $(ldflags-libgcc_s)
yann@1201
   185
+LDFLAGS-tst-cancelx16 += $(ldflags-libgcc_s)
yann@1201
   186
+LDFLAGS-tst-cancelx17 += $(ldflags-libgcc_s)
yann@1201
   187
+LDFLAGS-tst-cancelx18 += $(ldflags-libgcc_s)
yann@1201
   188
+LDFLAGS-tst-cancelx20 += $(ldflags-libgcc_s)
yann@1201
   189
+LDFLAGS-tst-cancelx21 += $(ldflags-libgcc_s)
yann@1201
   190
+LDFLAGS-tst-cleanupx0 += $(ldflags-libgcc_s)
yann@1201
   191
+LDFLAGS-tst-cleanupx1 += $(ldflags-libgcc_s)
yann@1201
   192
+LDFLAGS-tst-cleanupx2 += $(ldflags-libgcc_s)
yann@1201
   193
+LDFLAGS-tst-cleanupx3 += $(ldflags-libgcc_s)
yann@1201
   194
+LDFLAGS-tst-cleanupx4 += $(ldflags-libgcc_s)
yann@1201
   195
+LDFLAGS-tst-oncex3 += $(ldflags-libgcc_s)
yann@1201
   196
+LDFLAGS-tst-oncex4 += $(ldflags-libgcc_s)
yann@1201
   197
+
yann@1201
   198
 CFLAGS-tst-align.c += $(stack-align-test-flags)
yann@1201
   199
 CFLAGS-tst-align3.c += $(stack-align-test-flags)
yann@1201
   200
 CFLAGS-tst-initializers1.c = -W -Wall -Werror
yann@1201
   201
diff -durN glibc-2_9.orig/nptl/pthread_barrier_wait.c glibc-2_9/nptl/pthread_barrier_wait.c
yann@1201
   202
--- glibc-2_9.orig/nptl/pthread_barrier_wait.c	2007-08-01 06:18:50.000000000 +0200
yann@1201
   203
+++ glibc-2_9/nptl/pthread_barrier_wait.c	2009-02-02 22:01:12.000000000 +0100
yann@1201
   204
@@ -64,7 +64,7 @@
yann@1201
   205
       do
yann@1201
   206
 	lll_futex_wait (&ibarrier->curr_event, event,
yann@1201
   207
 			ibarrier->private ^ FUTEX_PRIVATE_FLAG);
yann@1201
   208
-      while (event == ibarrier->curr_event);
yann@1201
   209
+      while (event == *(volatile unsigned int *)&ibarrier->curr_event);
yann@1201
   210
     }
yann@1201
   211
 
yann@1201
   212
   /* Make sure the init_count is stored locally or in a register.  */
yann@1201
   213
diff -durN glibc-2_9.orig/nptl/sysdeps/pthread/Makefile glibc-2_9/nptl/sysdeps/pthread/Makefile
yann@1201
   214
--- glibc-2_9.orig/nptl/sysdeps/pthread/Makefile	2006-02-28 08:09:41.000000000 +0100
yann@1201
   215
+++ glibc-2_9/nptl/sysdeps/pthread/Makefile	2009-02-02 22:01:12.000000000 +0100
yann@1201
   216
@@ -41,7 +41,9 @@
yann@1201
   217
 
yann@1201
   218
 ifeq ($(have-forced-unwind),yes)
yann@1201
   219
 tests += tst-mqueue8x
yann@1201
   220
+ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
yann@1201
   221
 CFLAGS-tst-mqueue8x.c += -fexceptions
yann@1201
   222
+LDFLAGS-tst-mqueue8x += $(ldflags-libgcc_s) 
yann@1201
   223
 endif
yann@1201
   224
 endif
yann@1201
   225
 
yann@1201
   226
diff -durN glibc-2_9.orig/stdio-common/Makefile glibc-2_9/stdio-common/Makefile
yann@1201
   227
--- glibc-2_9.orig/stdio-common/Makefile	2008-07-08 18:32:28.000000000 +0200
yann@1201
   228
+++ glibc-2_9/stdio-common/Makefile	2009-02-02 22:01:12.000000000 +0100
yann@1201
   229
@@ -80,7 +80,7 @@
yann@1201
   230
 	$(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
yann@1201
   231
 endif
yann@1201
   232
 
yann@1201
   233
-CFLAGS-vfprintf.c = -Wno-uninitialized
yann@1201
   234
+CFLAGS-vfprintf.c = -Wno-uninitialized -fno-delayed-branch
yann@1201
   235
 CFLAGS-vfwprintf.c = -Wno-uninitialized
yann@1201
   236
 CFLAGS-tst-printf.c = -Wno-format
yann@1201
   237
 CFLAGS-tstdiomisc.c = -Wno-format
yann@1201
   238
diff -durN glibc-2_9.orig/sunrpc/clnt_udp.c glibc-2_9/sunrpc/clnt_udp.c
yann@1201
   239
--- glibc-2_9.orig/sunrpc/clnt_udp.c	2008-07-26 10:42:44.000000000 +0200
yann@1201
   240
+++ glibc-2_9/sunrpc/clnt_udp.c	2009-02-02 22:01:12.000000000 +0100
yann@1201
   241
@@ -462,7 +462,7 @@
yann@1201
   242
       while (inlen < 0 && errno == EINTR);
yann@1201
   243
       if (inlen < 0)
yann@1201
   244
 	{
yann@1201
   245
-	  if (errno == EWOULDBLOCK)
yann@1201
   246
+	  if (errno == EWOULDBLOCK || errno == EAGAIN)
yann@1201
   247
 	    continue;
yann@1201
   248
 	  cu->cu_error.re_errno = errno;
yann@1201
   249
 	  return (cu->cu_error.re_status = RPC_CANTRECV);