在信号处理程序 (ppc64) 中提取程序计数器(指令指针)

Extract Program Counter (Instruction Pointer) in signal handler (ppc64)

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

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

我不知道这在任何地方都有记录。但是,setup_sigcontext for ppc64 fills in the gp_regs array from a struct pt_regs 即构成任务状态的一部分。因此,该结构可以作为寄存器的指南。在该结构的定义下方还有一组 PT_Rxxx 定义,它确认了从结构中不是很明显的映射位(例如,通用寄存器 1 确实在 gp_regs[1 ]).