diff options
Diffstat (limited to 'src/inc/regdisp.h')
-rw-r--r-- | src/inc/regdisp.h | 67 |
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 *)®s->Eax; - break; - case 1: - return (size_t *)®s->Ecx; - break; - case 2: - return (size_t *)®s->Edx; - break; - case 3: - return (size_t *)®s->Ebx; - break; - case 4: - return (size_t *)®s->Esp; - break; - case 5: - return (size_t *)®s->Ebp; - break; - case 6: - return (size_t *)®s->Esi; - break; - case 7: - return (size_t *)®s->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 ®s->Rax + regNum; |