mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	2003-09-17 Philip Blundell <philb@gnu.org> * sysdeps/unix/sysv/linux/arm/vfork.S: Branch to fork if libpthread is loaded. Elide backwards compatibility code when not required.
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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;
 | |
| }
 |