[compiler-rt] r314347 - Revert "Add support for custom loaders to symbolizer"

Francis Ricci via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 27 14:35:33 PDT 2017


Author: fjricci
Date: Wed Sep 27 14:35:33 2017
New Revision: 314347

URL: http://llvm.org/viewvc/llvm-project?rev=314347&view=rev
Log:
Revert "Add support for custom loaders to symbolizer"

This broke the windows buildbots, revert for now.

This reverts commit 24050b5ddef42f6f3306aa94d4a1f42a7893a9a7.

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_common.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_mac.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Wed Sep 27 14:35:33 2017
@@ -727,10 +727,9 @@ class LoadedModule {
 // filling this information.
 class ListOfModules {
  public:
-  ListOfModules() {}
+  ListOfModules() : modules_(kInitialCapacity) {}
   ~ListOfModules() { clear(); }
   void init();
-  void fallbackInit();  // Uses fallback init if available, otherwise clears
   const LoadedModule *begin() const { return modules_.begin(); }
   LoadedModule *begin() { return modules_.begin(); }
   const LoadedModule *end() const { return modules_.end(); }
@@ -746,11 +745,8 @@ class ListOfModules {
     for (auto &module : modules_) module.clear();
     modules_.clear();
   }
-  void clearOrInit() {
-    modules_.capacity() ? clear() : modules_.Initialize(kInitialCapacity);
-  }
 
-  InternalMmapVectorNoCtor<LoadedModule> modules_;
+  InternalMmapVector<LoadedModule> modules_;
   // We rarely have more than 16K loaded modules.
   static const uptr kInitialCapacity = 1 << 14;
 };

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux_libcdep.cc Wed Sep 27 14:35:33 2017
@@ -26,7 +26,6 @@
 #include "sanitizer_placement_new.h"
 #include "sanitizer_procmaps.h"
 #include "sanitizer_stacktrace.h"
-#include "sanitizer_symbolizer.h"
 
 #include <dlfcn.h>  // for dlsym()
 #include <link.h>
@@ -425,7 +424,7 @@ typedef ElfW(Phdr) Elf_Phdr;
 # endif
 
 struct DlIteratePhdrData {
-  InternalMmapVectorNoCtor<LoadedModule> *modules;
+  InternalMmapVector<LoadedModule> *modules;
   bool first;
 };
 
@@ -463,37 +462,21 @@ extern "C" __attribute__((weak)) int dl_
     int (*)(struct dl_phdr_info *, size_t, void *), void *);
 #endif
 
