https://gcc.gnu.org/bugzilla/show_bug.cgi?id=28901

--- Comment #18 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Here is an example:
...
static const struct pt_regs_offset x86_32_regoffset_table[] = {
        REG_OFFSET_NAME_32("%ax",       eax),
        REG_OFFSET_NAME_32("%cx",       ecx),
        REG_OFFSET_NAME_32("%dx",       edx),
        REG_OFFSET_NAME_32("%bx",       ebx),
        REG_OFFSET_NAME_32("$stack",    esp),   /* Stack address instead of %sp
*/
        REG_OFFSET_NAME_32("%bp",       ebp),
        REG_OFFSET_NAME_32("%si",       esi),
        REG_OFFSET_NAME_32("%di",       edi),
        REG_OFFSET_END,
};

static const struct pt_regs_offset x86_64_regoffset_table[] = {
        REG_OFFSET_NAME_64("%ax",       rax),
        REG_OFFSET_NAME_64("%dx",       rdx),
        REG_OFFSET_NAME_64("%cx",       rcx),
        REG_OFFSET_NAME_64("%bx",       rbx),
        REG_OFFSET_NAME_64("%si",       rsi),
        REG_OFFSET_NAME_64("%di",       rdi),
        REG_OFFSET_NAME_64("%bp",       rbp),
        REG_OFFSET_NAME_64("%sp",       rsp),
        REG_OFFSET_NAME_64("%r8",       r8),
        REG_OFFSET_NAME_64("%r9",       r9),
        REG_OFFSET_NAME_64("%r10",      r10),
        REG_OFFSET_NAME_64("%r11",      r11),
        REG_OFFSET_NAME_64("%r12",      r12),
        REG_OFFSET_NAME_64("%r13",      r13),
        REG_OFFSET_NAME_64("%r14",      r14),
        REG_OFFSET_NAME_64("%r15",      r15),
        REG_OFFSET_END,
};

/* TODO: switching by dwarf address size */
#ifdef __x86_64__
#define regoffset_table x86_64_regoffset_table
#else
#define regoffset_table x86_32_regoffset_table
#endif
...
//use regoffset_table

Reply via email to