patches/glibc/2.9/370-hppa_glibc-2.7-hppa-nptl-carlos.patch
author Anthony Foiani <anthony.foiani@gmail.com>
Thu May 19 23:06:16 2011 +0200 (2011-05-19)
changeset 2461 ec30b191f0e3
parent 1201 c9967a6e3b25
permissions -rw-r--r--
complibs/ppl: build only C and C++ interfaces for PPL

By default, PPL wants to build interfaces for any of a variety of
langauges it finds on the local host (python, java, possibly perl, also
more esoteric languages such as ocaml and prolog).

These extra interfaces can double the compile time for the library. For
single-process builds, I found a savings of more than 40%:

default / j1: 716s total, 143.2s avg, 0.52s stdev
just_c / j1: 406s total, 81.2s avg, 0.33s stdev
just_c_cpp / j1: 413s total, 82.6s avg, 0.22s stdev

And for multi-process builds, it approached 50%:

default / j4: 625s total, 125.0s avg, 0.57s stdev
just_c / j4: 338s total, 67.6s avg, 1.25s stdev
just_c_cpp / j4: 327s total, 65.4s avg, 0.36s stdev

Since the PPL we build within ct-ng is only used by GCC, we only need to
build the C and C++ interfaces.

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