patches/glibc/ports-2.12.1/170-localedef-fix-trampoline.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 22:43:07 2011 +0200 (2011-07-17)
changeset 2893 a8a65758664f
permissions -rw-r--r--
cc/gcc: do not use the core pass-2 to build the baremetal compiler

In case we build a baremetal compiler, use the standard passes:
- core_cc is used to build the C library;
- as such, it is meant to run on build, not host;
- the final compiler is meant to run on host;

As the current final compiler step can not build a baremetal compiler,
call the core backend from the final step.

NB: Currently, newlib is built during the start_files pass, so we have
to have a core compiler by then... Once we can build the baremetal
compiler from the final cc step, then we can move the newlib build to
the proper step, and then get rid of the core pass-1 static compiler...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 #! /bin/sh -e
     2 
     3 # DP: Description: Fix localedef segfault when run under exec-shield,
     4 #        PaX or similar. (#231438, #198099)
     5 # DP: Dpatch Author: James Troup <james@nocrew.org>
     6 # DP: Patch Author: (probably) Jakub Jelinek <jakub@redhat.com>
     7 # DP: Upstream status: Unknown
     8 # DP: Status Details: Unknown
     9 # DP: Date: 2004-03-16
    10 
    11 if [ $# -ne 2 ]; then
    12     echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    13     exit 1
    14 fi
    15 case "$1" in
    16     -patch) patch -d "$2" -f --no-backup-if-mismatch -p1 < $0;;
    17     -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p1 < $0;;
    18     *)
    19 	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    20 	exit 1
    21 esac
    22 exit 0
    23 
    24 diff -durN glibc-2.12.1.orig/locale/programs/3level.h glibc-2.12.1/locale/programs/3level.h
    25 --- glibc-2.12.1.orig/locale/programs/3level.h	2007-07-16 02:54:59.000000000 +0200
    26 +++ glibc-2.12.1/locale/programs/3level.h	2009-11-13 00:49:56.000000000 +0100
    27 @@ -203,6 +203,42 @@
    28  	}
    29      }
    30  }
    31 +
    32 +/* GCC ATM seems to do a poor job with pointers to nested functions passed
    33 +   to inlined functions.  Help it a little bit with this hack.  */
    34 +#define wchead_table_iterate(tp, fn) \
    35 +do									      \
    36 +  {									      \
    37 +    struct wchead_table *t = (tp);					      \
    38 +    uint32_t index1;							      \
    39 +    for (index1 = 0; index1 < t->level1_size; index1++)			      \
    40 +      {									      \
    41 +	uint32_t lookup1 = t->level1[index1];				      \
    42 +	if (lookup1 != ((uint32_t) ~0))					      \
    43 +	  {								      \
    44 +	    uint32_t lookup1_shifted = lookup1 << t->q;			      \
    45 +	    uint32_t index2;						      \
    46 +	    for (index2 = 0; index2 < (1 << t->q); index2++)		      \
    47 +	      {								      \
    48 +		uint32_t lookup2 = t->level2[index2 + lookup1_shifted];	      \
    49 +		if (lookup2 != ((uint32_t) ~0))				      \
    50 +		  {							      \
    51 +		    uint32_t lookup2_shifted = lookup2 << t->p;		      \
    52 +		    uint32_t index3;					      \
    53 +		    for (index3 = 0; index3 < (1 << t->p); index3++)	      \
    54 +		      {							      \
    55 +			struct element_t *lookup3			      \
    56 +			  = t->level3[index3 + lookup2_shifted];	      \
    57 +			if (lookup3 != NULL)				      \
    58 +			  fn ((((index1 << t->q) + index2) << t->p) + index3, \
    59 +			      lookup3);					      \
    60 +		      }							      \
    61 +		  }							      \
    62 +	      }								      \
    63 +	  }								      \
    64 +      }									      \
    65 +  } while (0)
    66 +
    67  #endif
    68  
    69  #ifndef NO_FINALIZE