[compiler-rt] r277842 - Fix dumping of process module list and test it

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 5 10:55:01 PDT 2016


Author: rnk
Date: Fri Aug  5 12:55:00 2016
New Revision: 277842

URL: http://llvm.org/viewvc/llvm-project?rev=277842&view=rev
Log:
Fix dumping of process module list and test it

I probably broke this a year ago in r243895.

Added:
    compiler-rt/trunk/test/asan/TestCases/Windows/shadow_conflict_32.cc
Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=277842&r1=277841&r2=277842&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Fri Aug  5 12:55:00 2016
@@ -334,8 +334,8 @@ void DumpProcessMap() {
   InternalScopedBuffer<ModuleInfo> module_infos(num_modules);
   for (size_t i = 0; i < num_modules; ++i) {
     module_infos[i].filepath = modules[i].full_name();
-    module_infos[i].base_address = modules[i].base_address();
-    module_infos[i].end_address = modules[i].ranges().front()->end;
+    module_infos[i].base_address = modules[i].ranges().front()->beg;
+    module_infos[i].end_address = modules[i].ranges().back()->end;
   }
   qsort(module_infos.data(), num_modules, sizeof(ModuleInfo),
         CompareModulesBase);

Added: compiler-rt/trunk/test/asan/TestCases/Windows/shadow_conflict_32.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Windows/shadow_conflict_32.cc?rev=277842&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/Windows/shadow_conflict_32.cc (added)
+++ compiler-rt/trunk/test/asan/TestCases/Windows/shadow_conflict_32.cc Fri Aug  5 12:55:00 2016
@@ -0,0 +1,29 @@
+// Load this DLL at the default 32-bit ASan shadow base, and test how we dump
+// the process memory layout.
+// REQUIRES: asan-32-bits
+//
+// RUN: %clang_cl_asan -DBUILD_DLL -LD %s -Fe%t_dll.dll -link -base:0x30000000 -fixed -dynamicbase:no
+// RUN: %clang_cl_asan %s -Fe%t.exe -link %t_dll.lib
+// RUN: not %run %t.exe 2>&1 | FileCheck %s
+
+#ifndef BUILD_DLL
+#include <stdio.h>
+
+extern "C" __declspec(dllimport) int test_function();
+
+int main() {
+  fprintf(stderr, "should have failed to initialize, DLL got loaded near 0x%p\n",
+          (void *)&test_function);
+}
+
+#else
+extern "C" __declspec(dllexport) int test_function() { return 0; }
+#endif
+
+// CHECK: =={{[0-9]+}}==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
+// CHECK: =={{[0-9]+}}==ASan shadow was supposed to be located in the [0x2fff0000-0x3fffffff] range.
+// CHECK: =={{[0-9]+}}==Dumping process modules
+
+// CHECK-DAG: {{0x30000000-0x300.....}} {{.*}}\shadow_conflict_32.cc.tmp_dll.dll
+// CHECK-DAG: {{0x........-0x........}} {{.*}}\shadow_conflict_32.cc.tmp.exe
+// CHECK-DAG: {{0x........-0x........}} {{.*}}\ntdll.dll




More information about the llvm-commits mailing list