forked from OSchip/llvm-project
63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
//===-- sanitizer_symbolizer_mac.cc ---------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file is shared between AddressSanitizer and ThreadSanitizer
|
|
// run-time libraries.
|
|
// Mac-specific implementation of symbolizer parts.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "sanitizer_platform.h"
|
|
#if SANITIZER_MAC
|
|
#include "sanitizer_common.h"
|
|
#include "sanitizer_internal_defs.h"
|
|
#include "sanitizer_placement_new.h"
|
|
#include "sanitizer_procmaps.h"
|
|
#include "sanitizer_symbolizer.h"
|
|
|
|
namespace __sanitizer {
|
|
|
|
uptr GetListOfModules(LoadedModule *modules, uptr max_modules,
|
|
string_predicate_t filter) {
|
|
MemoryMappingLayout memory_mapping(false);
|
|
memory_mapping.Reset();
|
|
uptr cur_beg, cur_end, cur_offset;
|
|
InternalScopedBuffer<char> module_name(kMaxPathLength);
|
|
uptr n_modules = 0;
|
|
for (uptr i = 0;
|
|
n_modules < max_modules &&
|
|
memory_mapping.Next(&cur_beg, &cur_end, &cur_offset,
|
|
module_name.data(), module_name.size(), 0);
|
|
i++) {
|
|
const char *cur_name = module_name.data();
|
|
if (cur_name[0] == '\0')
|
|
continue;
|
|
if (filter && !filter(cur_name))
|
|
continue;
|
|
LoadedModule *cur_module = 0;
|
|
if (n_modules > 0 &&
|
|
0 == internal_strcmp(cur_name, modules[n_modules - 1].full_name())) {
|
|
cur_module = &modules[n_modules - 1];
|
|
} else {
|
|
void *mem = &modules[n_modules];
|
|
cur_module = new(mem) LoadedModule(cur_name, cur_beg);
|
|
n_modules++;
|
|
}
|
|
cur_module->addAddressRange(cur_beg, cur_end);
|
|
}
|
|
return n_modules;
|
|
}
|
|
|
|
void SymbolizerPrepareForSandboxing() {
|
|
// Do nothing on Mac.
|
|
}
|
|
|
|
} // namespace __sanitizer
|
|
|
|
#endif // SANITIZER_MAC
|