summaryrefslogtreecommitdiff
path: root/src/inc/regdisp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/regdisp.h')
-rw-r--r--src/inc/regdisp.h67
1 files changed, 16 insertions, 51 deletions
diff --git a/src/inc/regdisp.h b/src/inc/regdisp.h
index d08c44c904..a361dca719 100644
--- a/src/inc/regdisp.h
+++ b/src/inc/regdisp.h
@@ -275,28 +275,7 @@ inline TADDR GetRegdisplayStackMark(REGDISPLAY *display) {
}
#else // none of the above processors
-
-PORTABILITY_WARNING("RegDisplay functions are not implemented on this platform.")
-
-struct REGDISPLAY : public REGDISPLAY_BASE {
- size_t * FramePtr;
- SLOT * pPC;
-};
-
-inline TADDR GetRegdisplayFP(REGDISPLAY *display) {
- LIMITED_METHOD_CONTRACT;
- return (TADDR)*(display->FramePtr);
-}
-
-inline BOOL IsInCalleesFrames(REGDISPLAY *display, LPVOID stackPointer) {
- LIMITED_METHOD_CONTRACT;
- return FALSE;
-}
-inline LPVOID GetRegdisplayStackMark(REGDISPLAY *display) {
- LIMITED_METHOD_CONTRACT;
- return (LPVOID)display->SP;
-}
-
+#error "RegDisplay functions are not implemented on this platform."
#endif
#if defined(_WIN64) || defined(_TARGET_ARM_) || (defined(_TARGET_X86_) && defined(WIN64EXCEPTIONS))
@@ -417,7 +396,7 @@ inline void FillRegDisplay(const PREGDISPLAY pRD, PT_CONTEXT pctx, PT_CONTEXT pC
#elif defined(_TARGET_X86_) // _TARGET_ARM_
for (int i = 0; i < 7; i++)
{
- *(&pRD->ctxPtrsOne.Esi + i) = (&pctx->Esi + i);
+ *(&pRD->ctxPtrsOne.Edi + i) = (&pctx->Edi + i);
}
#else // _TARGET_X86_
PORTABILITY_ASSERT("FillRegDisplay");
@@ -477,35 +456,21 @@ inline void CopyRegDisplay(const PREGDISPLAY pInRD, PREGDISPLAY pOutRD, T_CONTEX
inline size_t * getRegAddr (unsigned regNum, PTR_CONTEXT regs)
{
#ifdef _TARGET_X86_
- switch (regNum)
+ _ASSERTE(regNum < 8);
+
+ static const SIZE_T OFFSET_OF_REGISTERS[] =
{
- case 0:
- return (size_t *)&regs->Eax;
- break;
- case 1:
- return (size_t *)&regs->Ecx;
- break;
- case 2:
- return (size_t *)&regs->Edx;
- break;
- case 3:
- return (size_t *)&regs->Ebx;
- break;
- case 4:
- return (size_t *)&regs->Esp;
- break;
- case 5:
- return (size_t *)&regs->Ebp;
- break;
- case 6:
- return (size_t *)&regs->Esi;
- break;
- case 7:
- return (size_t *)&regs->Edi;
- break;
- default:
- _ASSERTE (!"unknown regNum");
- }
+ offsetof(CONTEXT, Eax),
+ offsetof(CONTEXT, Ecx),
+ offsetof(CONTEXT, Edx),
+ offsetof(CONTEXT, Ebx),
+ offsetof(CONTEXT, Esp),
+ offsetof(CONTEXT, Ebp),
+ offsetof(CONTEXT, Esi),
+ offsetof(CONTEXT, Edi),
+ };
+
+ return (PTR_size_t)(PTR_BYTE(regs) + OFFSET_OF_REGISTERS[regNum]);
#elif defined(_TARGET_AMD64_)
_ASSERTE(regNum < 16);
return &regs->Rax + regNum;