188 lines
6.6 KiB
Diff
188 lines
6.6 KiB
Diff
From 2fb8571457a3e9a8f7c434ba197eb66f2ec959da Mon Sep 17 00:00:00 2001
|
|
From: Jon Turney <jon.turney@dronecode.org.uk>
|
|
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 <jon.turney@dronecode.org.uk>
|
|
---
|
|
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 <windows.h>
|
|
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 <cstdio>
|
|
+#include <string>
|
|
+#include <vector>
|
|
+
|
|
+#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 <symbol server> <symbol path> <debug file> <debug identifier>\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<string>(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
|
|
|