Files
clang-p2996/compiler-rt/test/tsan/java_symbolization_legacy.cpp
Dmitry Vyukov 24af1ba605 tsan: don't instrument runtime callbacks in tests
These runtime callbacks are supposed to be non-instrumented,
we can't handle runtime recursion well, nor can we afford
explicit recursion checks in the hot functions (memory access,
function entry/exit).
It used to work (not crash), but it won't work with the new runtime.
Mark all runtime callbacks as non-instrumented.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D111157
2021-10-06 08:44:04 +02:00

44 lines
1.2 KiB
C++

// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
#include "java.h"
#include <memory.h>
extern "C" __attribute__((disable_sanitizer_instrumentation)) bool
__tsan_symbolize_external(jptr pc, char *func_buf, jptr func_siz,
char *file_buf, jptr file_siz, int *line, int *col) {
if (pc == (1234 | kExternalPCBit)) {
memcpy(func_buf, "MyFunc", sizeof("MyFunc"));
memcpy(file_buf, "MyFile.java", sizeof("MyFile.java"));
*line = 1234;
*col = 56;
return true;
}
return false;
}
void *Thread(void *p) {
barrier_wait(&barrier);
__tsan_write1_pc((jptr)p, 1234 | kExternalPCBit);
return 0;
}
int main() {
barrier_init(&barrier, 2);
int const kHeapSize = 1024 * 1024;
jptr jheap = (jptr)malloc(kHeapSize + 8) + 8;
__tsan_java_init(jheap, kHeapSize);
const int kBlockSize = 16;
__tsan_java_alloc(jheap, kBlockSize);
pthread_t th;
pthread_create(&th, 0, Thread, (void*)jheap);
__tsan_write1_pc((jptr)jheap, 1234 | kExternalPCBit);
barrier_wait(&barrier);
pthread_join(th, 0);
__tsan_java_free(jheap, kBlockSize);
fprintf(stderr, "DONE\n");
return __tsan_java_fini();
}
// CHECK: WARNING: ThreadSanitizer: data race
// CHECK: #0 MyFunc MyFile.java:1234:56
// CHECK: DONE