Refactor context register access in seh-unwind.cpp
authorJan Vorlicek <janvorli@microsoft.com>
Wed, 8 Apr 2015 11:15:32 +0000 (13:15 +0200)
committerJan Vorlicek <janvorli@microsoft.com>
Wed, 8 Apr 2015 11:15:32 +0000 (13:15 +0200)
This change refactors the native context register access to use the
MCREG_xxx macros so that it can compile on FreeBSD too.

src/pal/src/arch/i386/context.cpp
src/pal/src/exception/seh-unwind.cpp
src/pal/src/include/pal/context.h

index 5ac1905..d749f87 100644 (file)
@@ -53,195 +53,6 @@ extern void CONTEXT_CaptureContext(LPCONTEXT lpContext);
 #include <asm/ptrace.h>
 #endif  // HAVE_PT_REGS
 
-#if HAVE_GREGSET_T
-
-#ifdef BIT64
-#define MCREG_Rbx(mc)       ((mc).gregs[REG_RBX])
-#define MCREG_Rcx(mc)       ((mc).gregs[REG_RCX])
-#define MCREG_Rdx(mc)       ((mc).gregs[REG_RDX])
-#define MCREG_Rsi(mc)       ((mc).gregs[REG_RSI])
-#define MCREG_Rdi(mc)       ((mc).gregs[REG_RDI])
-#define MCREG_Rbp(mc)       ((mc).gregs[REG_RBP])
-#define MCREG_Rax(mc)       ((mc).gregs[REG_RAX])
-#define MCREG_Rip(mc)       ((mc).gregs[REG_RIP])
-#define MCREG_Rsp(mc)       ((mc).gregs[REG_RSP])
-#define MCREG_SegCs(mc)     ((mc).gregs[REG_CSGSFS])
-#define MCREG_R8(mc)        ((mc).gregs[REG_R8])
-#define MCREG_R9(mc)        ((mc).gregs[REG_R9])
-#define MCREG_R10(mc)       ((mc).gregs[REG_R10])
-#define MCREG_R11(mc)       ((mc).gregs[REG_R11])
-#define MCREG_R12(mc)       ((mc).gregs[REG_R12])
-#define MCREG_R13(mc)       ((mc).gregs[REG_R13])
-#define MCREG_R14(mc)       ((mc).gregs[REG_R14])
-#define MCREG_R15(mc)       ((mc).gregs[REG_R15])
-
-#define FPREG_Xmm(uc, index) *(M128A*)&((uc)->__fpregs_mem._xmm[index])
-
-#define FPREG_St(uc, index) *(M128A*)&((uc)->__fpregs_mem._st[index])
-
-#define FPREG_ControlWord(uc) ((uc)->__fpregs_mem.cwd)
-#define FPREG_StatusWord(uc) ((uc)->__fpregs_mem.swd)
-#define FPREG_TagWord(uc) ((uc)->__fpregs_mem.ftw)
-#define FPREG_ErrorOffset(uc) *(DWORD*)&((uc)->__fpregs_mem.rip)
-#define FPREG_ErrorSelector(uc) *(((WORD*)&((uc)->__fpregs_mem.rip)) + 2)
-#define FPREG_DataOffset(uc) *(DWORD*)&((uc)->__fpregs_mem.rdp)
-#define FPREG_DataSelector(uc) *(((WORD*)&((uc)->__fpregs_mem.rdp)) + 2)
-#define FPREG_MxCsr(uc) ((uc)->__fpregs_mem.mxcsr)
-#define FPREG_MxCsr_Mask(uc) ((uc)->__fpregs_mem.mxcr_mask)
-
-#else // BIT64
-
-#define MCREG_Ebx(mc)       ((mc).gregs[REG_EBX])
-#define MCREG_Ecx(mc)       ((mc).gregs[REG_ECX])
-#define MCREG_Edx(mc)       ((mc).gregs[REG_EDX])
-#define MCREG_Esi(mc)       ((mc).gregs[REG_ESI])
-#define MCREG_Edi(mc)       ((mc).gregs[REG_EDI])
-#define MCREG_Ebp(mc)       ((mc).gregs[REG_EBP])
-#define MCREG_Eax(mc)       ((mc).gregs[REG_EAX])
-#define MCREG_Eip(mc)       ((mc).gregs[REG_EIP])
-#define MCREG_Esp(mc)       ((mc).gregs[REG_ESP])
-#define MCREG_SegCs(mc)     ((mc).gregs[REG_CS])
-#define MCREG_SegSs(mc)     ((mc).gregs[REG_SS])
-
-#endif // BIT64
-
-#define MCREG_EFlags(mc)    ((mc).gregs[REG_EFL])
-
-#else // HAVE_GREGSET_T
-
-#ifdef BIT64
-
-// For FreeBSD, as found in x86/ucontext.h
-#define MCREG_Rbp(mc)      ((mc).mc_rbp)
-#define MCREG_Rip(mc)      ((mc).mc_rip)
-#define MCREG_Rsp(mc)      ((mc).mc_rsp)
-#define MCREG_Rsi(mc)       ((mc).mc_rsi)
-#define MCREG_Rdi(mc)      ((mc).mc_rdi)
-#define MCREG_Rbx(mc)      ((mc).mc_rbx)
-#define MCREG_Rdx(mc)      ((mc).mc_rdx)
-#define MCREG_Rcx(mc)      ((mc).mc_rcx)
-#define MCREG_Rax(mc)      ((mc).mc_rax)
-#define MCREG_R8(mc)       ((mc).mc_r8)
-#define MCREG_R9(mc)       ((mc).mc_r9)
-#define MCREG_R10(mc)      ((mc).mc_r10)
-#define MCREG_R11(mc)      ((mc).mc_r11)
-#define MCREG_R12(mc)      ((mc).mc_r12)
-#define MCREG_R13(mc)      ((mc).mc_r13)
-#define MCREG_R14(mc)      ((mc).mc_r14)
-#define MCREG_R15(mc)      ((mc).mc_r15)
-#define MCREG_EFlags(mc)    ((mc).mc_rflags)
-#define MCREG_SegCs(mc)     ((mc).mc_cs)
-
-#else // BIT64
-
-#define MCREG_Ebx(mc)       ((mc).mc_ebx)
-#define MCREG_Ecx(mc)       ((mc).mc_ecx)
-#define MCREG_Edx(mc)       ((mc).mc_edx)
-#define MCREG_Esi(mc)       ((mc).mc_esi)
-#define MCREG_Edi(mc)       ((mc).mc_edi)
-#define MCREG_Ebp(mc)       ((mc).mc_ebp)
-#define MCREG_Eax(mc)       ((mc).mc_eax)
-#define MCREG_Eip(mc)       ((mc).mc_eip)
-#define MCREG_SegCs(mc)     ((mc).mc_cs)
-#define MCREG_EFlags(mc)    ((mc).mc_eflags)
-#define MCREG_Esp(mc)       ((mc).mc_esp)
-#define MCREG_SegSs(mc)     ((mc).mc_ss)
-
-#endif // BIT64
-
-#endif // HAVE_GREGSET_T
-
-
-#if HAVE_PT_REGS
-
-#ifdef BIT64
-#define PTREG_Rbx(ptreg)    ((ptreg).rbx)
-#define PTREG_Rcx(ptreg)    ((ptreg).rcx)
-#define PTREG_Rdx(ptreg)    ((ptreg).rdx)
-#define PTREG_Rsi(ptreg)    ((ptreg).rsi)
-#define PTREG_Rdi(ptreg)    ((ptreg).rdi)
-#define PTREG_Rbp(ptreg)    ((ptreg).rbp)
-#define PTREG_Rax(ptreg)    ((ptreg).rax)
-#define PTREG_Rip(ptreg)    ((ptreg).rip)
-#define PTREG_SegCs(ptreg)  ((ptreg).cs)
-#define PTREG_SegSs(ptreg)  ((ptreg).ss)
-#define PTREG_Rsp(ptreg)    ((ptreg).rsp)
-#define PTREG_R8(ptreg)     ((ptreg).r8)
-#define PTREG_R9(ptreg)     ((ptreg).r9)
-#define PTREG_R10(ptreg)    ((ptreg).r10)
-#define PTREG_R11(ptreg)    ((ptreg).r11)
-#define PTREG_R12(ptreg)    ((ptreg).r12)
-#define PTREG_R13(ptreg)    ((ptreg).r13)
-#define PTREG_R14(ptreg)    ((ptreg).r14)
-#define PTREG_R15(ptreg)    ((ptreg).r15)
-
-#else // BIT64
-
-#define PTREG_Ebx(ptreg)    ((ptreg).ebx)
-#define PTREG_Ecx(ptreg)    ((ptreg).ecx)
-#define PTREG_Edx(ptreg)    ((ptreg).edx)
-#define PTREG_Esi(ptreg)    ((ptreg).esi)
-#define PTREG_Edi(ptreg)    ((ptreg).edi)
-#define PTREG_Ebp(ptreg)    ((ptreg).ebp)
-#define PTREG_Eax(ptreg)    ((ptreg).eax)
-#define PTREG_Eip(ptreg)    ((ptreg).eip)
-#define PTREG_SegCs(ptreg)  ((ptreg).xcs)
-#define PTREG_SegSs(ptreg)  ((ptreg).xss)
-#define PTREG_Esp(ptreg)    ((ptreg).esp)
-
-#endif // BIT64
-
-
-#define PTREG_EFlags(ptreg) ((ptreg).eflags)
-
-#endif // HAVE_PT_REGS
-
-
-
-#if HAVE_BSD_REGS_T
-
-#ifdef BIT64
-
-#define BSDREG_Rbx(reg)     ((reg).r_rbx)
-#define BSDREG_Rcx(reg)     ((reg).r_rcx)
-#define BSDREG_Rdx(reg)     ((reg).r_rdx)
-#define BSDREG_Rsi(reg)     ((reg).r_rsi)
-#define BSDREG_Rdi(reg)     ((reg).r_rdi)
-#define BSDREG_Rbp(reg)     ((reg).r_rbp)
-#define BSDREG_Rax(reg)     ((reg).r_rax)
-#define BSDREG_Rip(reg)     ((reg).r_rip)
-#define BSDREG_SegCs(reg)   ((reg).r_cs)
-#define BSDREG_SegSs(reg)   ((reg).r_ss)
-#define BSDREG_Rsp(reg)     ((reg).r_rsp)
-#define BSDREG_R8(reg)      ((reg).r_r8)
-#define BSDREG_R9(reg)      ((reg).r_r9)
-#define BSDREG_R10(reg)     ((reg).r_r10)
-#define BSDREG_R11(reg)     ((reg).r_r11)
-#define BSDREG_R12(reg)     ((reg).r_r12)
-#define BSDREG_R13(reg)     ((reg).r_r13)
-#define BSDREG_R14(reg)     ((reg).r_r14)
-#define BSDREG_R15(reg)     ((reg).r_r15)
-#define BSDREG_EFlags(reg)  ((reg).r_rflags)
-
-#else // BIT64
-
-#define BSDREG_Ebx(reg)     ((reg).r_ebx)
-#define BSDREG_Ecx(reg)     ((reg).r_ecx)
-#define BSDREG_Edx(reg)     ((reg).r_edx)
-#define BSDREG_Esi(reg)     ((reg).r_esi)
-#define BSDREG_Edi(reg)     ((reg).r_edi)
-#define BSDREG_Ebp(reg)     ((reg).r_ebp)
-#define BSDREG_Eax(reg)     ((reg).r_eax)
-#define BSDREG_Eip(reg)     ((reg).r_eip)
-#define BSDREG_SegCs(reg)   ((reg).r_cs)
-#define BSDREG_EFlags(reg)  ((reg).r_eflags)
-#define BSDREG_Esp(reg)     ((reg).r_esp)
-#define BSDREG_SegSs(reg)   ((reg).r_ss)
-
-#endif // BIT64
-
-#endif // HAVE_BSD_REGS_T
-
 #ifdef BIT64
 #define ASSIGN_CONTROL_REGS \
         ASSIGN_REG(Rbp)     \
