root / tests / tcg / cris / check_settls1.c @ c09015dd
History | View | Annotate | Download (930 Bytes)
1 | ef96779b | edgar_igl | #include <stdio.h> |
---|---|---|---|
2 | ef96779b | edgar_igl | #include <stdlib.h> |
3 | ef96779b | edgar_igl | #include <errno.h> |
4 | ef96779b | edgar_igl | #include <unistd.h> |
5 | ef96779b | edgar_igl | |
6 | ef96779b | edgar_igl | #include <sys/syscall.h> |
7 | ef96779b | edgar_igl | |
8 | ef96779b | edgar_igl | #ifndef SYS_set_thread_area
|
9 | ef96779b | edgar_igl | #define SYS_set_thread_area 243 |
10 | ef96779b | edgar_igl | #endif
|
11 | ef96779b | edgar_igl | |
12 | ef96779b | edgar_igl | int main (void) |
13 | ef96779b | edgar_igl | { |
14 | 58f5c1eb | Edgar E. Iglesias | unsigned long tp, old_tp; |
15 | ef96779b | edgar_igl | int ret;
|
16 | ef96779b | edgar_igl | |
17 | 58f5c1eb | Edgar E. Iglesias | asm volatile ("move $pid,%0" : "=r" (old_tp)); |
18 | 58f5c1eb | Edgar E. Iglesias | old_tp &= ~0xff;
|
19 | 58f5c1eb | Edgar E. Iglesias | |
20 | ef96779b | edgar_igl | ret = syscall (SYS_set_thread_area, 0xf0);
|
21 | ef96779b | edgar_igl | if (ret != -1 || errno != EINVAL) { |
22 | 58f5c1eb | Edgar E. Iglesias | syscall (SYS_set_thread_area, old_tp); |
23 | ef96779b | edgar_igl | perror ("Invalid thread area accepted:");
|
24 | ef96779b | edgar_igl | abort(); |
25 | ef96779b | edgar_igl | } |
26 | ef96779b | edgar_igl | |
27 | ef96779b | edgar_igl | ret = syscall (SYS_set_thread_area, 0xeddeed00);
|
28 | ef96779b | edgar_igl | if (ret != 0) { |
29 | ef96779b | edgar_igl | perror ("Valid thread area not accepted: ");
|
30 | ef96779b | edgar_igl | abort (); |
31 | ef96779b | edgar_igl | } |
32 | ef96779b | edgar_igl | |
33 | 58f5c1eb | Edgar E. Iglesias | asm volatile ("move $pid,%0" : "=r" (tp)); |
34 | ef96779b | edgar_igl | tp &= ~0xff;
|
35 | 58f5c1eb | Edgar E. Iglesias | syscall (SYS_set_thread_area, old_tp); |
36 | ef96779b | edgar_igl | |
37 | ef96779b | edgar_igl | if (tp != 0xeddeed00) { |
38 | 58f5c1eb | Edgar E. Iglesias | * (volatile int *) 0 = 0; |
39 | ef96779b | edgar_igl | perror ("tls2");
|
40 | ef96779b | edgar_igl | abort (); |
41 | ef96779b | edgar_igl | } |
42 | ef96779b | edgar_igl | |
43 | ef96779b | edgar_igl | printf ("pass\n");
|
44 | ef96779b | edgar_igl | return EXIT_SUCCESS;
|
45 | ef96779b | edgar_igl | } |