Use RtlCaptureContext instead of inline assembly to capture execution context...

854 views
Skip to first unread message

sgj...@chromium.org

unread,
Oct 23, 2009, 8:14:39 AM10/23/09
to l...@chromium.org, v8-...@googlegroups.com
Reviewers: Lasse Reichstein,

Description:
Use RtlCaptureContext instead of inline assembly to capture execution
context on
Windows

Inline assembly is not available in Visual C++ 64-bit version so use
RtlCaptureContext to capture execution context. RtlCaptureContext is not
available on Windows 2000 so this change removes Windows 2000 support. If
this
turns up causing trouble we can revert to only use RtlCaptureContext in
64-bit
and inline assembly in 32-bit.

Please review this at http://codereview.chromium.org/335008

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
M src/platform-win32.cc


Index: src/platform-win32.cc
===================================================================
--- src/platform-win32.cc (revision 3108)
+++ src/platform-win32.cc (working copy)
@@ -48,10 +48,10 @@
#ifndef NOMCX
#define NOMCX
#endif
-// Require Windows 2000 or higher (this is required for the
IsDebuggerPresent
+// Require Windows XP or higher (this is required for the RtlCaptureContext
// function to be present).
#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x500
+#define _WIN32_WINNT 0x501
#endif

#include <windows.h>
@@ -1183,22 +1183,7 @@

// Capture current context.
CONTEXT context;
- memset(&context, 0, sizeof(context));
- context.ContextFlags = CONTEXT_CONTROL;
- context.ContextFlags = CONTEXT_CONTROL;
-#ifdef _WIN64
- // TODO(X64): Implement context capture.
-#else
- __asm call x
- __asm x: pop eax
- __asm mov context.Eip, eax
- __asm mov context.Ebp, ebp
- __asm mov context.Esp, esp
- // NOTE: At some point, we could use RtlCaptureContext(&context) to
- // capture the context instead of inline assembler. However it is
- // only available on XP, Vista, Server 2003 and Server 2008 which
- // might not be sufficient.
-#endif
+ RtlCaptureContext(&context);

// Initialize the stack walking
STACKFRAME64 stack_frame;


l...@chromium.org

unread,
Oct 23, 2009, 8:39:43 AM10/23/09
to sgj...@chromium.org, v8-...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages