forked from msys2/MINGW-packages
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0007-Build-PECOFF-DWARF-dump_syms-for-MinGW.patch
134 lines (124 loc) · 3.61 KB
/
0007-Build-PECOFF-DWARF-dump_syms-for-MinGW.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
From 18fdc070172177cb911583284d1425747105e836 Mon Sep 17 00:00:00 2001
From: Jon TURNEY <[email protected]>
Date: Wed, 5 Feb 2014 13:44:01 +0000
Subject: [PATCH 07/24] Build PECOFF/DWARF dump_syms for MinGW
- Substitute MapViewOfFile() for mmap()
- Link dump_syms_dwarf with ws2_32 as ntoh functions are used
Signed-off-by: Jon TURNEY <[email protected]>
---
Makefile.am | 6 ++----
src/common/pecoff/dump_symbols-inl.h | 38 ++++++++++++++++++++++++++++++------
2 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 4d291e7..d8917aa 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -334,13 +334,11 @@ endif
endif LINUX_HOST
if WINDOWS_HOST
-if !MINGW_HOST
if !DISABLE_TOOLS
bin_PROGRAMS += \
src/tools/windows/dump_syms_dwarf/dump_syms
endif
endif
-endif
## Tests
if !DISABLE_PROCESSOR
@@ -634,7 +632,6 @@ src_tools_linux_md2core_minidump_2_core_unittest_LDADD = \
endif LINUX_HOST
if WINDOWS_HOST
-if !MINGW_HOST
if !DISABLE_TOOLS
src_tools_windows_dump_syms_dwarf_dump_syms_SOURCES = \
src/common/dwarf_cfi_to_module.cc \
@@ -649,7 +646,8 @@ src_tools_windows_dump_syms_dwarf_dump_syms_SOURCES = \
src/common/pecoff/pecoffutils.cc \
src/common/pecoff/pecoff_file_id.cc \
src/tools/windows/dump_syms_dwarf/dump_syms.cc
-endif
+src_tools_windows_dump_syms_dwarf_dump_syms_LDADD = \
+ $(SOCKET_LIBS)
endif
endif
diff --git a/src/common/pecoff/dump_symbols-inl.h b/src/common/pecoff/dump_symbols-inl.h
index 6ec2059..4821ac9 100644
--- a/src/common/pecoff/dump_symbols-inl.h
+++ b/src/common/pecoff/dump_symbols-inl.h
@@ -39,7 +39,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifndef _WIN32
#include <sys/mman.h>
+#endif
#include <sys/stat.h>
#include <unistd.h>
#include <libgen.h>
@@ -111,13 +113,37 @@ class MmapWrapper {
~MmapWrapper() {
if (is_set_ && base_ != NULL) {
assert(size_ > 0);
+#ifndef _WIN32
munmap(base_, size_);
+#else
+ UnmapViewOfFile(base_);
+ CloseHandle(hMap_);
+#endif
}
}
- void set(void *mapped_address, size_t mapped_size) {
+ void *set(int obj_fd, size_t mapped_size) {
+#ifndef _WIN32
+ void *mapped_address = mmap(NULL, mapped_size,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE, obj_fd, 0);
+ if (mapped_address == MAP_FAILED)
+ return NULL;
+#else
+ HANDLE h = (HANDLE)_get_osfhandle(obj_fd);
+ hMap_ = CreateFileMapping(h, NULL, PAGE_READONLY,0, 0, NULL);
+ // XXX: should also use SEC_IMAGE_NO_EXECUTE on Windows 6.2 or later
+ if (!hMap_) {
+ return NULL;
+ }
+ void *mapped_address = MapViewOfFile(hMap_, FILE_MAP_READ, 0, 0, 0);
+ if (!mapped_address) {
+ CloseHandle(hMap_);
+ return NULL;
+ }
+#endif
is_set_ = true;
base_ = mapped_address;
size_ = mapped_size;
+ return mapped_address;
}
void release() {
assert(is_set_);
@@ -130,6 +156,9 @@ class MmapWrapper {
bool is_set_;
void *base_;
size_t size_;
+#ifdef _WIN32
+ HANDLE hMap_;
+#endif
};
#ifndef NO_STABS_SUPPORT
@@ -329,15 +358,12 @@ bool LoadFile(const string& obj_file, MmapWrapper* map_wrapper,
obj_file.c_str(), strerror(errno));
return false;
}
- void *obj_base = mmap(NULL, st.st_size,
- PROT_READ | PROT_WRITE, MAP_PRIVATE, obj_fd, 0);
- if (obj_base == MAP_FAILED) {
+ *header = map_wrapper->set(obj_fd, st.st_size);
+ if (!(*header)) {
fprintf(stderr, "Failed to mmap file '%s': %s\n",
obj_file.c_str(), strerror(errno));
return false;
}
- map_wrapper->set(obj_base, st.st_size);
- *header = obj_base;
return true;
}
--
2.1.1