re-added changes due to svn config setting issues
authorNaomi Musgrave <nmusgrave@google.com>
Fri, 17 Jul 2015 23:28:00 +0000 (23:28 +0000)
committerNaomi Musgrave <nmusgrave@google.com>
Fri, 17 Jul 2015 23:28:00 +0000 (23:28 +0000)
llvm-svn: 242589

compiler-rt/include/sanitizer/msan_interface.h
compiler-rt/lib/msan/msan.cc
compiler-rt/lib/msan/msan_flags.inc
compiler-rt/lib/msan/msan_interceptors.cc
compiler-rt/lib/msan/msan_interface_internal.h

index f54bcaa..7033135 100644 (file)
@@ -92,6 +92,9 @@ extern "C" {
      Memory will be marked uninitialized, with origin at the call site. */
   void __msan_allocated_memory(const volatile void* data, size_t size);
 
+  /* Tell MSan about newly destroyed memory. Mark memory as uninitialized. */
+  void __sanitizer_dtor_callback(const volatile void* data, size_t size);
+
   /* This function may be optionally provided by user and should return
      a string containing Msan runtime options. See msan_flags.h for details. */
   const char* __msan_default_options();
index 163d59d..d324dcf 100644 (file)
@@ -511,7 +511,7 @@ void __msan_partial_poison(const void* data, void* shadow, uptr size) {
   internal_memcpy((void*)MEM_TO_SHADOW((uptr)data), shadow, size);
 }
 
-void __msan_load_unpoisoned(void *src, uptr size, void *dst) {
+void __msan_load_unpoisoned(const void *src, uptr size, void *dst) {
   internal_memcpy(dst, src, size);
   __msan_unpoison(dst, size);
 }
index cb58ffc..3729b3f 100644 (file)
@@ -24,6 +24,7 @@ MSAN_FLAG(bool, poison_heap_with_zeroes, false, "")
 MSAN_FLAG(bool, poison_stack_with_zeroes, false, "")
 MSAN_FLAG(bool, poison_in_malloc, true, "")
 MSAN_FLAG(bool, poison_in_free, true, "")
+MSAN_FLAG(bool, poison_in_dtor, false, "")
 MSAN_FLAG(bool, report_umrs, true, "")
 MSAN_FLAG(bool, wrap_signals, true, "")
 MSAN_FLAG(bool, print_stats, false, "")
index 6d5a056..972a9d3 100644 (file)
@@ -1005,6 +1005,14 @@ void __msan_allocated_memory(const void *data, uptr size) {
   }
 }
 
+void __sanitizer_dtor_callback(const void *data, uptr size) {
+  GET_MALLOC_STACK_TRACE;
+  if (flags()->poison_in_dtor) {
+    stack.tag = STACK_TRACE_TAG_POISON;
+    PoisonMemory(data, size, &stack);
+  }
+}
+
 INTERCEPTOR(void *, mmap, void *addr, SIZE_T length, int prot, int flags,
             int fd, OFF_T offset) {
   if (msan_init_is_running)
index f4d37d9..3b0e30c 100644 (file)
@@ -140,6 +140,11 @@ void __msan_partial_poison(const void* data, void* shadow, uptr size);
 SANITIZER_INTERFACE_ATTRIBUTE
 void __msan_allocated_memory(const void* data, uptr size);
 
+// Tell MSan about newly destroyed memory. Memory will be marked
+// uninitialized.
+SANITIZER_INTERFACE_ATTRIBUTE
+void __sanitizer_dtor_callback(const void* data, uptr size);
+
 SANITIZER_INTERFACE_ATTRIBUTE
 u16 __sanitizer_unaligned_load16(const uu16 *p);