banan-os/userspace/tests/test-tls/main.cpp

58 lines
1.6 KiB
C++

#include <stdio.h>
#include <pthread.h>
extern void test_tls_exec_lib1();
extern void test_tls_exec_lib2();
extern void test_tls_lib_lib1();
extern void test_tls_lib_lib2();
extern thread_local int tls_in_library1;
extern thread_local int tls_in_library2;
thread_local int tls_in_executable1 = 1;
thread_local int tls_in_executable2 = 1;
void run_test()
{
printf("running on thread %d (expected 1, 2, 2, 3)\n", pthread_self());
printf(" exec in exec: %d (%p)\n", tls_in_executable1, &tls_in_executable1);
tls_in_executable1 = 2;
printf(" exec in exec: %d (%p)\n", tls_in_executable1, &tls_in_executable1);
test_tls_exec_lib1();
printf("running on thread %d (expected 1, 2, 2, 3)\n", pthread_self());
printf(" exec in exec: %d (%p)\n", tls_in_executable2, &tls_in_executable2);
tls_in_executable2 = 2;
printf(" exec in exec: %d (%p)\n", tls_in_executable2, &tls_in_executable2);
test_tls_exec_lib2();
printf("running on thread %d (expected 1, 2, 2, 3)\n", pthread_self());
printf(" lib in exec: %d (%p)\n", tls_in_library1, &tls_in_library1);
tls_in_library1 = 2;
printf(" lib in exec: %d (%p)\n", tls_in_library1, &tls_in_library1);
test_tls_lib_lib1();
printf("running on thread %d (expected 1, 2, 2, 3)\n", pthread_self());
printf(" lib in exec: %d (%p)\n", tls_in_library2, &tls_in_library2);
tls_in_library2 = 2;
printf(" lib in exec: %d (%p)\n", tls_in_library2, &tls_in_library2);
test_tls_lib_lib2();
}
int main(int argc, char** argv)
{
run_test();
#if 0
pthread_t tid;
pthread_create(&tid, nullptr,
[](void*) -> void* {
run_test();
return nullptr;
}, nullptr
);
pthread_join(tid, nullptr);
#endif
}