[tsan] Add global symbolication support into DlAddrSymbolizer
`DlAddrSymbolizer` is used on OS X when we're running inside a sandbox that prevents us from spawning an external symbolizer. This patch adds support for symbolication of globals (implements `SymbolizeData`) for `DlAddrSymbolizer`. Differential Revision: http://reviews.llvm.org/D14613 llvm-svn: 252899
This commit is contained in:
parent
314b752513
commit
af9525dfff
|
|
@ -37,8 +37,14 @@ bool DlAddrSymbolizer::SymbolizePC(uptr addr, SymbolizedStack *stack) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool DlAddrSymbolizer::SymbolizeData(uptr addr, DataInfo *info) {
|
||||
return false;
|
||||
bool DlAddrSymbolizer::SymbolizeData(uptr addr, DataInfo *datainfo) {
|
||||
Dl_info info;
|
||||
int result = dladdr((const void *)addr, &info);
|
||||
if (!result) return false;
|
||||
const char *demangled = DemangleCXXABI(info.dli_sname);
|
||||
datainfo->name = internal_strdup(demangled);
|
||||
datainfo->start = (uptr)info.dli_saddr;
|
||||
return true;
|
||||
}
|
||||
|
||||
class AtosSymbolizerProcess : public SymbolizerProcess {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
// RUN: %clangxx_tsan %s -o %t
|
||||
// RUN: TSAN_OPTIONS=$TSAN_OPTIONS:verbosity=2:external_symbolizer_path= %deflake %run %t | FileCheck %s
|
||||
#include "../test.h"
|
||||
|
||||
int GlobalData[10];
|
||||
|
||||
void *Thread(void *a) {
|
||||
barrier_wait(&barrier);
|
||||
GlobalData[2] = 42;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main() {
|
||||
barrier_init(&barrier, 2);
|
||||
fprintf(stderr, "addr=");
|
||||
print_address(GlobalData);
|
||||
fprintf(stderr, "\n");
|
||||
pthread_t t;
|
||||
pthread_create(&t, 0, Thread, 0);
|
||||
GlobalData[2] = 43;
|
||||
barrier_wait(&barrier);
|
||||
pthread_join(t, 0);
|
||||
}
|
||||
|
||||
// CHECK: External symbolizer is explicitly disabled.
|
||||
// CHECK: Using dladdr symbolizer.
|
||||
// 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]+}})
|
||||
Loading…
Reference in New Issue