Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.14 42 lines 1.0 kB view raw
1#include <linux/threads.h> 2#include <linux/stddef.h> // for NULL 3#include <linux/elf.h> // for AT_NULL 4 5/* The following function nicked from arch/ppc/kernel/process.c and 6 * adapted slightly */ 7/* 8 * XXX ld.so expects the auxiliary table to start on 9 * a 16-byte boundary, so we have to find it and 10 * move it up. :-( 11 */ 12void shove_aux_table(unsigned long sp) 13{ 14 int argc; 15 char *p; 16 unsigned long e; 17 unsigned long aux_start, offset; 18 19 argc = *(int *)sp; 20 sp += sizeof(int) + (argc + 1) * sizeof(char *); 21 /* skip over the environment pointers */ 22 do { 23 p = *(char **)sp; 24 sp += sizeof(char *); 25 } while (p != NULL); 26 aux_start = sp; 27 /* skip to the end of the auxiliary table */ 28 do { 29 e = *(unsigned long *)sp; 30 sp += 2 * sizeof(unsigned long); 31 } while (e != AT_NULL); 32 offset = ((aux_start + 15) & ~15) - aux_start; 33 if (offset != 0) { 34 do { 35 sp -= sizeof(unsigned long); 36 e = *(unsigned long *)sp; 37 *(unsigned long *)(sp + offset) = e; 38 } while (sp > aux_start); 39 } 40} 41/* END stuff taken from arch/ppc/kernel/process.c */ 42