forked from OSchip/llvm-project
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;
|
|
}
|