Esempio n. 1
0
  STATIC void GC_suspend_handler(int sig)
#endif
{
  int old_errno = errno;

  if (sig != GC_sig_suspend) {
#   if defined(GC_FREEBSD_THREADS)
      /* Workaround "deferred signal handling" bug in FreeBSD 9.2.      */
      if (0 == sig) return;
#   endif
    ABORT("Bad signal in suspend_handler");
  }

# if defined(IA64) || defined(HP_PA) || defined(M68K)
    GC_with_callee_saves_pushed(GC_suspend_handler_inner, NULL);
# else
    /* We believe that in all other cases the full context is already   */
    /* in the signal handler frame.                                     */
    {
#     ifdef NO_SA_SIGACTION
        void *context = 0;
#     endif
      GC_suspend_handler_inner(NULL, context);
    }
# endif
  errno = old_errno;
}
Esempio n. 2
0
STATIC void GC_push_regs_and_stack(ptr_t cold_gc_frame)
{
    GC_with_callee_saves_pushed(GC_push_current_stack, cold_gc_frame);
}