From 55f7a4b72697497bd3c30272f3171b8944a38267 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 25 May 2014 03:15:32 +0000 Subject: signal.c: fix stack overflow check on Mac OS X * signal.c (check_stack_overflow): fix condition to use ucontext register, mcontext_t dereference, and its member names, on Mac OS X. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46100 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ signal.c | 9 +++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94d3fb870a..395eab5d31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun May 25 12:15:30 2014 Nobuyoshi Nakada + + * signal.c (check_stack_overflow): fix condition to use ucontext + register, mcontext_t dereference, and its member names, on Mac + OS X. + Sun May 25 11:58:26 2014 Zachary Scott * enumerator.c: [DOC] Fix example to show Enumerator#peek behavior diff --git a/signal.c b/signal.c index 2e28ed471a..e24cc755c5 100644 --- a/signal.c +++ b/signal.c @@ -700,7 +700,7 @@ rb_get_next_signal(void) #if defined(USE_SIGALTSTACK) || defined(_WIN32) NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); -#if !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__)) +#if (defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__)) #elif defined __linux__ # define USE_UCONTEXT_REG 1 #elif defined __APPLE__ @@ -710,18 +710,19 @@ NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); static void check_stack_overflow(const uintptr_t addr, const ucontext_t *ctx) { - const mcontext_t *mctx = &ctx->uc_mcontext; # if defined __linux__ + const mcontext_t *mctx = &ctx->uc_mcontext; # if defined REG_RSP const greg_t sp = mctx->gregs[REG_RSP]; # else const greg_t sp = mctx->gregs[REG_ESP]; # endif # elif defined __APPLE__ + const mcontext_t mctx = ctx->uc_mcontext; # if defined(__LP64__) - const uintptr_t sp = mctx->ss.rsp; + const uintptr_t sp = mctx->__ss.__rsp; # else - const uintptr_t sp = mctx->ss.esp; + const uintptr_t sp = mctx->__ss.__esp; # endif # endif enum {pagesize = 4096}; -- cgit v1.2.3