1 /* 2 * Copyright (C) 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL 4 */ 5 6 #ifndef __START_H__ 7 #define __START_H__ 8 9 #include "kern_constants.h" 10 11 /* 12 * Stolen from linux/const.h, which can't be directly included since 13 * this is used in userspace code, which has no access to the kernel 14 * headers. Changed to be suitable for adding casts to the start, 15 * rather than "UL" to the end. 16 */ 17 18 /* Some constant macros are used in both assembler and 19 * C code. Therefore we cannot annotate them always with 20 * 'UL' and other type specifiers unilaterally. We 21 * use the following macros to deal with this. 22 */ 23 24 #ifdef __ASSEMBLY__ 25 #define _UML_AC(X, Y) (Y) 26 #else 27 #define __UML_AC(X, Y) (X(Y)) 28 #define _UML_AC(X, Y) __UML_AC(X, Y) 29 #endif 30 31 #define STUB_START _UML_AC(, 0x100000) 32 #define STUB_CODE _UML_AC((unsigned long), STUB_START) 33 #define STUB_DATA _UML_AC((unsigned long), STUB_CODE + UM_KERN_PAGE_SIZE) 34 #define STUB_END _UML_AC((unsigned long), STUB_DATA + UM_KERN_PAGE_SIZE) 35 36 #ifndef __ASSEMBLY__ 37 38 #include "sysdep/ptrace.h" 39 40 struct cpu_task { 41 int pid; 42 void *task; 43 }; 44 45 extern struct cpu_task cpu_tasks[]; 46 47 extern unsigned long low_physmem; 48 extern unsigned long high_physmem; 49 extern unsigned long uml_physmem; 50 extern unsigned long uml_reserved; 51 extern unsigned long end_vm; 52 extern unsigned long start_vm; 53 extern unsigned long long highmem; 54 55 extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end; 56 extern unsigned long _unprotected_end; 57 extern unsigned long brk_start; 58 59 extern unsigned long host_task_size; 60 61 extern int linux_main(int argc, char **argv); 62 63 extern void (*sig_info[])(int, struct uml_pt_regs *); 64 65 #endif 66 67 #endif 68