]>
Commit | Line | Data |
---|---|---|
207b66ce UD |
1 | #include <stdio.h> |
2 | #include <stdlib.h> | |
06f6ca90 | 3 | #include <tst-stack-align.h> |
207b66ce UD |
4 | |
5 | struct big { char c[4 * 1024]; }; | |
6 | ||
7 | struct big *array; | |
8 | struct big *array_end; | |
9 | ||
06f6ca90 UD |
10 | static int align_check; |
11 | ||
207b66ce UD |
12 | int |
13 | compare (void const *a1, void const *b1) | |
14 | { | |
15 | struct big const *a = a1; | |
16 | struct big const *b = b1; | |
06f6ca90 UD |
17 | |
18 | if (!align_check) | |
19 | align_check = TEST_STACK_ALIGN () ? -1 : 1; | |
20 | ||
207b66ce UD |
21 | if (! (array <= a && a < array_end |
22 | && array <= b && b < array_end)) | |
23 | { | |
24 | exit (EXIT_FAILURE); | |
25 | } | |
26 | return b->c[0] - a->c[0]; | |
27 | } | |
28 | ||
29 | int | |
30 | main (int argc, char **argv) | |
31 | { | |
32 | size_t i; | |
33 | size_t array_members = argv[1] ? atoi (argv[1]) : 50; | |
34 | array = (struct big *) malloc (array_members * sizeof *array); | |
35 | if (array == NULL) | |
36 | { | |
37 | puts ("no memory"); | |
38 | exit (EXIT_FAILURE); | |
39 | } | |
40 | ||
41 | array_end = array + array_members; | |
42 | for (i = 0; i < array_members; i++) | |
43 | array[i].c[0] = i % 128; | |
44 | ||
45 | qsort (array, array_members, sizeof *array, compare); | |
46 | ||
06f6ca90 UD |
47 | if (align_check == -1) |
48 | { | |
49 | puts ("stack not sufficiently aligned"); | |
50 | exit (EXIT_FAILURE); | |
51 | } | |
52 | ||
207b66ce UD |
53 | return 0; |
54 | } |