1//===-- sanitizer_symbolizer_mac.cc ---------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is shared between AddressSanitizer and ThreadSanitizer 11// run-time libraries. 12// Mac-specific implementation of symbolizer parts. 13//===----------------------------------------------------------------------===// 14 15#include "sanitizer_platform.h" 16#if SANITIZER_MAC 17#include "sanitizer_common.h" 18#include "sanitizer_internal_defs.h" 19#include "sanitizer_placement_new.h" 20#include "sanitizer_procmaps.h" 21#include "sanitizer_symbolizer.h" 22 23namespace __sanitizer { 24 25uptr GetListOfModules(LoadedModule *modules, uptr max_modules, 26 string_predicate_t filter) { 27 MemoryMappingLayout memory_mapping(false); 28 memory_mapping.Reset(); 29 uptr cur_beg, cur_end, cur_offset; 30 InternalScopedBuffer<char> module_name(kMaxPathLength); 31 uptr n_modules = 0; 32 for (uptr i = 0; 33 n_modules < max_modules && 34 memory_mapping.Next(&cur_beg, &cur_end, &cur_offset, 35 module_name.data(), module_name.size(), 0); 36 i++) { 37 const char *cur_name = module_name.data(); 38 if (cur_name[0] == '\0') 39 continue; 40 if (filter && !filter(cur_name)) 41 continue; 42 LoadedModule *cur_module = 0; 43 if (n_modules > 0 && 44 0 == internal_strcmp(cur_name, modules[n_modules - 1].full_name())) { 45 cur_module = &modules[n_modules - 1]; 46 } else { 47 void *mem = &modules[n_modules]; 48 cur_module = new(mem) LoadedModule(cur_name, cur_beg); 49 n_modules++; 50 } 51 cur_module->addAddressRange(cur_beg, cur_end); 52 } 53 return n_modules; 54} 55 56void SymbolizerPrepareForSandboxing() { 57 // Do nothing on Mac. 58} 59 60} // namespace __sanitizer 61 62#endif // SANITIZER_MAC 63