diff options
Diffstat (limited to 'boost/winapi/dbghelp.hpp')
-rw-r--r-- | boost/winapi/dbghelp.hpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/boost/winapi/dbghelp.hpp b/boost/winapi/dbghelp.hpp new file mode 100644 index 0000000000..61e212dadc --- /dev/null +++ b/boost/winapi/dbghelp.hpp @@ -0,0 +1,171 @@ +/* + * Copyright 2015 Klemens Morgenstern + * Copyright 2016 Jorge Lodos + * Copyright 2016 Andrey Semashev + * + * Distributed under the Boost Software License, Version 1.0. + * See http://www.boost.org/LICENSE_1_0.txt + */ + +#ifndef BOOST_WINAPI_DBGHELP_HPP_INCLUDED_ +#define BOOST_WINAPI_DBGHELP_HPP_INCLUDED_ + +#include <boost/winapi/basic_types.hpp> + +#if defined( BOOST_USE_WINDOWS_H ) +#if !defined( BOOST_WINAPI_IS_MINGW ) +#include <dbghelp.h> +#else +// In MinGW there is no dbghelp.h but an older imagehlp.h header defines some of the symbols from it. +// Note that the user has to link with libimagehlp.a instead of libdbghelp.a for it to work. +#include <imagehlp.h> +#endif +#endif + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +#if BOOST_WINAPI_PARTITION_DESKTOP + +// Some symbols declared below are not present in all versions of Windows SDK, MinGW and MinGW-w64. +// dbghelp.h/imagehlp.h define the API_VERSION_NUMBER macro which we use to detect its version. +// When the macro is not available we can only guess based on the compiler version or SDK type. +#if defined(API_VERSION_NUMBER) +#if API_VERSION_NUMBER >= 11 +// UnDecorateSymbolNameW available since Windows SDK 6.0A and MinGW-w64 (as of 2016-02-14) +#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW +#endif +#elif defined(_MSC_VER) && _MSC_VER >= 1500 +// Until MSVC 9.0 Windows SDK was bundled in Visual Studio and didn't have UnDecorateSymbolNameW. +// Supposedly, Windows SDK 6.0A was the first standalone one and it is used with MSVC 9.0. +#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW +#elif !defined(BOOST_WINAPI_IS_MINGW) +// MinGW does not provide UnDecorateSymbolNameW (as of 2016-02-14) +#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW +#endif + +#if !defined( BOOST_USE_WINDOWS_H ) +extern "C" { + +struct API_VERSION; + +BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ WINAPI +UnDecorateSymbolName( + boost::winapi::LPCSTR_ DecoratedName, + boost::winapi::LPSTR_ UnDecoratedName, + boost::winapi::DWORD_ UndecoratedLength, + boost::winapi::DWORD_ Flags); + +#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW ) +BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ WINAPI +UnDecorateSymbolNameW( + boost::winapi::LPCWSTR_ DecoratedName, + boost::winapi::LPWSTR_ UnDecoratedName, + boost::winapi::DWORD_ UndecoratedLength, + boost::winapi::DWORD_ Flags); +#endif + +BOOST_SYMBOL_IMPORT API_VERSION* WINAPI +ImagehlpApiVersion(BOOST_WINAPI_DETAIL_VOID); + +} // extern "C" +#endif + +namespace boost { +namespace winapi { + +#if defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ UNDNAME_COMPLETE_ = UNDNAME_COMPLETE; +const DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = UNDNAME_NO_LEADING_UNDERSCORES; +const DWORD_ UNDNAME_NO_MS_KEYWORDS_ = UNDNAME_NO_MS_KEYWORDS; +const DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = UNDNAME_NO_FUNCTION_RETURNS; +const DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = UNDNAME_NO_ALLOCATION_MODEL; +const DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = UNDNAME_NO_ALLOCATION_LANGUAGE; +const DWORD_ UNDNAME_NO_MS_THISTYPE_ = UNDNAME_NO_MS_THISTYPE; +const DWORD_ UNDNAME_NO_CV_THISTYPE_ = UNDNAME_NO_CV_THISTYPE; +const DWORD_ UNDNAME_NO_THISTYPE_ = UNDNAME_NO_THISTYPE; +const DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = UNDNAME_NO_ACCESS_SPECIFIERS; +const DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = UNDNAME_NO_THROW_SIGNATURES; +const DWORD_ UNDNAME_NO_MEMBER_TYPE_ = UNDNAME_NO_MEMBER_TYPE; +const DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = UNDNAME_NO_RETURN_UDT_MODEL; +const DWORD_ UNDNAME_32_BIT_DECODE_ = UNDNAME_32_BIT_DECODE; +const DWORD_ UNDNAME_NAME_ONLY_ = UNDNAME_NAME_ONLY; +const DWORD_ UNDNAME_NO_ARGUMENTS_ = UNDNAME_NO_ARGUMENTS; +const DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = UNDNAME_NO_SPECIAL_SYMS; + +#else // defined( BOOST_USE_WINDOWS_H ) + +const DWORD_ UNDNAME_COMPLETE_ = 0x00000000; +const DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = 0x00000001; +const DWORD_ UNDNAME_NO_MS_KEYWORDS_ = 0x00000002; +const DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = 0x00000004; +const DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = 0x00000008; +const DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = 0x00000010; +const DWORD_ UNDNAME_NO_MS_THISTYPE_ = 0x00000020; +const DWORD_ UNDNAME_NO_CV_THISTYPE_ = 0x00000040; +const DWORD_ UNDNAME_NO_THISTYPE_ = 0x00000060; +const DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = 0x00000080; +const DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = 0x00000100; +const DWORD_ UNDNAME_NO_MEMBER_TYPE_ = 0x00000200; +const DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = 0x00000400; +const DWORD_ UNDNAME_32_BIT_DECODE_ = 0x00000800; +const DWORD_ UNDNAME_NAME_ONLY_ = 0x00001000; +const DWORD_ UNDNAME_NO_ARGUMENTS_ = 0x00002000; +const DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = 0x00004000; + +#endif // defined( BOOST_USE_WINDOWS_H ) + +using ::UnDecorateSymbolName; +#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW ) +using ::UnDecorateSymbolNameW; +#endif + +typedef struct BOOST_MAY_ALIAS API_VERSION { + USHORT_ MajorVersion; + USHORT_ MinorVersion; + USHORT_ Revision; + USHORT_ Reserved; +} API_VERSION_, *LPAPI_VERSION_; + +BOOST_FORCEINLINE LPAPI_VERSION_ ImagehlpApiVersion() +{ + return reinterpret_cast<LPAPI_VERSION_>(::ImagehlpApiVersion()); +} + +BOOST_FORCEINLINE DWORD_ undecorate_symbol_name( + LPCSTR_ DecoratedName, + LPSTR_ UnDecoratedName, + DWORD_ UndecoratedLength, + DWORD_ Flags) +{ + return ::UnDecorateSymbolName( + DecoratedName, + UnDecoratedName, + UndecoratedLength, + Flags); +} + +#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW ) + +BOOST_FORCEINLINE DWORD_ undecorate_symbol_name( + LPCWSTR_ DecoratedName, + LPWSTR_ UnDecoratedName, + DWORD_ UndecoratedLength, + DWORD_ Flags) +{ + return ::UnDecorateSymbolNameW( + DecoratedName, + UnDecoratedName, + UndecoratedLength, + Flags); +} + +#endif + +} +} + +#endif // BOOST_WINAPI_PARTITION_DESKTOP +#endif // BOOST_WINAPI_DBGHELP_HPP_INCLUDED_ |