Blame view
arch/um/os-Linux/elf_aux.c
1.93 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * arch/um/kernel/elf_aux.c * * Scan the Elf auxiliary vector provided by the host to extract * information about vsyscall-page, etc. * * Copyright (C) 2004 Fujitsu Siemens Computers GmbH * Author: Bodo Stroesser (bodo.stroesser@fujitsu-siemens.com) */ #include <elf.h> #include <stddef.h> #include "init.h" #include "elf_user.h" |
a502a3593 [PATCH] uml: fix ... |
14 |
#include "mem_user.h" |
1da177e4c Linux-2.6.12-rc2 |
15 |
|
1da177e4c Linux-2.6.12-rc2 |
16 |
typedef Elf32_auxv_t elf_auxv_t; |
1da177e4c Linux-2.6.12-rc2 |
17 |
|
c538b391a [PATCH] uml: ELF ... |
18 |
/* These are initialized very early in boot and never changed */ |
1da177e4c Linux-2.6.12-rc2 |
19 |
char * elf_aux_platform; |
b743ac54e um: disable scan_... |
20 |
extern long elf_aux_hwcap; |
1da177e4c Linux-2.6.12-rc2 |
21 22 |
unsigned long vsyscall_ehdr; unsigned long vsyscall_end; |
1da177e4c Linux-2.6.12-rc2 |
23 24 25 26 27 28 29 30 31 32 33 34 35 |
unsigned long __kernel_vsyscall; __init void scan_elf_aux( char **envp) { long page_size = 0; elf_auxv_t * auxv; while ( *envp++ != NULL) ; for ( auxv = (elf_auxv_t *)envp; auxv->a_type != AT_NULL; auxv++) { switch ( auxv->a_type ) { case AT_SYSINFO: __kernel_vsyscall = auxv->a_un.a_val; |
14251809b [PATCH] uml: host... |
36 37 38 |
/* See if the page is under TASK_SIZE */ if (__kernel_vsyscall < (unsigned long) envp) __kernel_vsyscall = 0; |
1da177e4c Linux-2.6.12-rc2 |
39 40 41 |
break; case AT_SYSINFO_EHDR: vsyscall_ehdr = auxv->a_un.a_val; |
a502a3593 [PATCH] uml: fix ... |
42 43 44 |
/* See if the page is under TASK_SIZE */ if (vsyscall_ehdr < (unsigned long) envp) vsyscall_ehdr = 0; |
1da177e4c Linux-2.6.12-rc2 |
45 46 47 48 49 |
break; case AT_HWCAP: elf_aux_hwcap = auxv->a_un.a_val; break; case AT_PLATFORM: |
da00d9a54 [PATCH] uml: comp... |
50 51 52 53 |
/* elf.h removed the pointer elements from * a_un, so we have to use a_val, which is * all that's left. */ |
64b7673f9 [PATCH] uml: Remo... |
54 55 |
elf_aux_platform = (char *) (long) auxv->a_un.a_val; |
1da177e4c Linux-2.6.12-rc2 |
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
break; case AT_PAGESZ: page_size = auxv->a_un.a_val; break; } } if ( ! __kernel_vsyscall || ! vsyscall_ehdr || ! elf_aux_hwcap || ! elf_aux_platform || ! page_size || (vsyscall_ehdr % page_size) ) { __kernel_vsyscall = 0; vsyscall_ehdr = 0; elf_aux_hwcap = 0; elf_aux_platform = "i586"; } else { vsyscall_end = vsyscall_ehdr + page_size; } } |