From a880209efe5a0fb82469d2deba6ebcf5636ecabc Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Wed, 15 Jan 2020 02:02:52 +0300 Subject: mingw builds: work around missing SymTagEnum --- include/pdb/symbol.hpp | 24 ++++++++++++++++++------ utils/enum_symbols.cpp | 8 ++++---- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/pdb/symbol.hpp b/include/pdb/symbol.hpp index b9dff85..98379d8 100644 --- a/include/pdb/symbol.hpp +++ b/include/pdb/symbol.hpp @@ -13,12 +13,26 @@ #include #include +#include #include #include #include #include namespace pdb { +namespace symbol { + +// MinGW-w64 (as of version 7.0) doesn't have SymTagEnum +typedef ULONG Tag; + +constexpr Tag SYM_TAG_FUNCTION = 5; + +#ifdef _MSC_VER +static_assert(static_cast(SymTagFunction) == SYM_TAG_FUNCTION, + "unexpected SymTagFunction value"); +#endif + +} // namespace symbol class SymbolInfo { public: @@ -52,13 +66,11 @@ public: Address get_offline_address() const { return raw.Address; } - typedef ULONG Tag; - - Tag get_tag() const { return raw.Tag; } + symbol::Tag get_tag() const { return raw.Tag; } - enum class Type : Tag { - Function = SymTagFunction, - RESERVED = SymTagMax, + enum class Type : symbol::Tag { + Function = symbol::SYM_TAG_FUNCTION, + RESERVED = ULONG_MAX, }; Type get_type() const { return static_cast(get_tag()); } diff --git a/utils/enum_symbols.cpp b/utils/enum_symbols.cpp index 77171a5..bd8a82b 100644 --- a/utils/enum_symbols.cpp +++ b/utils/enum_symbols.cpp @@ -25,7 +25,7 @@ public: "pdb", po::value>(&pdbs)->value_name("ADDR,PATH"), "load a PDB file"); visible.add_options()( "functions", - po::value(&tag)->implicit_value(function_tag)->zero_tokens(), + po::value(&tag)->implicit_value(function_tag)->zero_tokens(), "only list functions"); } @@ -40,10 +40,10 @@ public: pdb::Symbol::Type get_type() const { return static_cast(tag); } private: - static const auto reserved_tag = static_cast(pdb::Symbol::Type::RESERVED); - static const auto function_tag = static_cast(pdb::Symbol::Type::Function); + static const auto reserved_tag = static_cast(pdb::Symbol::Type::RESERVED); + static const auto function_tag = static_cast(pdb::Symbol::Type::Function); - pdb::Symbol::Tag tag = reserved_tag; + pdb::symbol::Tag tag = reserved_tag; }; } // namespace -- cgit v1.2.3