brintos

brintos / llvm-project-archived public Read only

0
0
Text · 812 B · 8b405ac Raw
37 lines · cpp
1// Test that TLS is unpoisoned on thread death.2// REQUIRES: x86-target-arch && !android3 4// RUN: %clangxx_asan -O0 %s -pthread -o %t && %run %t 2>&15// RUN: %clangxx_asan -O1 %s -pthread -o %t && %run %t 2>&16 7#include <assert.h>8#include <pthread.h>9#include <stdio.h>10 11#include <sanitizer/asan_interface.h>12 13__thread int64_t tls_var[2];14 15volatile int64_t *p_tls_var;16 17void *first(void *arg) {18  ASAN_POISON_MEMORY_REGION(&tls_var, sizeof(tls_var));19  p_tls_var = tls_var;20  return 0;21}22 23void *second(void *arg) {24  assert(tls_var == p_tls_var);25  *p_tls_var = 1;26  return 0;27}28 29int main(int argc, char *argv[]) {30  pthread_t p;31  assert(0 == pthread_create(&p, 0, first, 0));32  assert(0 == pthread_join(p, 0));33  assert(0 == pthread_create(&p, 0, second, 0));34  assert(0 == pthread_join(p, 0));35  return 0;36}37