C语言 信号处理程序 (ppc64) 中的提取程序计数器(指令指针)



在 Linux 下的信号处理程序中,可以访问挂起线程的保存上下文(所有寄存器值(。这些寄存器值显然取决于体系结构。例如,对于PowerPC Little Endian(ppcle(体系结构,ucontext->uc_regs->gp_regs是一个包含通用寄存器值的数组。

对于某些体系结构,还有定义(例如,REG_XXX定义x86-64(来标识寄存器的用途。对于ppc64le,缺少这样的定义。我怎样才能知道哪些寄存器是哪些?可用的少量 IBM 文档没有帮助...

我不知道这在任何地方都有记录。 但是,ppc64 的setup_sigcontext从构成任务状态一部分的结构pt_regs填充gp_regs数组。因此,可以将该结构作为哪些寄存器是哪些寄存器的指南。 在该结构的定义正下方还有一组PT_Rxxx定义,它确认了结构中不立即明显的映射位(例如,通用寄存器1确实在gp_regs[1]中(。