summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/signal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/signal.cc')
-rw-r--r--winsup/cygwin/signal.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
index 94faaf308..467c919c3 100644
--- a/winsup/cygwin/signal.cc
+++ b/winsup/cygwin/signal.cc
@@ -667,7 +667,17 @@ sigaltstack (const stack_t *ss, stack_t *oss)
}
}
if (oss)
- memcpy (oss, &me.altstack, sizeof *oss);
+ {
+ char stack_marker;
+ memcpy (oss, &me.altstack, sizeof *oss);
+ if (!me.altstack.ss_flags && me.altstack.ss_sp)
+ {
+ if (&stack_marker >= (char *) me.altstack.ss_sp
+ && &stack_marker < (char *) me.altstack.ss_sp
+ + me.altstack.ss_size)
+ oss->ss_flags = SS_ONSTACK;
+ }
+ }
}
__except (EFAULT)
{