2007-07-02 Hans Boehm <Hans.Boehm@hp.com>
authorhboehm <hboehm>
Mon, 2 Jul 2007 17:17:46 +0000 (17:17 +0000)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 26 Jul 2011 17:06:41 +0000 (21:06 +0400)
* mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext()
on ARM/Linux.  Check getcontext() return value.

ChangeLog
mach_dep.c

index a68569a..47f9275 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-02  Hans Boehm <Hans.Boehm@hp.com>
+
+       * mach_dep.c (GC_with_callee_saves_pushed): Don't use getcontext()
+       on ARM/Linux.  Check getcontext() return value.
+
 2007-06-29  Hans Boehm <Hans.Boehm@hp.com>
 
        * backgraph.c (per_object_func): Make argument types consistent.
index eba019d..4f05843 100644 (file)
@@ -174,10 +174,12 @@ void GC_with_callee_saves_pushed(void (*fn)(ptr_t, void *),
 
 #   if defined(HAVE_PUSH_REGS)
       GC_push_regs();
-#   elif defined(UNIX_LIKE) && !defined(DARWIN)
+#   elif defined(UNIX_LIKE) && !defined(DARWIN) && !defined(ARM32)
       /* Older versions of Darwin seem to lack getcontext(). */
+      /* ARM Linux often doesn't support a real getcontext(). */
       ucontext_t ctxt;
-      getcontext(&ctxt);
+      if (getcontext(&ctxt) < 0)
+       ABORT ("Getcontext failed: Use another register retrieval method?");
       context = &ctxt;
 #     if defined(SPARC) || defined(IA64)
         /* On a register window machine, we need to save register      */