patches/glibc/ports-2.12.1/170-localedef-fix-trampoline.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

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