forked from OSchip/llvm-project
[NFC][lsan] Simplify root_regions initialization
This commit is contained in:
parent
496e7f330c
commit
64d4420824
|
@ -131,18 +131,13 @@ static LeakSuppressionContext *GetSuppressionContext() {
|
|||
return suppression_ctx;
|
||||
}
|
||||
|
||||
static InternalMmapVector<RootRegion> *root_regions;
|
||||
static InternalMmapVectorNoCtor<RootRegion> root_regions;
|
||||
|
||||
InternalMmapVector<RootRegion> const *GetRootRegions() { return root_regions; }
|
||||
|
||||
void InitializeRootRegions() {
|
||||
CHECK(!root_regions);
|
||||
ALIGNED(64) static char placeholder[sizeof(InternalMmapVector<RootRegion>)];
|
||||
root_regions = new (placeholder) InternalMmapVector<RootRegion>();
|
||||
InternalMmapVectorNoCtor<RootRegion> const *GetRootRegions() {
|
||||
return &root_regions;
|
||||
}
|
||||
|
||||
void InitCommonLsan() {
|
||||
InitializeRootRegions();
|
||||
if (common_flags()->detect_leaks) {
|
||||
// Initialization which can fail or print warnings should only be done if
|
||||
// LSan is actually enabled.
|
||||
|
@ -426,10 +421,8 @@ static void ProcessRootRegion(Frontier *frontier,
|
|||
// Scans root regions for heap pointers.
|
||||
static void ProcessRootRegions(Frontier *frontier) {
|
||||
if (!flags()->use_root_regions) return;
|
||||
CHECK(root_regions);
|
||||
for (uptr i = 0; i < root_regions->size(); i++) {
|
||||
ProcessRootRegion(frontier, (*root_regions)[i]);
|
||||
}
|
||||
for (uptr i = 0; i < root_regions.size(); i++)
|
||||
ProcessRootRegion(frontier, root_regions[i]);
|
||||
}
|
||||
|
||||
static void FloodFillTag(Frontier *frontier, ChunkTag tag) {
|
||||
|
@ -966,9 +959,8 @@ SANITIZER_INTERFACE_ATTRIBUTE
|
|||
void __lsan_register_root_region(const void *begin, uptr size) {
|
||||
#if CAN_SANITIZE_LEAKS
|
||||
Lock l(&global_mutex);
|
||||
CHECK(root_regions);
|
||||
RootRegion region = {reinterpret_cast<uptr>(begin), size};
|
||||
root_regions->push_back(region);
|
||||
root_regions.push_back(region);
|
||||
VReport(1, "Registered root region at %p of size %zu\n", begin, size);
|
||||
#endif // CAN_SANITIZE_LEAKS
|
||||
}
|
||||
|
@ -977,15 +969,14 @@ SANITIZER_INTERFACE_ATTRIBUTE
|
|||
void __lsan_unregister_root_region(const void *begin, uptr size) {
|
||||
#if CAN_SANITIZE_LEAKS
|
||||
Lock l(&global_mutex);
|
||||
CHECK(root_regions);
|
||||
bool removed = false;
|
||||
for (uptr i = 0; i < root_regions->size(); i++) {
|
||||
RootRegion region = (*root_regions)[i];
|
||||
for (uptr i = 0; i < root_regions.size(); i++) {
|
||||
RootRegion region = root_regions[i];
|
||||
if (region.begin == reinterpret_cast<uptr>(begin) && region.size == size) {
|
||||
removed = true;
|
||||
uptr last_index = root_regions->size() - 1;
|
||||
(*root_regions)[i] = (*root_regions)[last_index];
|
||||
root_regions->pop_back();
|
||||
uptr last_index = root_regions.size() - 1;
|
||||
root_regions[i] = root_regions[last_index];
|
||||
root_regions.pop_back();
|
||||
VReport(1, "Unregistered root region at %p of size %zu\n", begin, size);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -140,7 +140,7 @@ struct CheckForLeaksParam {
|
|||
bool success = false;
|
||||
};
|
||||
|
||||
InternalMmapVector<RootRegion> const *GetRootRegions();
|
||||
InternalMmapVectorNoCtor<RootRegion> const *GetRootRegions();
|
||||
void ScanRootRegion(Frontier *frontier, RootRegion const ®ion,
|
||||
uptr region_begin, uptr region_end, bool is_readable);
|
||||
void ForEachExtraStackRangeCb(uptr begin, uptr end, void* arg);
|
||||
|
|
|
@ -149,7 +149,7 @@ void ProcessPlatformSpecificAllocations(Frontier *frontier) {
|
|||
kern_return_t err = KERN_SUCCESS;
|
||||
mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64;
|
||||
|
||||
InternalMmapVector<RootRegion> const *root_regions = GetRootRegions();
|
||||
InternalMmapVectorNoCtor<RootRegion> const *root_regions = GetRootRegions();
|
||||
|
||||
while (err == KERN_SUCCESS) {
|
||||
struct vm_region_submap_info_64 info;
|
||||
|
|
|
@ -170,14 +170,14 @@ ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) {
|
|||
|
||||
ScopedBlockSignals::~ScopedBlockSignals() { SetSigProcMask(&saved_, nullptr); }
|
||||
|
||||
#if SANITIZER_LINUX && defined(__x86_64__)
|
||||
#include "sanitizer_syscall_linux_x86_64.inc"
|
||||
#elif SANITIZER_LINUX && SANITIZER_RISCV64
|
||||
#include "sanitizer_syscall_linux_riscv64.inc"
|
||||
#elif SANITIZER_LINUX && defined(__aarch64__)
|
||||
#include "sanitizer_syscall_linux_aarch64.inc"
|
||||
#elif SANITIZER_LINUX && defined(__arm__)
|
||||
#include "sanitizer_syscall_linux_arm.inc"
|
||||
# if SANITIZER_LINUX && defined(__x86_64__)
|
||||
# include "sanitizer_syscall_linux_x86_64.inc"
|
||||
# elif SANITIZER_LINUX && SANITIZER_RISCV64
|
||||
# include "sanitizer_syscall_linux_riscv64.inc"
|
||||
# elif SANITIZER_LINUX && defined(__aarch64__)
|
||||
# include "sanitizer_syscall_linux_aarch64.inc"
|
||||
# elif SANITIZER_LINUX && defined(__arm__)
|
||||
# include "sanitizer_syscall_linux_arm.inc"
|
||||
# elif SANITIZER_LINUX && defined(__hexagon__)
|
||||
# include "sanitizer_syscall_linux_hexagon.inc"
|
||||
# else
|
||||
|
|
Loading…
Reference in New Issue