请问 DWARF 寄存器号和 MIPS32 CPU 寄存器之间的规范映射是什么?前 32 个是通用寄存器,但除此之外(例如 lo/hi)呢?
非常欢迎提供权威文档的链接。 DWARF 本身并没有记录这种事情,它通常是 ABI 的一部分,但 ABI 手册似乎没有提到 DWARF。
到目前为止我能找到的最好的就是 GDB 源代码中的
mips-tdep.h
。我不认为它涵盖了所有 MIPS 扩展,但浮点寄存器(与用户态程序调试相关)都在那里。枚举如下:
enum
{
MIPS_ZERO_REGNUM = 0, /* Read-only register, always 0. */
MIPS_AT_REGNUM = 1,
MIPS_V0_REGNUM = 2, /* Function integer return value. */
MIPS_A0_REGNUM = 4, /* Loc of first arg during a subr call. */
MIPS_S2_REGNUM = 18, /* Contains return address in MIPS16 thunks. */
MIPS_T9_REGNUM = 25, /* Contains address of callee in PIC. */
MIPS_GP_REGNUM = 28,
MIPS_SP_REGNUM = 29,
MIPS_RA_REGNUM = 31,
MIPS_PS_REGNUM = 32, /* Contains processor status. */
MIPS_EMBED_LO_REGNUM = 33,
MIPS_EMBED_HI_REGNUM = 34,
MIPS_EMBED_BADVADDR_REGNUM = 35,
MIPS_EMBED_CAUSE_REGNUM = 36,
MIPS_EMBED_PC_REGNUM = 37,
MIPS_EMBED_FP0_REGNUM = 38,
MIPS_UNUSED_REGNUM = 73, /* Never used, FIXME. */
MIPS_FIRST_EMBED_REGNUM = 74, /* First CP0 register for embedded use. */
MIPS_PRID_REGNUM = 89, /* Processor ID. */
MIPS_LAST_EMBED_REGNUM = 89 /* Last one. */
};