Home | History | Annotate | Download | only in tests
      1 //===-- sanitizer_procmaps_test.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 a part of ThreadSanitizer/AddressSanitizer runtime.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 #if !defined(_WIN32)  // There are no /proc/maps on Windows.
     14 
     15 #include "sanitizer_common/sanitizer_procmaps.h"
     16 #include "gtest/gtest.h"
     17 
     18 #include <stdlib.h>
     19 
     20 static void noop() {}
     21 extern const char *argv0;
     22 
     23 namespace __sanitizer {
     24 
     25 #if SANITIZER_LINUX && !SANITIZER_ANDROID
     26 TEST(MemoryMappingLayout, CodeRange) {
     27   uptr start, end;
     28   bool res = GetCodeRangeForFile("[vdso]", &start, &end);
     29   EXPECT_EQ(res, true);
     30   EXPECT_GT(start, 0U);
     31   EXPECT_LT(start, end);
     32 }
     33 #endif
     34 
     35 TEST(MemoryMappingLayout, DumpListOfModules) {
     36   const char *last_slash = strrchr(argv0, '/');
     37   const char *binary_name = last_slash ? last_slash + 1 : argv0;
     38   MemoryMappingLayout memory_mapping(false);
     39   const uptr kMaxModules = 100;
     40   InternalMmapVector<LoadedModule> modules(kMaxModules);
     41   memory_mapping.DumpListOfModules(&modules);
     42   EXPECT_GT(modules.size(), 0U);
     43   bool found = false;
     44   for (uptr i = 0; i < modules.size(); ++i) {
     45     if (modules[i].containsAddress((uptr)&noop)) {
     46       // Verify that the module name is sane.
     47       if (strstr(modules[i].full_name(), binary_name) != 0)
     48         found = true;
     49     }
     50     modules[i].clear();
     51   }
     52   EXPECT_TRUE(found);
     53 }
     54 
     55 }  // namespace __sanitizer
     56 #endif  // !defined(_WIN32)
     57