Commit a0b70207 authored by Marius Wachtler's avatar Marius Wachtler

unwinding: libunwind expects dwarf reg numbers

parent 6a90c790
......@@ -57,7 +57,41 @@ const int dwarf_to_gp[] = {
Register Register::fromDwarf(int dwarf_regnum) {
assert(dwarf_regnum >= 0 && dwarf_regnum <= 16);
return Register(dwarf_to_gp[dwarf_regnum]);
Register reg(dwarf_to_gp[dwarf_regnum]);
assert(reg.getDwarfId() == dwarf_regnum);
return reg;
}
int Register::getDwarfId() const {
switch (regnum) {
case RAX.regnum:
return 0;
case RDX.regnum:
return 1;
case RCX.regnum:
return 2;
case RBX.regnum:
return 3;
case RSI.regnum:
return 4;
case RDI.regnum:
return 5;
case RBP.regnum:
return 6;
case RSP.regnum:
return 7;
case R8.regnum:
case R9.regnum:
case R10.regnum:
case R11.regnum:
case R12.regnum:
case R13.regnum:
case R14.regnum:
case R15.regnum:
return regnum;
default:
RELEASE_ASSERT(0, "not implemented");
};
}
GenericRegister GenericRegister::fromDwarf(int dwarf_regnum) {
......
......@@ -48,6 +48,7 @@ struct Register {
void dump() const;
int getDwarfId() const;
static Register fromDwarf(int dwarf_regnum);
static constexpr int numRegs() { return 16; }
......
......@@ -574,7 +574,7 @@ public:
assert(l.stack_second_offset % 8 == 0);
b = b_ptr[l.stack_second_offset / 8];
} else if (l.type == Location::Register) {
b = (Box*)get_cursor_reg(cursor, l.regnum);
b = (Box*)get_cursor_reg(cursor, l.asRegister().getDwarfId());
} else {
RELEASE_ASSERT(0, "not implemented");
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment