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