
Summary: There is currently too much redundancy in the class/variable/* names in Scudo: - we are in the namespace `__scudo`, so there is no point in having something named `ScudoX` to end up with a final name of `__scudo::ScudoX`; - there are a lot of types/* that have `Allocator` in the name, given that Scudo is an allocator I figure this doubles up as well. So change a bunch of the Scudo names to make them shorter, less redundant, and overall simpler. They should still be pretty self explaining (or at least it looks so to me). The TSD part will be done in another CL (eg `__scudo::ScudoTSD`). Reviewers: alekseyshl, eugenis Reviewed By: alekseyshl Subscribers: delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D49505 llvm-svn: 337557
67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
//===-- scudo_tsd.h ---------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// Scudo thread specific data definition.
|
|
/// Implementation will differ based on the thread local storage primitives
|
|
/// offered by the underlying platform.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SCUDO_TSD_H_
|
|
#define SCUDO_TSD_H_
|
|
|
|
#include "scudo_allocator.h"
|
|
#include "scudo_utils.h"
|
|
|
|
#include <pthread.h>
|
|
|
|
namespace __scudo {
|
|
|
|
struct ALIGNED(SANITIZER_CACHE_LINE_SIZE) ScudoTSD {
|
|
AllocatorCacheT Cache;
|
|
uptr QuarantineCachePlaceHolder[4];
|
|
|
|
void init();
|
|
void commitBack();
|
|
|
|
INLINE bool tryLock() {
|
|
if (Mutex.TryLock()) {
|
|
atomic_store_relaxed(&Precedence, 0);
|
|
return true;
|
|
}
|
|
if (atomic_load_relaxed(&Precedence) == 0)
|
|
atomic_store_relaxed(&Precedence, static_cast<uptr>(
|
|
MonotonicNanoTime() >> FIRST_32_SECOND_64(16, 0)));
|
|
return false;
|
|
}
|
|
|
|
INLINE void lock() {
|
|
atomic_store_relaxed(&Precedence, 0);
|
|
Mutex.Lock();
|
|
}
|
|
|
|
INLINE void unlock() { Mutex.Unlock(); }
|
|
|
|
INLINE uptr getPrecedence() { return atomic_load_relaxed(&Precedence); }
|
|
|
|
private:
|
|
StaticSpinMutex Mutex;
|
|
atomic_uintptr_t Precedence;
|
|
};
|
|
|
|
void initThread(bool MinimalInit);
|
|
|
|
// TSD model specific fastpath functions definitions.
|
|
#include "scudo_tsd_exclusive.inc"
|
|
#include "scudo_tsd_shared.inc"
|
|
|
|
} // namespace __scudo
|
|
|
|
#endif // SCUDO_TSD_H_
|