summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-libs/pth/files/pth-2.0.7-ia64.patch')
-rw-r--r--dev-libs/pth/files/pth-2.0.7-ia64.patch30
1 files changed, 30 insertions, 0 deletions
diff --git a/dev-libs/pth/files/pth-2.0.7-ia64.patch b/dev-libs/pth/files/pth-2.0.7-ia64.patch
new file mode 100644
index 000000000000..8b08b82ca6c1
--- /dev/null
+++ b/dev-libs/pth/files/pth-2.0.7-ia64.patch
@@ -0,0 +1,30 @@
+# http://bugs.debian.org/225780
+diff -Naurp pth.orig/pth_sched.c pth/pth_sched.c
+--- pth.orig/pth_sched.c 2009-07-16 23:16:52.000000000 +0000
++++ pth/pth_sched.c 2009-07-16 23:20:51.000000000 +0000
+@@ -297,8 +297,15 @@ intern void *pth_scheduler(void *dummy)
+ /*
+ * Check for stack overflow
+ */
++#ifndef __ia64__
+ if (pth_current->stackguard != NULL) {
+ if (*pth_current->stackguard != 0xDEAD) {
++#else
++ /* On ia64 the stack grows down but the bottom part is used for register
++ * backing store which grows up. So we check for a meet in the middle
++ */
++ if (pth_current->mctx.uc.uc_mcontext.sc_gr[12] <= pth_current->mctx.uc.uc_mcontext.sc_ar_bsp) {
++#endif
+ pth_debug3("pth_scheduler: stack overflow detected for thread 0x%lx (\"%s\")",
+ (unsigned long)pth_current, pth_current->name);
+ /*
+@@ -324,7 +331,9 @@ intern void *pth_scheduler(void *dummy)
+ pth_current->state = PTH_STATE_DEAD;
+ kill(getpid(), SIGSEGV);
+ }
++#ifndef __ia64__
+ }
++#endif
+
+ /*
+ * If previous thread is now marked as dead, kick it out