static void TimeSamplingHandler (int sig, siginfo_t *siginfo, void *context) { caddr_t pc; #if defined(OS_FREEBSD) || defined(OS_DARWIN) ucontext_t *uc = (ucontext_t *) context; #else struct ucontext *uc = (struct ucontext *) context; struct sigcontext *sc = (struct sigcontext *) &uc->uc_mcontext; #endif UNREFERENCED_PARAMETER(sig); UNREFERENCED_PARAMETER(siginfo); #if defined(IS_BGP_MACHINE) || defined(IS_BGQ_MACHINE) pc = (caddr_t)UCONTEXT_REG(uc, PPC_REG_PC); #elif defined(OS_LINUX) || defined(OS_ANDROID) # if defined(ARCH_IA32) && !defined(ARCH_IA32_x64) pc = (caddr_t)sc->eip; # elif defined(ARCH_IA32) && defined(ARCH_IA32_x64) pc = (caddr_t)sc->rip; # elif defined(ARCH_IA64) pc = (caddr_t)sc->sc_ip; # elif defined(ARCH_PPC) pc = (caddr_t)sc->regs->nip; # elif defined(ARCH_ARM) && !defined(ARCH_ARM64) pc = (caddr_t)sc->arm_pc; # elif defined(ARCH_ARM) && defined(ARCH_ARM64) pc = (caddr_t)sc->pc; # elif defined(ARCH_SPARC64) //pc = (caddr_t)sc->sigc_regs->tpc; //pc = (caddr_t)sc->mc_gregs->tpc; //pc = (caddr_t)sc->mc_gregs[MC_PC]; pc = 0; # else # error "Don't know how to get the PC for this architecture in Linux!" # endif #elif defined(OS_FREEBSD) # if defined(ARCH_IA32) && !defined(ARCH_IA32_x64) pc = (caddr_t)(uc->uc_mcontext.mc_eip); # elif defined (ARCH_IA32) && defined(ARCH_IA32_x64) pc = (caddr_t)(uc->uc_mcontext.mc_rip); # else # error "Don't know how to get the PC for this architecture in FreeBSD!" # endif #elif defined(OS_DARWIN) # if defined(ARCH_IA32) && !defined(ARCH_IA32_x64) pc = (caddr_t)((uc->uc_mcontext)->__ss.__eip); # elif defined (ARCH_IA32) && defined(ARCH_IA32_x64) pc = (caddr_t)((uc->uc_mcontext)->__ss.__rip); # else # error "Don't know how to get the PC for this architecture in Darwin!" # endif #else # error "Don't know how to get the PC for this OS!" #endif Extrae_SamplingHandler ((void*) pc); PrepareNextAlarm (); }
void PAPI_sampling_handler (int EventSet, void *address, long_long overflow_vector, void *context) { UNREFERENCED_PARAMETER(overflow_vector); UNREFERENCED_PARAMETER(context); UNREFERENCED_PARAMETER(EventSet); Extrae_SamplingHandler (address); }