Author: jim
Date: 2005-09-30 00:03:39 -0600 (Fri, 30 Sep 2005)
New Revision: 1146
Added:
trunk/glibc/glibc-20050926-localedef_segfault-1.patch
Modified:
trunk/
Log:
[EMAIL PROTECTED]: jim | 2005-09-29 23:03:23 -0700
Added: glibc-20050926-localedef_segfault-1.patch
Property changes on: trunk
___________________________________________________________________
Name: svk:merge
- cc2644d5-6cf8-0310-b111-c40428001e49:/patches:1300
+ cc2644d5-6cf8-0310-b111-c40428001e49:/patches:1302
Added: trunk/glibc/glibc-20050926-localedef_segfault-1.patch
===================================================================
--- trunk/glibc/glibc-20050926-localedef_segfault-1.patch 2005-09-28
18:57:59 UTC (rev 1145)
+++ trunk/glibc/glibc-20050926-localedef_segfault-1.patch 2005-09-30
06:03:39 UTC (rev 1146)
@@ -0,0 +1,56 @@
+Submitted By: Jim Gifford (patches at jg555 dot com)
+Date: 2005-09-29
+Initial Package Version: 2.3.2
+Origin: Debian
+Upstream Status: Unknown
+Description: Fixes Segfault when using localdef.
+ This problem is only noticed when using PaX
+ and some architectures besides x86.
+ See debian bug # 231438
+
+
+--- glibc-20050926/locale/programs/3level.h.orig 2005-09-30
06:00:37.000000000 +0000
++++ glibc-20050926/locale/programs/3level.h 2005-09-30 06:01:02.000000000
+0000
+@@ -204,6 +204,42 @@
+ }
+ }
+ }
++
++/* GCC ATM seems to do a poor job with pointers to nested functions passed
++ to inlined functions. Help it a little bit with this hack. */
++#define wchead_table_iterate(tp, fn) \
++do \
++ { \
++ struct wchead_table *t = (tp); \
++ uint32_t index1; \
++ for (index1 = 0; index1 < t->level1_size; index1++)
\
++ {
\
++ uint32_t lookup1 = t->level1[index1]; \
++ if (lookup1 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup1_shifted = lookup1 << t->q; \
++ uint32_t index2; \
++ for (index2 = 0; index2 < (1 << t->q); index2++) \
++ { \
++ uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; \
++ if (lookup2 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup2_shifted = lookup2 << t->p; \
++ uint32_t index3; \
++ for (index3 = 0; index3 < (1 << t->p); index3++) \
++ { \
++ struct element_t *lookup3 \
++ = t->level3[index3 + lookup2_shifted]; \
++ if (lookup3 != NULL) \
++ fn ((((index1 << t->q) + index2) << t->p) + index3, \
++ lookup3); \
++ } \
++ } \
++ } \
++ } \
++ }
\
++ } while (0)
++
+ #endif
+
+ #ifndef NO_FINALIZE
--
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page