Statistics
| Branch: | Revision:

root / tests / tcg / cris / check_settls1.c @ c09015dd

History | View | Annotate | Download (930 Bytes)

1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <errno.h>
4
#include <unistd.h>
5

    
6
#include <sys/syscall.h>
7

    
8
#ifndef SYS_set_thread_area
9
#define SYS_set_thread_area 243
10
#endif
11

    
12
int main (void)
13
{
14
    unsigned long tp, old_tp;
15
    int ret;
16

    
17
    asm volatile ("move $pid,%0" : "=r" (old_tp));
18
    old_tp &= ~0xff;
19

    
20
    ret = syscall (SYS_set_thread_area, 0xf0);
21
    if (ret != -1 || errno != EINVAL) {
22
        syscall (SYS_set_thread_area, old_tp);
23
        perror ("Invalid thread area accepted:");
24
        abort();
25
    }
26

    
27
    ret = syscall (SYS_set_thread_area, 0xeddeed00);
28
    if (ret != 0) {
29
        perror ("Valid thread area not accepted: ");
30
        abort ();
31
    }
32

    
33
    asm volatile ("move $pid,%0" : "=r" (tp));
34
    tp &= ~0xff;
35
    syscall (SYS_set_thread_area, old_tp);
36

    
37
    if (tp != 0xeddeed00) {
38
        * (volatile int *) 0 = 0;
39
        perror ("tls2");
40
        abort ();
41
    }
42

    
43
    printf ("pass\n");
44
    return EXIT_SUCCESS;
45
}