-static bool requiresProcmaps() {
+void ListOfModules::init() {
+  clear();
 #if SANITIZER_ANDROID && __ANDROID_API__ <= 22
+  u32 api_level = AndroidGetApiLevel();
   // Fall back to /proc/maps if dl_iterate_phdr is unavailable or broken.
   // The runtime check allows the same library to work with
   // both K and L (and future) Android releases.
-  return AndroidGetApiLevel() <= ANDROID_LOLLIPOP_MR1;
-#else
-  return false;
-#endif
-}
-
-static void procmapsInit(InternalMmapVectorNoCtor<LoadedModule> *modules) {
-  MemoryMappingLayout memory_mapping(false);
-  memory_mapping.DumpListOfModules(modules);
-}
-
-void ListOfModules::init() {
-  clearOrInit();
-  if (requiresProcmaps()) {
-    procmapsInit(&modules_);
-  } else {
-    DlIteratePhdrData data = {&modules_, true};
-    dl_iterate_phdr(dl_iterate_phdr_cb, &data);
+  if (api_level <= ANDROID_LOLLIPOP_MR1) { // L or earlier
+    MemoryMappingLayout memory_mapping(false);
+    memory_mapping.DumpListOfModules(&modules_);
+    return;
   }
-}
-
-// When a custom loader is used, dl_iterate_phdr may not contain the full
-// list of modules. Allow callers to fall back to using procmaps.
-void ListOfModules::fallbackInit() {
-  clearOrInit();
-  if (!requiresProcmaps()) procmapsInit(&modules_);
+#endif
+  DlIteratePhdrData data = {&modules_, true};
+  dl_iterate_phdr(dl_iterate_phdr_cb, &data);
 }
 
 // getrusage does not give us the current RSS, only the max RSS.

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_mac.cc Wed Sep 27 14:35:33 2017
@@ -411,13 +411,11 @@ void GetThreadStackAndTls(bool main, upt
 }
 
 void ListOfModules::init() {
-  clearOrInit();
+  clear();
   MemoryMappingLayout memory_mapping(false);
   memory_mapping.DumpListOfModules(&modules_);
 }
 
-void ListOfModules::fallbackInit() { clear(); }
-
 static HandleSignalMode GetHandleSignalModeImpl(int signum) {
   switch (signum) {
     case SIGABRT:

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps.h Wed Sep 27 14:35:33 2017
@@ -76,7 +76,7 @@ class MemoryMappingLayout {
   static void CacheMemoryMappings();
 
   // Adds all mapped objects into a vector.
-  void DumpListOfModules(InternalMmapVectorNoCtor<LoadedModule> *modules);
+  void DumpListOfModules(InternalMmapVector<LoadedModule> *modules);
 
  private:
   void LoadFromCache();

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_common.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_common.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_common.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_common.cc Wed Sep 27 14:35:33 2017
@@ -120,7 +120,7 @@ void MemoryMappingLayout::LoadFromCache(
 }
 
 void MemoryMappingLayout::DumpListOfModules(
-    InternalMmapVectorNoCtor<LoadedModule> *modules) {
+    InternalMmapVector<LoadedModule> *modules) {
   Reset();
   InternalScopedString module_name(kMaxPathLength);
   MemoryMappedSegment segment(module_name.data(), module_name.size());

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_mac.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_mac.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_mac.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_mac.cc Wed Sep 27 14:35:33 2017
@@ -353,7 +353,7 @@ bool MemoryMappingLayout::Next(MemoryMap
 }
 
 void MemoryMappingLayout::DumpListOfModules(
-    InternalMmapVectorNoCtor<LoadedModule> *modules) {
+    InternalMmapVector<LoadedModule> *modules) {
   Reset();
   InternalScopedString module_name(kMaxPathLength);
   MemoryMappedSegment segment(module_name.data(), kMaxPathLength);

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h Wed Sep 27 14:35:33 2017
@@ -119,7 +119,6 @@ class Symbolizer final {
   void AddHooks(StartSymbolizationHook start_hook,
                 EndSymbolizationHook end_hook);
 
-  void RefreshModules();
   const LoadedModule *FindModuleForAddress(uptr address);
 
   void InvalidateModuleList();
@@ -152,7 +151,6 @@ class Symbolizer final {
                                          uptr *module_offset,
                                          ModuleArch *module_arch);
   ListOfModules modules_;
-  ListOfModules fallback_modules_;
   // If stale, need to reload the modules before looking up addresses.
   bool modules_fresh_;
 

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc Wed Sep 27 14:35:33 2017
@@ -163,47 +163,29 @@ bool Symbolizer::FindModuleNameAndOffset
   return true;
 }
 
-void Symbolizer::RefreshModules() {
-  modules_.init();
-  fallback_modules_.fallbackInit();
-  RAW_CHECK(modules_.size() > 0);
-  modules_fresh_ = true;
-}
-
-static const LoadedModule *SearchForModule(const ListOfModules &modules,
-                                           uptr address) {
-  for (uptr i = 0; i < modules.size(); i++) {
-    if (modules[i].containsAddress(address)) {
-      return &modules[i];
-    }
-  }
-  return nullptr;
-}
-
 const LoadedModule *Symbolizer::FindModuleForAddress(uptr address) {
   bool modules_were_reloaded = false;
   if (!modules_fresh_) {
-    RefreshModules();
+    modules_.init();
+    RAW_CHECK(modules_.size() > 0);
+    modules_fresh_ = true;
     modules_were_reloaded = true;
   }
-  const LoadedModule *module = SearchForModule(modules_, address);
-  if (module) return module;
-
-    // dlopen/dlclose interceptors invalidate the module list, but when
-    // interception is disabled, we need to retry if the lookup fails in
-    // case the module list changed.
+  for (uptr i = 0; i < modules_.size(); i++) {
+    if (modules_[i].containsAddress(address)) {
+      return &modules_[i];
+    }
+  }
+  // dlopen/dlclose interceptors invalidate the module list, but when
+  // interception is disabled, we need to retry if the lookup fails in
+  // case the module list changed.
 #if !SANITIZER_INTERCEPT_DLOPEN_DLCLOSE
   if (!modules_were_reloaded) {
-    RefreshModules();
-    module = SearchForModule(modules_, address);
-    if (module) return module;
+    modules_fresh_ = false;
+    return FindModuleForAddress(address);
   }
 #endif
-
-  if (fallback_modules_.size()) {
-    module = SearchForModule(fallback_modules_, address);
-  }
-  return module;
+  return 0;
 }
 
 // For now we assume the following protocol:

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=314347&r1=314346&r2=314347&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Wed Sep 27 14:35:33 2017
@@ -524,7 +524,7 @@ static uptr GetPreferredBase(const char
 }
 
 void ListOfModules::init() {
-  clearOrInit();
+  clear();
   HANDLE cur_process = GetCurrentProcess();
 
   // Query the list of modules.  Start by assuming there are no more than 256
@@ -583,9 +583,7 @@ void ListOfModules::init() {
     modules_.push_back(cur_module);
   }
   UnmapOrDie(hmodules, modules_buffer_size);
-}
-
-void ListOfModules::fallbackInit() { clear(); }
+};
 
 // We can't use atexit() directly at __asan_init time as the CRT is not fully
 // initialized at this point.  Place the functions into a vector and use




More information about the llvm-commits mailing list