1 #include <linux/threads.h>
2 #include <linux/stddef.h> // for NULL
3 #include <linux/elf.h> // for AT_NULL
5 /* The following function nicked from arch/ppc/kernel/process.c and
8 * XXX ld.so expects the auxiliary table to start on
9 * a 16-byte boundary, so we have to find it and
12 void shove_aux_table(unsigned long sp
)
17 unsigned long aux_start
, offset
;
20 sp
+= sizeof(int) + (argc
+ 1) * sizeof(char *);
21 /* skip over the environment pointers */
27 /* skip to the end of the auxiliary table */
29 e
= *(unsigned long *)sp
;
30 sp
+= 2 * sizeof(unsigned long);
31 } while (e
!= AT_NULL
);
32 offset
= ((aux_start
+ 15) & ~15) - aux_start
;
35 sp
-= sizeof(unsigned long);
36 e
= *(unsigned long *)sp
;
37 *(unsigned long *)(sp
+ offset
) = e
;
38 } while (sp
> aux_start
);
41 /* END stuff taken from arch/ppc/kernel/process.c */