summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/gc.c b/gc.c
index 9b3eee3..f507872 100644
--- a/gc.c
+++ b/gc.c
@@ -39,14 +39,10 @@
*/
#define __libc_ia64_register_backing_store_base (4ULL<<61)
#else
-#ifdef HAVE_UNWIND_H
-#include <unwind.h>
-#else
#pragma weak __libc_ia64_register_backing_store_base
extern unsigned long __libc_ia64_register_backing_store_base;
#endif
#endif
-#endif
#if defined _WIN32 || defined __CYGWIN__
#include <windows.h>
@@ -1362,21 +1358,14 @@ garbage_collect()
{
ucontext_t ctx;
VALUE *top, *bot;
-#ifdef HAVE_UNWIND_H
- _Unwind_Context *unwctx = _UNW_createContextForSelf();
-#endif
-
getcontext(&ctx);
mark_locations_array((VALUE*)&ctx.uc_mcontext,
((size_t)(sizeof(VALUE)-1 + sizeof ctx.uc_mcontext)/sizeof(VALUE)));
-#ifdef HAVE_UNWIND_H
- _UNW_currentContext(unwctx);
- bot = (VALUE*)(long)_UNW_getAR(unwctx, _UNW_AR_BSP);
- top = (VALUE*)(long)_UNW_getAR(unwctx, _UNW_AR_BSPSTORE);
- _UNW_destroyContext(unwctx);
-#else
bot = (VALUE*)__libc_ia64_register_backing_store_base;
- top = (VALUE*)ctx.uc_mcontext.IA64_BSPSTORE;
+#if defined(__FreeBSD__)
+ top = (VALUE*)ctx.uc_mcontext.mc_special.bspstore;
+#else
+ top = (VALUE*)ctx.uc_mcontext.sc_ar_bsp;
#endif
rb_gc_mark_locations(bot, top);
}