aboutsummaryrefslogtreecommitdiff
path: root/compiler-rt/lib/scudo/standalone/bytemap.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/scudo/standalone/bytemap.h')
-rw-r--r--compiler-rt/lib/scudo/standalone/bytemap.h81
1 files changed, 4 insertions, 77 deletions
diff --git a/compiler-rt/lib/scudo/standalone/bytemap.h b/compiler-rt/lib/scudo/standalone/bytemap.h
index a03a0c471062..e0d54f4e5971 100644
--- a/compiler-rt/lib/scudo/standalone/bytemap.h
+++ b/compiler-rt/lib/scudo/standalone/bytemap.h
@@ -17,12 +17,10 @@ namespace scudo {
template <uptr Size> class FlatByteMap {
public:
- void initLinkerInitialized() {
- Map = reinterpret_cast<u8 *>(map(nullptr, Size, "scudo:bytemap"));
- }
- void init() { initLinkerInitialized(); }
+ void initLinkerInitialized() {}
+ void init() { memset(Map, 0, sizeof(Map)); }
- void unmapTestOnly() { unmap(reinterpret_cast<void *>(Map), Size); }
+ void unmapTestOnly() {}
void set(uptr Index, u8 Value) {
DCHECK_LT(Index, Size);
@@ -38,78 +36,7 @@ public:
void enable() {}
private:
- u8 *Map;
-};
-
-template <uptr Level1Size, uptr Level2Size> class TwoLevelByteMap {
-public:
- void initLinkerInitialized() {
- Level1Map = reinterpret_cast<atomic_uptr *>(
- map(nullptr, sizeof(atomic_uptr) * Level1Size, "scudo:bytemap"));
- }
- void init() {
- Mutex.init();
- initLinkerInitialized();
- }
-
- void reset() {
- for (uptr I = 0; I < Level1Size; I++) {
- u8 *P = get(I);
- if (!P)
- continue;
- unmap(P, Level2Size);
- }
- memset(Level1Map, 0, sizeof(atomic_uptr) * Level1Size);
- }
-
- void unmapTestOnly() {
- reset();
- unmap(reinterpret_cast<void *>(Level1Map),
- sizeof(atomic_uptr) * Level1Size);
- }
-
- uptr size() const { return Level1Size * Level2Size; }
-
- void set(uptr Index, u8 Value) {
- DCHECK_LT(Index, Level1Size * Level2Size);
- u8 *Level2Map = getOrCreate(Index / Level2Size);
- DCHECK_EQ(0U, Level2Map[Index % Level2Size]);
- Level2Map[Index % Level2Size] = Value;
- }
-
- u8 operator[](uptr Index) const {
- DCHECK_LT(Index, Level1Size * Level2Size);
- u8 *Level2Map = get(Index / Level2Size);
- if (!Level2Map)
- return 0;
- return Level2Map[Index % Level2Size];
- }
-
- void disable() { Mutex.lock(); }
- void enable() { Mutex.unlock(); }
-
-private:
- u8 *get(uptr Index) const {
- DCHECK_LT(Index, Level1Size);
- return reinterpret_cast<u8 *>(
- atomic_load(&Level1Map[Index], memory_order_acquire));
- }
-
- u8 *getOrCreate(uptr Index) {
- u8 *Res = get(Index);
- if (!Res) {
- ScopedLock L(Mutex);
- if (!(Res = get(Index))) {
- Res = reinterpret_cast<u8 *>(map(nullptr, Level2Size, "scudo:bytemap"));
- atomic_store(&Level1Map[Index], reinterpret_cast<uptr>(Res),
- memory_order_release);
- }
- }
- return Res;
- }
-
- atomic_uptr *Level1Map;
- HybridMutex Mutex;
+ u8 Map[Size];
};
} // namespace scudo