[compiler-rt] r314520 - Remove recursion from FindModuleForAddress. NFC.

Francis Ricci via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 29 08:14:31 PDT 2017


Author: fjricci
Date: Fri Sep 29 08:14:31 2017
New Revision: 314520

URL: http://llvm.org/viewvc/llvm-project?rev=314520&view=rev
Log:
Remove recursion from FindModuleForAddress. NFC.

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc

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=314520&r1=314519&r2=314520&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc Fri Sep 29 08:14:31 2017
@@ -163,29 +163,42 @@ bool Symbolizer::FindModuleNameAndOffset
   return true;
 }
 
+void Symbolizer::RefreshModules() {
+  modules_.init();
+  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_) {
-    modules_.init();
-    RAW_CHECK(modules_.size() > 0);
-    modules_fresh_ = true;
+    RefreshModules();
     modules_were_reloaded = true;
   }
-  for (uptr i = 0; i < modules_.size(); i++) {
-    if (modules_[i].containsAddress(address)) {
-      return &modules_[i];
-    }
-  }
+  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.
 #if !SANITIZER_INTERCEPT_DLOPEN_DLCLOSE
   if (!modules_were_reloaded) {
-    modules_fresh_ = false;
-    return FindModuleForAddress(address);
+    RefreshModules();
+    module = SearchForModule(modules_, address);
+    if (module) return module;
   }
 #endif
-  return 0;
+  return module;
 }
 
 // For now we assume the following protocol:




More information about the llvm-commits mailing list