//===-- 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