Some architectures like SPARC need to apply a fixed offset to the return

address. Introduce such a constant.
This commit is contained in:
joerg 2014-04-14 18:15:17 +00:00
parent e9a654c6e7
commit 4b91d83710
2 changed files with 8 additions and 1 deletions

View File

@ -156,7 +156,7 @@ step_result DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
// The CFA is defined as the stack pointer at the call site.
// Therefore the SP is restored by setting it to the CFA.
newRegisters.setSP(cfa);
newRegisters.setIP(returnAddress);
newRegisters.setIP(returnAddress + R::RETURN_OFFSET);
// Now replace register set with the working copy.
registers = newRegisters;

View File

@ -35,6 +35,7 @@ public:
LAST_REGISTER = REGNO_X86_EIP,
LAST_RESTORE_REG = REGNO_X86_EIP,
RETURN_REG = REGNO_X86_EIP,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_x86();
@ -100,6 +101,7 @@ public:
LAST_REGISTER = REGNO_X86_64_RIP,
LAST_RESTORE_REG = REGNO_X86_64_RIP,
RETURN_REG = REGNO_X86_64_RIP,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_x86_64();
@ -168,6 +170,7 @@ public:
LAST_REGISTER = REGNO_PPC32_V31,
LAST_RESTORE_REG = REGNO_PPC32_V31,
RETURN_REG = REGNO_PPC32_LR,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_ppc32();
@ -256,6 +259,7 @@ public:
LAST_REGISTER = REGNO_ARM32_D31,
LAST_RESTORE_REG = REGNO_ARM32_SPSR,
RETURN_REG = REGNO_ARM32_SPSR,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_arm32();
@ -325,6 +329,7 @@ public:
LAST_REGISTER = REGNO_VAX_PSW,
LAST_RESTORE_REG = REGNO_VAX_PSW,
RETURN_REG = REGNO_VAX_R15,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_vax();
@ -396,6 +401,7 @@ public:
LAST_REGISTER = REGNO_M68K_FP7,
LAST_RESTORE_REG = REGNO_M68K_FP7,
RETURN_REG = REGNO_M68K_PC,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_M68K();
@ -472,6 +478,7 @@ public:
LAST_REGISTER = REGNO_SH3_PR,
LAST_RESTORE_REG = REGNO_SH3_PR,
RETURN_REG = REGNO_SH3_PR,
RETURN_OFFSET = 0,
};
__dso_hidden Registers_SH3();