6 static __thread
char d1
= 11;
7 static __thread
char d64
__attribute__ ((aligned(64))) = 22;
8 static __thread
char d4096
__attribute__ ((aligned(4096))) = 33;
9 static __thread
char z1
= 0;
10 static __thread
char z64
__attribute__ ((aligned(64))) = 0;
11 static __thread
char z4096
__attribute__ ((aligned(4096))) = 0;
12 static __thread
const char *s1
= "s1";
16 #define CHECK(c, fmt, ...) do{ \
18 t_error("[thread %d]: "#c" failed"fmt".\n", tnum, __VA_ARGS__); \
21 static unsigned ptrmod(void *p
, unsigned m
)
23 volatile unsigned n
= (uintptr_t)p
;
27 static void *check(void *arg
)
31 CHECK(d1
== 11, " want 11 got %d", d1
);
32 CHECK(d64
== 22, " want 22 got %d", d64
);
33 CHECK(d4096
== 33, " want 33 got %d", d4096
);
35 CHECK(ptrmod(&d64
, 64) == 0, " address is %p, want 64 byte alignment", &d64
);
36 CHECK(ptrmod(&d4096
, 4096) == 0, " address is %p, want 4096 byte alignment", &d4096
);
38 CHECK(z1
== 0, " want 0 got %d", z1
);
39 CHECK(z64
== 0, " want 0 got %d", z64
);
40 CHECK(z4096
== 0, " want 0 got %d", z4096
);
42 CHECK(ptrmod(&z64
, 64) == 0, " address is %p, want 64 byte alignment", &z64
);
43 CHECK(ptrmod(&z4096
, 4096) == 0, " address is %p, want 4096 byte alignment", &z4096
);
45 CHECK(!strcmp(s1
, "s1"), " want s1 got %s", s1
);
54 CHECK(pthread_create(&td
, 0, check
, 0) == 0, "", "");
55 CHECK(pthread_join(td
, 0) == 0, "", "");