[llvm-branch-commits] [NFC][asan] Switch to IntrusiveList in asan_globals (PR #101577)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Aug 1 16:05:17 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Vitaly Buka (vitalybuka)
<details>
<summary>Changes</summary>
It's preparation for switching to hash table.
---
Full diff: https://github.com/llvm/llvm-project/pull/101577.diff
1 Files Affected:
- (modified) compiler-rt/lib/asan/asan_globals.cpp (+10-25)
``````````diff
diff --git a/compiler-rt/lib/asan/asan_globals.cpp b/compiler-rt/lib/asan/asan_globals.cpp
index 9766488fed0c9..90481467d5eb8 100644
--- a/compiler-rt/lib/asan/asan_globals.cpp
+++ b/compiler-rt/lib/asan/asan_globals.cpp
@@ -45,15 +45,13 @@ static ListOfGlobals list_of_all_globals SANITIZER_GUARDED_BY(mu_for_globals);
static MapOfGlobals map_of_globals_by_indicator
SANITIZER_GUARDED_BY(mu_for_globals);
-static const int kDynamicInitGlobalsInitialCapacity = 512;
struct DynInitGlobal {
- Global g;
- bool initialized;
+ Global g = {};
+ bool initialized = false;
+ DynInitGlobal *next = nullptr;
};
-typedef InternalMmapVector<DynInitGlobal> VectorOfGlobals;
-// Lazy-initialized and never deleted.
-static VectorOfGlobals *dynamic_init_globals
- SANITIZER_GUARDED_BY(mu_for_globals);
+typedef IntrusiveList<DynInitGlobal> DynInitGlobals;
+static DynInitGlobals dynamic_init_globals SANITIZER_GUARDED_BY(mu_for_globals);
// We want to remember where a certain range of globals was registered.
struct GlobalRegistrationSite {
@@ -249,12 +247,8 @@ static void RegisterGlobal(const Global *g) SANITIZER_REQUIRES(mu_for_globals) {
AddGlobalToList(list_of_all_globals, g);
if (g->has_dynamic_init) {
- if (!dynamic_init_globals) {
- dynamic_init_globals = new (GetGlobalLowLevelAllocator()) VectorOfGlobals;
- dynamic_init_globals->reserve(kDynamicInitGlobalsInitialCapacity);
- }
- DynInitGlobal dyn_global = { *g, false };
- dynamic_init_globals->push_back(dyn_global);
+ dynamic_init_globals.push_back(new (GetGlobalLowLevelAllocator())
+ DynInitGlobal{*g, false});
}
}
@@ -284,11 +278,8 @@ void StopInitOrderChecking() {
if (!flags()->check_initialization_order)
return;
Lock lock(&mu_for_globals);
- if (!dynamic_init_globals)
- return;
flags()->check_initialization_order = false;
- for (uptr i = 0, n = dynamic_init_globals->size(); i < n; ++i) {
- DynInitGlobal &dyn_g = (*dynamic_init_globals)[i];
+ for (const DynInitGlobal &dyn_g : dynamic_init_globals) {
const Global *g = &dyn_g.g;
// Unpoison the whole global.
PoisonShadowForGlobal(g, 0);
@@ -455,12 +446,9 @@ void __asan_before_dynamic_init(const char *module_name) {
CHECK(module_name);
CHECK(AsanInited());
Lock lock(&mu_for_globals);
- if (!dynamic_init_globals)
- return;
if (flags()->report_globals >= 3)
Printf("DynInitPoison module: %s\n", module_name);
- for (uptr i = 0, n = dynamic_init_globals->size(); i < n; ++i) {
- DynInitGlobal &dyn_g = (*dynamic_init_globals)[i];
+ for (DynInitGlobal &dyn_g : dynamic_init_globals) {
const Global *g = &dyn_g.g;
if (dyn_g.initialized)
continue;
@@ -479,11 +467,8 @@ void __asan_after_dynamic_init() {
return;
CHECK(AsanInited());
Lock lock(&mu_for_globals);
- if (!dynamic_init_globals)
- return;
// FIXME: Optionally report that we're unpoisoning globals from a module.
- for (uptr i = 0, n = dynamic_init_globals->size(); i < n; ++i) {
- DynInitGlobal &dyn_g = (*dynamic_init_globals)[i];
+ for (const DynInitGlobal &dyn_g : dynamic_init_globals) {
const Global *g = &dyn_g.g;
if (!dyn_g.initialized) {
// Unpoison the whole global.
``````````
</details>
https://github.com/llvm/llvm-project/pull/101577
More information about the llvm-branch-commits
mailing list