summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-08-27 13:48:48 +0000
committerAlexey Samsonov <samsonov@google.com>2012-08-27 13:48:48 +0000
commite1f5dac9296df08ff83ae5fca51ce4da995b55cf (patch)
tree35ebc1cbb5cc1faf2b19c9478e8031f146b1c64e
parent1069b9a6845a95e3482f9ee68d8e5b3e970fa11c (diff)
downloadcompiler-rt-e1f5dac9296df08ff83ae5fca51ce4da995b55cf.tar.gz
[Sanitizer] Rename ProcessMaps to MemoryMappingLayout and fix Windows build by providing stub implementation
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@162671 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/asan/asan_stack.cc2
-rw-r--r--lib/sanitizer_common/sanitizer_linux.cc20
-rw-r--r--lib/sanitizer_common/sanitizer_mac.cc21
-rw-r--r--lib/sanitizer_common/sanitizer_posix.cc4
-rw-r--r--lib/sanitizer_common/sanitizer_procmaps.h17
-rw-r--r--lib/tsan/rtl/tsan_platform_linux.cc2
6 files changed, 39 insertions, 27 deletions
diff --git a/lib/asan/asan_stack.cc b/lib/asan/asan_stack.cc
index 42ef88c6b..96c1fdf76 100644
--- a/lib/asan/asan_stack.cc
+++ b/lib/asan/asan_stack.cc
@@ -44,7 +44,7 @@ static uptr patch_pc(uptr pc) {
}
void AsanStackTrace::PrintStack(uptr *addr, uptr size) {
- ProcessMaps proc_maps;
+ MemoryMappingLayout proc_maps;
uptr frame_num = 0;
for (uptr i = 0; i < size && addr[i]; i++) {
uptr pc = patch_pc(addr[i]);
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
index 358061b8c..c2f8810ea 100644
--- a/lib/sanitizer_common/sanitizer_linux.cc
+++ b/lib/sanitizer_common/sanitizer_linux.cc
@@ -96,7 +96,7 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
CHECK_EQ(getrlimit(RLIMIT_STACK, &rl), 0);
// Find the mapping that contains a stack variable.
- ProcessMaps proc_maps;
+ MemoryMappingLayout proc_maps;
uptr start, end, offset;
uptr prev_end = 0;
while (proc_maps.Next(&start, &end, &offset, 0, 0)) {
@@ -161,7 +161,7 @@ const char *GetEnv(const char *name) {
}
// ----------------- sanitizer_procmaps.h
-ProcessMaps::ProcessMaps() {
+MemoryMappingLayout::MemoryMappingLayout() {
proc_self_maps_buff_len_ =
ReadFileToBuffer("/proc/self/maps", &proc_self_maps_buff_,
&proc_self_maps_buff_mmaped_size_, 1 << 26);
@@ -170,11 +170,11 @@ ProcessMaps::ProcessMaps() {
Reset();
}
-ProcessMaps::~ProcessMaps() {
+MemoryMappingLayout::~MemoryMappingLayout() {
UnmapOrDie(proc_self_maps_buff_, proc_self_maps_buff_mmaped_size_);
}
-void ProcessMaps::Reset() {
+void MemoryMappingLayout::Reset() {
current_ = proc_self_maps_buff_;
}
@@ -207,8 +207,8 @@ static bool IsDecimal(char c) {
return c >= '0' && c <= '9';
}
-bool ProcessMaps::Next(uptr *start, uptr *end, uptr *offset,
- char filename[], uptr filename_size) {
+bool MemoryMappingLayout::Next(uptr *start, uptr *end, uptr *offset,
+ char filename[], uptr filename_size) {
char *last = proc_self_maps_buff_ + proc_self_maps_buff_len_;
if (current_ >= last) return false;
uptr dummy;
@@ -253,10 +253,10 @@ bool ProcessMaps::Next(uptr *start, uptr *end, uptr *offset,
return true;
}
-// Gets the object name and the offset by walking ProcessMaps.
-bool ProcessMaps::GetObjectNameAndOffset(uptr addr, uptr *offset,
- char filename[],
- uptr filename_size) {
+// Gets the object name and the offset by walking MemoryMappingLayout.
+bool MemoryMappingLayout::GetObjectNameAndOffset(uptr addr, uptr *offset,
+ char filename[],
+ uptr filename_size) {
return IterateForObjectNameAndOffset(addr, offset, filename, filename_size);
}
diff --git a/lib/sanitizer_common/sanitizer_mac.cc b/lib/sanitizer_common/sanitizer_mac.cc
index d945206cc..986f31ff6 100644
--- a/lib/sanitizer_common/sanitizer_mac.cc
+++ b/lib/sanitizer_common/sanitizer_mac.cc
@@ -108,11 +108,11 @@ const char *GetEnv(const char *name) {
// ----------------- sanitizer_procmaps.h
-ProcessMaps::ProcessMaps() {
+MemoryMappingLayout::MemoryMappingLayout() {
Reset();
}
-ProcessMaps::~ProcessMaps() {
+MemoryMappingLayout::~MemoryMappingLayout() {
}
// More information about Mach-O headers can be found in mach-o/loader.h
@@ -129,11 +129,12 @@ ProcessMaps::~ProcessMaps() {
// Because these fields are taken from the images as is, one needs to add
// _dyld_get_image_vmaddr_slide() to get the actual addresses at runtime.
-void ProcessMaps::Reset() {
+void MemoryMappingLayout::Reset() {
// Count down from the top.
// TODO(glider): as per man 3 dyld, iterating over the headers with
// _dyld_image_count is thread-unsafe. We need to register callbacks for
- // adding and removing images which will invalidate the ProcessMaps state.
+ // adding and removing images which will invalidate the MemoryMappingLayout
+ // state.
current_image_ = _dyld_image_count();
current_load_cmd_count_ = -1;
current_load_cmd_addr_ = 0;
@@ -148,7 +149,7 @@ void ProcessMaps::Reset() {
// segment.
// Note that the segment addresses are not necessarily sorted.
template<u32 kLCSegment, typename SegmentCommand>
-bool ProcessMaps::NextSegmentLoad(
+bool MemoryMappingLayout::NextSegmentLoad(
uptr *start, uptr *end, uptr *offset,
char filename[], uptr filename_size) {
const char* lc = current_load_cmd_addr_;
@@ -168,8 +169,8 @@ bool ProcessMaps::NextSegmentLoad(
return false;
}
-bool ProcessMaps::Next(uptr *start, uptr *end, uptr *offset,
- char filename[], uptr filename_size) {
+bool MemoryMappingLayout::Next(uptr *start, uptr *end, uptr *offset,
+ char filename[], uptr filename_size) {
for (; current_image_ >= 0; current_image_--) {
const mach_header* hdr = _dyld_get_image_header(current_image_);
if (!hdr) continue;
@@ -219,9 +220,9 @@ bool ProcessMaps::Next(uptr *start, uptr *end, uptr *offset,
return false;
}
-bool ProcessMaps::GetObjectNameAndOffset(uptr addr, uptr *offset,
- char filename[],
- uptr filename_size) {
+bool MemoryMappingLayout::GetObjectNameAndOffset(uptr addr, uptr *offset,
+ char filename[],
+ uptr filename_size) {
return IterateForObjectNameAndOffset(addr, offset, filename, filename_size);
}
diff --git a/lib/sanitizer_common/sanitizer_posix.cc b/lib/sanitizer_common/sanitizer_posix.cc
index 1b52e1562..143fcb003 100644
--- a/lib/sanitizer_common/sanitizer_posix.cc
+++ b/lib/sanitizer_common/sanitizer_posix.cc
@@ -103,7 +103,7 @@ static inline bool IntervalsAreSeparate(uptr start1, uptr end1,
// several worker threads on Mac, which aren't expected to map big chunks of
// memory).
bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
- ProcessMaps procmaps;
+ MemoryMappingLayout procmaps;
uptr start, end;
while (procmaps.Next(&start, &end,
/*offset*/0, /*filename*/0, /*filename_size*/0)) {
@@ -114,7 +114,7 @@ bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
}
void DumpProcessMap() {
- ProcessMaps proc_maps;
+ MemoryMappingLayout proc_maps;
uptr start, end;
const sptr kBufSize = 4095;
char *filename = (char*)MmapOrDie(kBufSize, __FUNCTION__);
diff --git a/lib/sanitizer_common/sanitizer_procmaps.h b/lib/sanitizer_common/sanitizer_procmaps.h
index e7f9cac6c..2e0095237 100644
--- a/lib/sanitizer_common/sanitizer_procmaps.h
+++ b/lib/sanitizer_common/sanitizer_procmaps.h
@@ -18,9 +18,18 @@
namespace __sanitizer {
-class ProcessMaps {
+#ifdef _WIN32
+class MemoryMappingLayout {
+ MemoryMappingLayout() {
+ UNIMPLEMENTED();
+ }
+};
+
+#else // _WIN32
+
+class MemoryMappingLayout {
public:
- ProcessMaps();
+ MemoryMappingLayout();
bool Next(uptr *start, uptr *end, uptr *offset,
char filename[], uptr filename_size);
void Reset();
@@ -28,7 +37,7 @@ class ProcessMaps {
// address 'addr'. Returns true on success.
bool GetObjectNameAndOffset(uptr addr, uptr *offset,
char filename[], uptr filename_size);
- ~ProcessMaps();
+ ~MemoryMappingLayout();
private:
// Default implementation of GetObjectNameAndOffset.
@@ -77,6 +86,8 @@ class ProcessMaps {
#endif
};
+#endif // _WIN32
+
} // namespace __sanitizer
#endif // SANITIZER_PROCMAPS_H
diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc
index 97f1320a9..f6b55982d 100644
--- a/lib/tsan/rtl/tsan_platform_linux.cc
+++ b/lib/tsan/rtl/tsan_platform_linux.cc
@@ -135,7 +135,7 @@ void InitializeShadowMemory() {
#ifndef TSAN_GO
static void CheckPIE() {
// Ensure that the binary is indeed compiled with -pie.
- ProcessMaps proc_maps;
+ MemoryMappingLayout proc_maps;
uptr start, end;
if (proc_maps.Next(&start, &end,
/*offset*/0, /*filename*/0, /*filename_size*/0)) {