index 8d9a06b..22742d1 100644 (file)
@@ -39,20 +39,26 @@ Abstract:
 
 #if HAVE_LIBUNWIND_H
 #if UNWIND_CONTEXT_IS_UCONTEXT_T
-static void WinContextToUnwindContext(CONTEXT *winContext, unw_context_t *unwContext)
-{
+
 #if defined(_AMD64_)
-    unwContext->uc_mcontext.gregs[REG_RIP] = winContext->Rip;
-    unwContext->uc_mcontext.gregs[REG_RSP] = winContext->Rsp;
-    unwContext->uc_mcontext.gregs[REG_RBP] = winContext->Rbp;
-    unwContext->uc_mcontext.gregs[REG_RBX] = winContext->Rbx;
-    unwContext->uc_mcontext.gregs[REG_R12] = winContext->R12;
-    unwContext->uc_mcontext.gregs[REG_R13] = winContext->R13;
-    unwContext->uc_mcontext.gregs[REG_R14] = winContext->R14;
-    unwContext->uc_mcontext.gregs[REG_R15] = winContext->R15;
-#else
+#define ASSIGN_UNWIND_REGS \
+    ASSIGN_REG(Rip)        \
+    ASSIGN_REG(Rsp)        \
+    ASSIGN_REG(Rbp)        \
+    ASSIGN_REG(Rbx)        \
+    ASSIGN_REG(R12)        \
+    ASSIGN_REG(R13)        \
+    ASSIGN_REG(R14)        \
+    ASSIGN_REG(R15)     
+#else // _AMD64_
 #error unsupported architecture
-#endif
+#endif // _AMD64_
+
+static void WinContextToUnwindContext(CONTEXT *winContext, unw_context_t *unwContext)
+{
+#define ASSIGN_REG(reg) MCREG_##reg(unwContext->uc_mcontext) = winContext->reg;
+    ASSIGN_UNWIND_REGS
+#undef ASSIGN_REG
 }
 #else
 static void WinContextToUnwindCursor(CONTEXT *winContext, unw_cursor_t *cursor)
index c8c9dc0..0f5e67b 100644 (file)
@@ -45,6 +45,195 @@ typedef ucontext_t native_context_t;
 #include <mach/mach_port.h>
 #endif // !HAVE_MACH_EXCEPTIONS else
 
+#if HAVE_GREGSET_T
+
+#ifdef BIT64
+#define MCREG_Rbx(mc)       ((mc).gregs[REG_RBX])
+#define MCREG_Rcx(mc)       ((mc).gregs[REG_RCX])
+#define MCREG_Rdx(mc)       ((mc).gregs[REG_RDX])
+#define MCREG_Rsi(mc)       ((mc).gregs[REG_RSI])
+#define MCREG_Rdi(mc)       ((mc).gregs[REG_RDI])
+#define MCREG_Rbp(mc)       ((mc).gregs[REG_RBP])
+#define MCREG_Rax(mc)       ((mc).gregs[REG_RAX])
+#define MCREG_Rip(mc)       ((mc).gregs[REG_RIP])
+#define MCREG_Rsp(mc)       ((mc).gregs[REG_RSP])
+#define MCREG_SegCs(mc)     ((mc).gregs[REG_CSGSFS])
+#define MCREG_R8(mc)        ((mc).gregs[REG_R8])
+#define MCREG_R9(mc)        ((mc).gregs[REG_R9])
+#define MCREG_R10(mc)       ((mc).gregs[REG_R10])
+#define MCREG_R11(mc)       ((mc).gregs[REG_R11])
+#define MCREG_R12(mc)       ((mc).gregs[REG_R12])
+#define MCREG_R13(mc)       ((mc).gregs[REG_R13])
+#define MCREG_R14(mc)       ((mc).gregs[REG_R14])
+#define MCREG_R15(mc)       ((mc).gregs[REG_R15])
+
+#define FPREG_Xmm(uc, index) *(M128A*)&((uc)->__fpregs_mem._xmm[index])
+
+#define FPREG_St(uc, index) *(M128A*)&((uc)->__fpregs_mem._st[index])
+
+#define FPREG_ControlWord(uc) ((uc)->__fpregs_mem.cwd)
+#define FPREG_StatusWord(uc) ((uc)->__fpregs_mem.swd)
+#define FPREG_TagWord(uc) ((uc)->__fpregs_mem.ftw)
+#define FPREG_ErrorOffset(uc) *(DWORD*)&((uc)->__fpregs_mem.rip)
+#define FPREG_ErrorSelector(uc) *(((WORD*)&((uc)->__fpregs_mem.rip)) + 2)
+#define FPREG_DataOffset(uc) *(DWORD*)&((uc)->__fpregs_mem.rdp)
+#define FPREG_DataSelector(uc) *(((WORD*)&((uc)->__fpregs_mem.rdp)) + 2)
+#define FPREG_MxCsr(uc) ((uc)->__fpregs_mem.mxcsr)
+#define FPREG_MxCsr_Mask(uc) ((uc)->__fpregs_mem.mxcr_mask)
+
+#else // BIT64
+
+#define MCREG_Ebx(mc)       ((mc).gregs[REG_EBX])
+#define MCREG_Ecx(mc)       ((mc).gregs[REG_ECX])
+#define MCREG_Edx(mc)       ((mc).gregs[REG_EDX])
+#define MCREG_Esi(mc)       ((mc).gregs[REG_ESI])
+#define MCREG_Edi(mc)       ((mc).gregs[REG_EDI])
+#define MCREG_Ebp(mc)       ((mc).gregs[REG_EBP])
+#define MCREG_Eax(mc)       ((mc).gregs[REG_EAX])
+#define MCREG_Eip(mc)       ((mc).gregs[REG_EIP])
+#define MCREG_Esp(mc)       ((mc).gregs[REG_ESP])
+#define MCREG_SegCs(mc)     ((mc).gregs[REG_CS])
+#define MCREG_SegSs(mc)     ((mc).gregs[REG_SS])
+
+#endif // BIT64
+
+#define MCREG_EFlags(mc)    ((mc).gregs[REG_EFL])
+
+#else // HAVE_GREGSET_T
+
+#ifdef BIT64
+
+    // For FreeBSD, as found in x86/ucontext.h
+#define MCREG_Rbp(mc)      ((mc).mc_rbp)
+#define MCREG_Rip(mc)      ((mc).mc_rip)
+#define MCREG_Rsp(mc)      ((mc).mc_rsp)
+#define MCREG_Rsi(mc)       ((mc).mc_rsi)
+#define MCREG_Rdi(mc)      ((mc).mc_rdi)
+#define MCREG_Rbx(mc)      ((mc).mc_rbx)
+#define MCREG_Rdx(mc)      ((mc).mc_rdx)
+#define MCREG_Rcx(mc)      ((mc).mc_rcx)
+#define MCREG_Rax(mc)      ((mc).mc_rax)
+#define MCREG_R8(mc)       ((mc).mc_r8)
+#define MCREG_R9(mc)       ((mc).mc_r9)
+#define MCREG_R10(mc)      ((mc).mc_r10)
+#define MCREG_R11(mc)      ((mc).mc_r11)
+#define MCREG_R12(mc)      ((mc).mc_r12)
+#define MCREG_R13(mc)      ((mc).mc_r13)
+#define MCREG_R14(mc)      ((mc).mc_r14)
+#define MCREG_R15(mc)      ((mc).mc_r15)
+#define MCREG_EFlags(mc)    ((mc).mc_rflags)
+#define MCREG_SegCs(mc)     ((mc).mc_cs)
+
+#else // BIT64
+
+#define MCREG_Ebx(mc)       ((mc).mc_ebx)
+#define MCREG_Ecx(mc)       ((mc).mc_ecx)
+#define MCREG_Edx(mc)       ((mc).mc_edx)
+#define MCREG_Esi(mc)       ((mc).mc_esi)
+#define MCREG_Edi(mc)       ((mc).mc_edi)
+#define MCREG_Ebp(mc)       ((mc).mc_ebp)
+#define MCREG_Eax(mc)       ((mc).mc_eax)
+#define MCREG_Eip(mc)       ((mc).mc_eip)
+#define MCREG_SegCs(mc)     ((mc).mc_cs)
+#define MCREG_EFlags(mc)    ((mc).mc_eflags)
+#define MCREG_Esp(mc)       ((mc).mc_esp)
+#define MCREG_SegSs(mc)     ((mc).mc_ss)
+
+#endif // BIT64
+
+#endif // HAVE_GREGSET_T
+
+
+#if HAVE_PT_REGS
+
+#ifdef BIT64
+#define PTREG_Rbx(ptreg)    ((ptreg).rbx)
+#define PTREG_Rcx(ptreg)    ((ptreg).rcx)
+#define PTREG_Rdx(ptreg)    ((ptreg).rdx)
+#define PTREG_Rsi(ptreg)    ((ptreg).rsi)
+#define PTREG_Rdi(ptreg)    ((ptreg).rdi)
+#define PTREG_Rbp(ptreg)    ((ptreg).rbp)
+#define PTREG_Rax(ptreg)    ((ptreg).rax)
+#define PTREG_Rip(ptreg)    ((ptreg).rip)
+#define PTREG_SegCs(ptreg)  ((ptreg).cs)
+#define PTREG_SegSs(ptreg)  ((ptreg).ss)
+#define PTREG_Rsp(ptreg)    ((ptreg).rsp)
+#define PTREG_R8(ptreg)     ((ptreg).r8)
+#define PTREG_R9(ptreg)     ((ptreg).r9)
+#define PTREG_R10(ptreg)    ((ptreg).r10)
+#define PTREG_R11(ptreg)    ((ptreg).r11)
+#define PTREG_R12(ptreg)    ((ptreg).r12)
+#define PTREG_R13(ptreg)    ((ptreg).r13)
+#define PTREG_R14(ptreg)    ((ptreg).r14)
+#define PTREG_R15(ptreg)    ((ptreg).r15)
+
+#else // BIT64
+
+#define PTREG_Ebx(ptreg)    ((ptreg).ebx)
+#define PTREG_Ecx(ptreg)    ((ptreg).ecx)
+#define PTREG_Edx(ptreg)    ((ptreg).edx)
+#define PTREG_Esi(ptreg)    ((ptreg).esi)
+#define PTREG_Edi(ptreg)    ((ptreg).edi)
+#define PTREG_Ebp(ptreg)    ((ptreg).ebp)
+#define PTREG_Eax(ptreg)    ((ptreg).eax)
+#define PTREG_Eip(ptreg)    ((ptreg).eip)
+#define PTREG_SegCs(ptreg)  ((ptreg).xcs)
+#define PTREG_SegSs(ptreg)  ((ptreg).xss)
+#define PTREG_Esp(ptreg)    ((ptreg).esp)
+
+#endif // BIT64
+
+
+#define PTREG_EFlags(ptreg) ((ptreg).eflags)
+
+#endif // HAVE_PT_REGS
+
+
+
+#if HAVE_BSD_REGS_T
+
+#ifdef BIT64
+
+#define BSDREG_Rbx(reg)     ((reg).r_rbx)
+#define BSDREG_Rcx(reg)     ((reg).r_rcx)
+#define BSDREG_Rdx(reg)     ((reg).r_rdx)
+#define BSDREG_Rsi(reg)     ((reg).r_rsi)
+#define BSDREG_Rdi(reg)     ((reg).r_rdi)
+#define BSDREG_Rbp(reg)     ((reg).r_rbp)
+#define BSDREG_Rax(reg)     ((reg).r_rax)
+#define BSDREG_Rip(reg)     ((reg).r_rip)
+#define BSDREG_SegCs(reg)   ((reg).r_cs)
+#define BSDREG_SegSs(reg)   ((reg).r_ss)
+#define BSDREG_Rsp(reg)     ((reg).r_rsp)
+#define BSDREG_R8(reg)      ((reg).r_r8)
+#define BSDREG_R9(reg)      ((reg).r_r9)
+#define BSDREG_R10(reg)     ((reg).r_r10)
+#define BSDREG_R11(reg)     ((reg).r_r11)
+#define BSDREG_R12(reg)     ((reg).r_r12)
+#define BSDREG_R13(reg)     ((reg).r_r13)
+#define BSDREG_R14(reg)     ((reg).r_r14)
+#define BSDREG_R15(reg)     ((reg).r_r15)
+#define BSDREG_EFlags(reg)  ((reg).r_rflags)
+
+#else // BIT64
+
+#define BSDREG_Ebx(reg)     ((reg).r_ebx)
+#define BSDREG_Ecx(reg)     ((reg).r_ecx)
+#define BSDREG_Edx(reg)     ((reg).r_edx)
+#define BSDREG_Esi(reg)     ((reg).r_esi)
+#define BSDREG_Edi(reg)     ((reg).r_edi)
+#define BSDREG_Ebp(reg)     ((reg).r_ebp)
+#define BSDREG_Eax(reg)     ((reg).r_eax)
+#define BSDREG_Eip(reg)     ((reg).r_eip)
+#define BSDREG_SegCs(reg)   ((reg).r_cs)
+#define BSDREG_EFlags(reg)  ((reg).r_eflags)
+#define BSDREG_Esp(reg)     ((reg).r_esp)
+#define BSDREG_SegSs(reg)   ((reg).r_ss)
+
+#endif // BIT64
+
+#endif // HAVE_BSD_REGS_T
+
 /*++
 Function :
     CONTEXT_CaptureContext