mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 20:06:51 +00:00

Summary: Darwin support does not appear to be used as evidenced by the fact that the pthread interceptors have never worked and there is no support for other common threading mechanisms like GCD. Reviewers: pcc, eugenis, kubamracek Reviewed By: pcc, kubamracek Subscribers: kubamracek, mgorny, delcypher, llvm-commits, #sanitizers, kcc Differential Revision: https://reviews.llvm.org/D50718 llvm-svn: 339719
41 lines
703 B
C
41 lines
703 B
C
// RUN: %clang_safestack %s -pthread -o %t
|
|
// RUN: %run %t
|
|
|
|
// Test that pthreads receive their own unsafe stack.
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <pthread.h>
|
|
#include "utils.h"
|
|
|
|
static int ptr_test = 42;
|
|
|
|
void *t1_start(void *ptr)
|
|
{
|
|
if (ptr != &ptr_test)
|
|
abort();
|
|
|
|
// safe stack
|
|
int val = ptr_test * 5;
|
|
|
|
// unsafe stack
|
|
char buffer[8096]; // two pages
|
|
memset(buffer, val, sizeof (buffer));
|
|
break_optimization(buffer);
|
|
|
|
return ptr;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
pthread_t t1;
|
|
void *ptr = NULL;
|
|
if (pthread_create(&t1, NULL, t1_start, &ptr_test))
|
|
abort();
|
|
if (pthread_join(t1, &ptr))
|
|
abort();
|
|
if (ptr != &ptr_test)
|
|
abort();
|
|
return 0;
|
|
}
|