fix (extracted part of) libunwind for x86_64

I had mixed up EBP vs. REG_EBP, etc., in extracting the x86_64 code.
This commit is contained in:
Matthew Flatt 2013-08-12 15:01:27 -06:00
parent 2d8edeffe8
commit 8f9e6529da

View File

@ -2860,6 +2860,43 @@ static uint8_t dwarf_to_unw_regnum_map[17] =
};
#endif
#ifdef PLAIN_X86
/* DWARF column numbers: */
#define EAX 0
#define ECX 1
#define EDX 2
#define EBX 3
#define ESP 4
#define EBP 5
#define ESI 6
#define EDI 7
#define EIP 8
#define EFLAGS 9
#define TRAPNO 10
#define ST0 11
#endif
#ifdef UNW_X86_64
/* DWARF column numbers for x86_64: */
#define RAX 0
#define RDX 1
#define RCX 2
#define RBX 3
#define RSI 4
#define RDI 5
#define RBP 6
#define RSP 7
#define R8 8
#define R9 9
#define R10 10
#define R11 11
#define R12 12
#define R13 13
#define R14 14
#define R15 15
#define RIP 16
#endif
int
unw_get_reg (unw_cursor_t *cursor, int regnum, unw_word_t *valp)
{
@ -2908,7 +2945,7 @@ unw_get_reg (unw_cursor_t *cursor, int regnum, unw_word_t *valp)
case UNW_X86_64_RIP:
c->dwarf.ip = *valp; /* also update the RIP cache */
loc = c->dwarf.loc[REG_RIP];
loc = c->dwarf.loc[RIP];
break;
case UNW_X86_64_CFA:
@ -2927,23 +2964,23 @@ unw_get_reg (unw_cursor_t *cursor, int regnum, unw_word_t *valp)
return 0;
}
else
loc = c->dwarf.loc[(regnum == UNW_X86_64_RAX) ? REG_RAX : REG_RDX];
loc = c->dwarf.loc[(regnum == UNW_X86_64_RAX) ? RAX : RDX];
break;
case UNW_X86_64_RCX: loc = c->dwarf.loc[REG_RCX]; break;
case UNW_X86_64_RBX: loc = c->dwarf.loc[REG_RBX]; break;
case UNW_X86_64_RCX: loc = c->dwarf.loc[RCX]; break;
case UNW_X86_64_RBX: loc = c->dwarf.loc[RBX]; break;
case UNW_X86_64_RBP: loc = c->dwarf.loc[REG_RBP]; break;
case UNW_X86_64_RSI: loc = c->dwarf.loc[REG_RSI]; break;
case UNW_X86_64_RDI: loc = c->dwarf.loc[REG_RDI]; break;
case UNW_X86_64_R8: loc = c->dwarf.loc[REG_R8]; break;
case UNW_X86_64_R9: loc = c->dwarf.loc[REG_R9]; break;
case UNW_X86_64_R10: loc = c->dwarf.loc[REG_R10]; break;
case UNW_X86_64_R11: loc = c->dwarf.loc[REG_R11]; break;
case UNW_X86_64_R12: loc = c->dwarf.loc[REG_R12]; break;
case UNW_X86_64_R13: loc = c->dwarf.loc[REG_R13]; break;
case UNW_X86_64_R14: loc = c->dwarf.loc[REG_R14]; break;
case UNW_X86_64_R15: loc = c->dwarf.loc[REG_R15]; break;
case UNW_X86_64_RBP: loc = c->dwarf.loc[RBP]; break;
case UNW_X86_64_RSI: loc = c->dwarf.loc[RSI]; break;
case UNW_X86_64_RDI: loc = c->dwarf.loc[RDI]; break;
case UNW_X86_64_R8: loc = c->dwarf.loc[R8]; break;
case UNW_X86_64_R9: loc = c->dwarf.loc[R9]; break;
case UNW_X86_64_R10: loc = c->dwarf.loc[R10]; break;
case UNW_X86_64_R11: loc = c->dwarf.loc[R11]; break;
case UNW_X86_64_R12: loc = c->dwarf.loc[R12]; break;
case UNW_X86_64_R13: loc = c->dwarf.loc[R13]; break;
case UNW_X86_64_R14: loc = c->dwarf.loc[R14]; break;
case UNW_X86_64_R15: loc = c->dwarf.loc[R15]; break;
default:
Debug (1, "bad register number %u\n", regnum);
@ -3052,43 +3089,6 @@ int dwarf_to_unw_regnum(reg)
#endif
}
#ifdef PLAIN_X86
/* DWARF column numbers: */
#define EAX 0
#define ECX 1
#define EDX 2
#define EBX 3
#define ESP 4
#define EBP 5
#define ESI 6
#define EDI 7
#define EIP 8
#define EFLAGS 9
#define TRAPNO 10
#define ST0 11
#endif
#ifdef UNW_X86_64
/* DWARF column numbers for x86_64: */
#define RAX 0
#define RDX 1
#define RCX 2
#define RBX 3
#define RSI 4
#define RDI 5
#define RBP 6
#define RSP 7
#define R8 8
#define R9 9
#define R10 10
#define R11 11
#define R12 12
#define R13 13
#define R14 14
#define R15 15
#define RIP 16
#endif
#ifdef PLAIN_X86
static inline int
common_init (struct cursor *c)