From 2fb8571457a3e9a8f7c434ba197eb66f2ec959da Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Sun, 3 Aug 2014 23:44:28 +0100 Subject: [PATCH 12/19] Add symsrv_convert - Add symsrv_convert from http://hg.mozilla.org/users/tmielczarek_mozilla.com/fetch-win32-symbols/ - Add building symsrv_convert to .gyp file - Fix compilation with MSVS 2013 - NOMINMAX should not be needed as that comes from target_defaults v2: Update symsrv_convert.cc for MSSymbolServerConverter::LocateAndConvertSymbolFile() changes This has been needed for a few years... Signed-off-by: Jon Turney --- src/common/windows/common_windows.gyp | 2 +- src/common/windows/pdb_source_line_writer.cc | 6 ++ .../converter/ms_symbol_server_converter.cc | 2 +- .../converter/ms_symbol_server_converter.gyp | 13 ++++ .../converter/ms_symbol_server_converter.h | 4 +- src/tools/windows/converter/symsrv_convert.cc | 61 +++++++++++++++++++ 6 files changed, 84 insertions(+), 4 deletions(-) mode change 100644 => 100755 src/common/windows/pdb_source_line_writer.cc mode change 100644 => 100755 src/tools/windows/converter/ms_symbol_server_converter.cc mode change 100644 => 100755 src/tools/windows/converter/ms_symbol_server_converter.h create mode 100644 src/tools/windows/converter/symsrv_convert.cc diff --git a/src/common/windows/common_windows.gyp b/src/common/windows/common_windows.gyp index 5f7594b1..ec42cade 100644 --- a/src/common/windows/common_windows.gyp +++ b/src/common/windows/common_windows.gyp @@ -37,7 +37,7 @@ 'all_dependent_settings': { 'include_dirs': [ '<(DEPTH)', - '$(VSInstallDir)/DIA SDK/include', + '"$(VSInstallDir)/DIA SDK/include"', ], 'msvs_settings': { 'VCLinkerTool': { diff --git a/src/common/windows/pdb_source_line_writer.cc b/src/common/windows/pdb_source_line_writer.cc old mode 100644 new mode 100755 index 4030a2e9..a3622d3d --- a/src/common/windows/pdb_source_line_writer.cc +++ b/src/common/windows/pdb_source_line_writer.cc @@ -27,6 +27,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// We don't want windows.h to define the macro max() which collides with +// std::numeric_limits::max() +#ifndef NOMINMAX +#define NOMINMAX +#endif + #include "common/windows/pdb_source_line_writer.h" #include diff --git a/src/tools/windows/converter/ms_symbol_server_converter.cc b/src/tools/windows/converter/ms_symbol_server_converter.cc old mode 100644 new mode 100755 index 2b40faee..f1cef404 --- a/src/tools/windows/converter/ms_symbol_server_converter.cc +++ b/src/tools/windows/converter/ms_symbol_server_converter.cc @@ -478,7 +478,7 @@ BOOL CALLBACK MSSymbolServerConverter::SymCallback(HANDLE process, // static BOOL CALLBACK MSSymbolServerConverter::SymFindFileInPathCallback( - const char *filename, void *context) { + PCSTR filename, PVOID context) { // FALSE ends the search, indicating that the located symbol file is // satisfactory. return FALSE; diff --git a/src/tools/windows/converter/ms_symbol_server_converter.gyp b/src/tools/windows/converter/ms_symbol_server_converter.gyp index 57ec7906..d84be5c2 100644 --- a/src/tools/windows/converter/ms_symbol_server_converter.gyp +++ b/src/tools/windows/converter/ms_symbol_server_converter.gyp @@ -42,5 +42,18 @@ '../../../common/windows/common_windows.gyp:common_windows_lib', ], }, + { + 'target_name': 'symsrv_convert', + 'type': 'executable', + 'dependencies': [ + 'ms_symbol_server_converter' + ], + 'sources' : [ + 'symsrv_convert.cc', + ], + 'include_dirs': [ + '<(DEPTH)', + ], + } ], } diff --git a/src/tools/windows/converter/ms_symbol_server_converter.h b/src/tools/windows/converter/ms_symbol_server_converter.h old mode 100644 new mode 100755 index 401f7c34..6d06cc7e --- a/src/tools/windows/converter/ms_symbol_server_converter.h +++ b/src/tools/windows/converter/ms_symbol_server_converter.h @@ -215,8 +215,8 @@ class MSSymbolServerConverter { // SymFindFileInPath actually seems to accept NULL for a callback function // and behave properly for our needs in that case, but the documentation // doesn't mention it, so this little callback is provided. - static BOOL CALLBACK SymFindFileInPathCallback(const char *filename, - void *context); + static BOOL CALLBACK SymFindFileInPathCallback(PCSTR filename, + PVOID context); // The search path used by SymSrv, built based on the arguments to the // constructor. diff --git a/src/tools/windows/converter/symsrv_convert.cc b/src/tools/windows/converter/symsrv_convert.cc new file mode 100644 index 00000000..4c2a21df --- /dev/null +++ b/src/tools/windows/converter/symsrv_convert.cc @@ -0,0 +1,61 @@ +#include +#include +#include + +#include "tools/windows/converter/ms_symbol_server_converter.h" + +using std::string; +using std::vector; +using google_breakpad::MissingSymbolInfo; +using google_breakpad::MSSymbolServerConverter; + +int main(int argc, char *argv[]) +{ + if (argc < 5) { + fprintf(stderr, "Usage: %s \n ", argv[0]); + return 1; + } + + MissingSymbolInfo missing_info; + missing_info.debug_file = argv[3]; + missing_info.debug_identifier = argv[4]; + + MSSymbolServerConverter converter(argv[2], vector(1, argv[1])); + string converted_file; + + MSSymbolServerConverter::LocateResult result = + converter.LocateAndConvertSymbolFile(missing_info, + false, + false, + &converted_file, + NULL, + NULL); + printf("%s: ", argv[3]); + int return_code; + switch(result) { + case MSSymbolServerConverter::LOCATE_SUCCESS: + printf("converted: %s\n", converted_file.c_str()); + return_code = 0; + break; + + case MSSymbolServerConverter::LOCATE_RETRY: + printf("try again later\n"); + return_code = 1; + break; + + case MSSymbolServerConverter::LOCATE_FAILURE: + case MSSymbolServerConverter::LOCATE_NOT_FOUND: + printf("failed to locate symbols\n"); + return_code = 2; + break; + + default: + // ??? + return_code = 3; + break; + } + fflush(stdout); + fflush(stderr); + + return return_code; +} -- 2.28.0