diff options
author | Alexey Samsonov <samsonov@google.com> | 2012-08-27 13:48:48 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2012-08-27 13:48:48 +0000 |
commit | e1f5dac9296df08ff83ae5fca51ce4da995b55cf (patch) | |
tree | 35ebc1cbb5cc1faf2b19c9478e8031f146b1c64e | |
parent | 1069b9a6845a95e3482f9ee68d8e5b3e970fa11c (diff) | |
download | compiler-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.cc | 2 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_linux.cc | 20 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_mac.cc | 21 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_posix.cc | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_procmaps.h | 17 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_platform_linux.cc | 2 |
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)) { |