SVN: backtracexx/backtracexx.cpp
pluto
pluto at pld-linux.org
Mon Mar 23 16:58:16 CET 2009
Author: pluto
Date: Mon Mar 23 16:58:16 2009
New Revision: 10233
Modified:
backtracexx/backtracexx.cpp
Log:
- don't use dbghelp on mingw.
Modified: backtracexx/backtracexx.cpp
==============================================================================
--- backtracexx/backtracexx.cpp (original)
+++ backtracexx/backtracexx.cpp Mon Mar 23 16:58:16 2009
@@ -9,14 +9,15 @@
// - use libdwarf for printing line info for ELF objects.
//
-#if defined( __linux__ )
+#if defined( __GNUC__ )
#include <cxxabi.h>
+#if defined( __linux__ )
#include <dlfcn.h>
+#endif
#include <unwind.h>
#elif defined( WIN32 ) || defined( WIN64 )
#include <windows.h>
#include <winnt.h>
-#include <dbghelp.h>
#else
#error "not testet yet."
#endif
@@ -34,16 +35,18 @@
//
#if defined( _MSC_VER )
+#include <dbghelp.h>
#pragma comment( lib, "dbghelp" )
#endif
namespace backtracexx
{
-
-#if defined( __linux__ )
+#if defined( __GNUC__ )
bool lookupSymbol( Frame& frame )
{
+#if defined( __linux__ )
+
Dl_info info;
if ( ::dladdr( frame.address, &info ) )
{
@@ -69,6 +72,8 @@
}
return true;
}
+
+#endif
return false;
}
@@ -106,7 +111,7 @@
}
}
-#elif defined( WIN32 ) || defined( WIN64 )
+#elif defined( _MSC_VER )
bool lookupSymbol( Frame& frame )
{
@@ -158,8 +163,7 @@
Trace scan( ::PCONTEXT ctx )
{
-
-#if defined( __linux__ )
+#if defined( __GNUC__ )
TraceHelper th;
//
@@ -168,7 +172,7 @@
_Unwind_Backtrace( reinterpret_cast< _Unwind_Trace_Fn >( helper ), &th );
return th.trace;
-#elif defined( WIN32 ) || defined( WIN64 )
+#elif defined( _MSC_VER )
Trace trace;
@@ -183,20 +187,16 @@
if ( ctx )
{
context = *ctx;
-
-#if defined( __LP64__ ) || defined ( __MINGW64__ )
+#if defined( WIN64 )
Frame frame( reinterpret_cast< void const* >( context.Rip ) );
#else
Frame frame( reinterpret_cast< void const* >( static_cast< ::DWORD64 >( context.Eip ) ) );
#endif
-
lookupSymbol( frame );
trace.push_back( frame );
}
else
{
-
-#if defined( _MSC_VER )
#if defined( WIN32 )
__asm
{
@@ -209,25 +209,9 @@
#else
#error "msvc/win64 needs external assembly."
#endif
-#else
-#if defined( __MINGW64__ )
- asm ( "foo: movq $foo, %0" : "=g" ( context.Rip ) );
- register ::DWORD64 rsp asm( "rsp" );
- context.Rsp = rsp;
- register ::DWORD64 rbp asm( "rbp" );
- context.Rbp = rbp;
-#else
- asm ( "foo: movl $foo, %0" : "=g" ( context.Eip ) );
- register ::DWORD esp asm( "esp" );
- context.Esp = esp;
- register ::DWORD ebp asm( "ebp" );
- context.Ebp = ebp;
-#endif
-#endif
-
}
-#if defined( __LP64__ ) || defined ( __MINGW64__ )
+#if defined( WIN64 )
stackFrame.AddrPC.Offset = context.Rip;
stackFrame.AddrStack.Offset = context.Rsp;
stackFrame.AddrFrame.Offset = context.Rbp;
@@ -259,7 +243,6 @@
return trace;
#endif
-
}
std::ostream& operator << ( std::ostream& os, Trace const& t )
More information about the pld-cvs-commit
mailing list