[compiler-rt] r253080 - [tsan] Don't demangle names not starting with "_Z"

Kuba Brecka via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 13 12:47:29 PST 2015


Author: kuba.brecka
Date: Fri Nov 13 14:47:29 2015
New Revision: 253080

URL: http://llvm.org/viewvc/llvm-project?rev=253080&view=rev
Log:
[tsan] Don't demangle names not starting with "_Z"

I noticed that when a symbol is named just "x", it gets demangled to "long long". On POSIX, AFAIK, mangled names always start with "_Z", so lets just require that.

Differential Revision: http://reviews.llvm.org/D14637


Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
    compiler-rt/trunk/test/tsan/Darwin/symbolizer-dladdr.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc?rev=253080&r1=253079&r2=253080&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc Fri Nov 13 14:47:29 2015
@@ -48,6 +48,9 @@ namespace __sanitizer {
 
 // Attempts to demangle the name via __cxa_demangle from __cxxabiv1.
 const char *DemangleCXXABI(const char *name) {
+  if (name[0] != '_' || name[1] != 'Z')
+    return name;
+
   // FIXME: __cxa_demangle aggressively insists on allocating memory.
   // There's not much we can do about that, short of providing our
   // own demangler (libc++abi's implementation could be adapted so that

Modified: compiler-rt/trunk/test/tsan/Darwin/symbolizer-dladdr.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/Darwin/symbolizer-dladdr.cc?rev=253080&r1=253079&r2=253080&view=diff
==============================================================================
--- compiler-rt/trunk/test/tsan/Darwin/symbolizer-dladdr.cc (original)
+++ compiler-rt/trunk/test/tsan/Darwin/symbolizer-dladdr.cc Fri Nov 13 14:47:29 2015
@@ -3,10 +3,12 @@
 #include "../test.h"
 
 int GlobalData[10];
+long long x;
 
 void *Thread(void *a) {
   barrier_wait(&barrier);
   GlobalData[2] = 42;
+  x = 7;
   return 0;
 }
 
@@ -18,6 +20,7 @@ int main() {
   pthread_t t;
   pthread_create(&t, 0, Thread, 0);
   GlobalData[2] = 43;
+  x = 8;
   barrier_wait(&barrier);
   pthread_join(t, 0);
 }
@@ -27,3 +30,5 @@ int main() {
 // CHECK: addr=[[ADDR:0x[0-9,a-f]+]]
 // CHECK: WARNING: ThreadSanitizer: data race
 // CHECK: Location is global 'GlobalData' at [[ADDR]] ({{.*}}+0x{{[0-9,a-f]+}})
+// CHECK: WARNING: ThreadSanitizer: data race
+// CHECK: Location is global 'x' at {{.*}} ({{.*}}+0x{{[0-9,a-f]+}})




More information about the llvm-commits mailing list