• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
23 namespace __sanitizer {
24 
GetListOfModules(LoadedModule * modules,uptr max_modules,string_predicate_t filter)25 uptr 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 
SymbolizerPrepareForSandboxing()56 void SymbolizerPrepareForSandboxing() {
57   // Do nothing on Mac.
58 }
59 
60 }  // namespace __sanitizer
61 
62 #endif  // SANITIZER_MAC
63