From: michi Date: Thu, 7 Jun 2007 11:05:01 +0000 (+0000) Subject: * src/vm/jit/x86_64/linux/md-os.c (md_signal_handler_sigusr1): Implemented. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=0e342fde4252e64af74380216b4979a9d4e9a8f7;p=cacao.git * src/vm/jit/x86_64/linux/md-os.c (md_signal_handler_sigusr1): Implemented. --HG-- branch : exact-gc --- diff --git a/src/vm/jit/x86_64/linux/md-os.c b/src/vm/jit/x86_64/linux/md-os.c index 4ddaac8ee..d0b063cd9 100644 --- a/src/vm/jit/x86_64/linux/md-os.c +++ b/src/vm/jit/x86_64/linux/md-os.c @@ -217,6 +217,36 @@ void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p) } +/* md_signal_handler_sigusr1 *************************************************** + + Signal handler for suspending threads. + +*******************************************************************************/ + +#if defined(ENABLE_THREADS) && defined(ENABLE_GC_CACAO) +void md_signal_handler_sigusr1(int sig, siginfo_t *siginfo, void *_p) +{ + ucontext_t *_uc; + mcontext_t *_mc; + u1 *pc; + u1 *sp; + + _uc = (ucontext_t *) _p; + _mc = &_uc->uc_mcontext; + + /* ATTENTION: Don't use CACAO's internal REG_* defines as they are + different to the ones in . */ + + /* get the PC and SP for this thread */ + pc = (u1 *) _mc->gregs[REG_RIP]; + sp = (u1 *) _mc->gregs[REG_RSP]; + + /* now suspend the current thread */ + threads_suspend_ack(pc, sp); +} +#endif + + /* md_signal_handler_sigusr2 *************************************************** Signal handler for profiling sampling.