12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /* Test case by Paul Eggert <eggert@twinsun.com> */
- #include <stdio.h>
- #include <stdlib.h>
- #include <tst-stack-align.h>
- struct big { char c[4 * 1024]; };
- struct big *array;
- struct big *array_end;
- static int align_check;
- int
- compare (void const *a1, void const *b1)
- {
- struct big const *a = a1;
- struct big const *b = b1;
- if (!align_check)
- align_check = TEST_STACK_ALIGN () ? -1 : 1;
- if (! (array <= a && a < array_end
- && array <= b && b < array_end))
- {
- exit (EXIT_FAILURE);
- }
- return b->c[0] - a->c[0];
- }
- int
- main (int argc, char **argv)
- {
- size_t i;
- size_t array_members = argv[1] ? atoi (argv[1]) : 50;
- array = (struct big *) malloc (array_members * sizeof *array);
- if (array == NULL)
- {
- puts ("no memory");
- exit (EXIT_FAILURE);
- }
- array_end = array + array_members;
- for (i = 0; i < array_members; i++)
- array[i].c[0] = i % 128;
- qsort (array, array_members, sizeof *array, compare);
- if (align_check == -1)
- {
- puts ("stack not sufficiently aligned");
- exit (EXIT_FAILURE);
- }
- return 0;
- }
|