/* Check that the syscall set_thread_area is supported and does the right thing. #progos: linux */ #include #include #include #include #include #ifndef SYS_set_thread_area #define SYS_set_thread_area 243 #endif int main (void) { int ret; /* Check the error check that the low 8 bits must be 0. */ ret = syscall (SYS_set_thread_area, 0xfeeb1ff0); if (ret != -1 || errno != EINVAL) { perror ("tls1"); abort (); } ret = syscall (SYS_set_thread_area, 0xcafebe00); if (ret != 0) { perror ("tls2"); abort (); } /* Check that we got the right result. */ #ifdef __arch_v32 asm ("move $pid,%0\n\tclear.b %0" : "=rm" (ret)); #else asm ("move $brp,%0" : "=rm" (ret)); #endif if (ret != 0xcafebe00) { perror ("tls2"); abort (); } printf ("pass\n"); exit (0); }