diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/um/drivers/line.c | 1 | ||||
| -rw-r--r-- | arch/um/drivers/ssl.c | 1 | ||||
| -rw-r--r-- | arch/um/drivers/stdio_console.c | 1 | ||||
| -rw-r--r-- | arch/um/drivers/ubd_kern.c | 1 | ||||
| -rw-r--r-- | arch/um/drivers/ubd_user.c | 1 | ||||
| -rw-r--r-- | arch/um/include/kern_util.h | 118 | ||||
| -rw-r--r-- | arch/um/include/os.h | 4 | ||||
| -rw-r--r-- | arch/um/kernel/initrd.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/reboot.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/smp.c | 1 | ||||
| -rw-r--r-- | arch/um/kernel/trap.c | 15 | ||||
| -rw-r--r-- | arch/um/kernel/um_arch.c | 6 | ||||
| -rw-r--r-- | arch/um/os-Linux/Makefile | 4 | ||||
| -rw-r--r-- | arch/um/os-Linux/aio.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/drivers/tuntap_user.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/file.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/irq.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/mem.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/signal.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/skas/process.c | 1 | ||||
| -rw-r--r-- | arch/um/os-Linux/skas/trap.c | 18 | ||||
| -rw-r--r-- | arch/um/os-Linux/trap.c | 23 | ||||
| -rw-r--r-- | arch/um/os-Linux/tty.c | 55 | ||||
| -rw-r--r-- | arch/um/os-Linux/tty_log.c | 1 | ||||
| -rw-r--r-- | arch/um/sys-i386/bugs.c | 1 | 
25 files changed, 88 insertions, 172 deletions
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 5cff6536a84..fac058b4928 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -8,6 +8,7 @@  #include "chan_kern.h"  #include "irq_kern.h"  #include "irq_user.h" +#include "kern_util.h"  #include "os.h"  #define LINE_BUFSIZE 4096 diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c index 875d60d0c6a..f1786e64607 100644 --- a/arch/um/drivers/ssl.c +++ b/arch/um/drivers/ssl.c @@ -15,7 +15,6 @@  #include "line.h"  #include "ssl.h"  #include "chan_kern.h" -#include "kern_util.h"  #include "kern.h"  #include "init.h"  #include "irq_user.h" diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c index 656036e90b1..cec0c33cdd3 100644 --- a/arch/um/drivers/stdio_console.c +++ b/arch/um/drivers/stdio_console.c @@ -22,7 +22,6 @@  #include "stdio_console.h"  #include "line.h"  #include "chan_kern.h" -#include "kern_util.h"  #include "irq_user.h"  #include "mconsole_kern.h"  #include "init.h" diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 7a252abbfea..4fe4d6b7307 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c @@ -49,6 +49,7 @@  #include "irq_user.h"  #include "irq_kern.h"  #include "ubd_user.h" +#include "kern_util.h"  #include "os.h"  #include "mem.h"  #include "mem_kern.h" diff --git a/arch/um/drivers/ubd_user.c b/arch/um/drivers/ubd_user.c index 48fc7452bc1..b591bb9c41d 100644 --- a/arch/um/drivers/ubd_user.c +++ b/arch/um/drivers/ubd_user.c @@ -16,7 +16,6 @@  #include <sys/mman.h>  #include <sys/param.h>  #include "asm/types.h" -#include "kern_util.h"  #include "user.h"  #include "ubd_user.h"  #include "os.h" diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index aa27eb0f458..8fadf8962e3 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h @@ -9,107 +9,59 @@  #include "sysdep/ptrace.h"  #include "sysdep/faultinfo.h" -typedef void (*kern_hndl)(int, struct uml_pt_regs *); - -struct kern_handlers { -	kern_hndl relay_signal; -	kern_hndl winch; -	kern_hndl bus_handler; -	kern_hndl page_fault; -	kern_hndl sigio_handler; -	kern_hndl timer_handler; -}; - -extern const struct kern_handlers handlinfo_kern; -  extern int ncpus; -extern char *gdb_init;  extern int kmalloc_ok; -extern int jail;  extern int nsyscalls; -#define UML_ROUND_DOWN(addr) ((void *)(((unsigned long) addr) & PAGE_MASK))  #define UML_ROUND_UP(addr) \ -	UML_ROUND_DOWN(((unsigned long) addr) + PAGE_SIZE - 1) +	((((unsigned long) addr) + PAGE_SIZE - 1) & PAGE_MASK) -extern int kernel_fork(unsigned long flags, int (*fn)(void *), void * arg); -extern int kernel_thread_proc(void *data); -extern void syscall_segv(int sig); -extern int current_pid(void);  extern unsigned long alloc_stack(int order, int atomic); +extern void free_stack(unsigned long stack, int order); +  extern int do_signal(void); -extern int is_stack_fault(unsigned long sp); +extern void copy_sc(struct uml_pt_regs *regs, void *from); +extern void interrupt_end(void); +extern void relay_signal(int sig, struct uml_pt_regs *regs); +  extern unsigned long segv(struct faultinfo fi, unsigned long ip,  			  int is_user, struct uml_pt_regs *regs);  extern int handle_page_fault(unsigned long address, unsigned long ip,  			     int is_write, int is_user, int *code_out); -extern void syscall_ready(void); -extern void set_tracing(void *t, int tracing); -extern int is_tracing(void *task); -extern int segv_syscall(void); -extern void kern_finish_exec(void *task, int new_pid, unsigned long stack); -extern unsigned long page_mask(void); -extern int need_finish_fork(void); -extern void free_stack(unsigned long stack, int order); -extern void add_input_request(int op, void (*proc)(int), void *arg); -extern char *current_cmd(void); -extern void timer_handler(int sig, struct uml_pt_regs *regs); -extern int set_signals(int enable); -extern int pid_to_processor_id(int pid); -extern void deliver_signals(void *t); -extern int next_trap_index(int max); -extern void default_idle(void); -extern void finish_fork(void); -extern void paging_init(void); -extern void init_flush_vm(void); -extern void *syscall_sp(void *t); -extern void syscall_trace(struct uml_pt_regs *regs, int entryexit); +  extern unsigned int do_IRQ(int irq, struct uml_pt_regs *regs); -extern void interrupt_end(void); -extern void initial_thread_cb(void (*proc)(void *), void *arg); -extern int debugger_signal(int status, int pid); -extern void debugger_parent_signal(int status, int pid); -extern void child_signal(int pid, int status); -extern int init_ptrace_proxy(int idle_pid, int startup, int stop); -extern int init_parent_proxy(int pid); -extern int singlestepping(void *t); -extern void check_stack_overflow(void *ptr); -extern void relay_signal(int sig, struct uml_pt_regs *regs); -extern int user_context(unsigned long sp); -extern void timer_irq(struct uml_pt_regs *regs); -extern void do_uml_exitcalls(void); -extern int attach_debugger(int idle_pid, int pid, int stop); -extern int config_gdb(char *str); -extern int remove_gdb(void); -extern char *uml_strdup(const char *string); -extern void unprotect_kernel_mem(void); -extern void protect_kernel_mem(void); -extern void uml_cleanup(void); -extern void lock_signalled_task(void *t); -extern void IPI_handler(int cpu); -extern int jail_setup(char *line, int *add); -extern void *get_init_task(void); -extern int clear_user_proc(void *buf, int size); -extern int copy_to_user_proc(void *to, void *from, int size); -extern int copy_from_user_proc(void *to, void *from, int size); -extern int strlen_user_proc(char *str); -extern long execute_syscall(void *r);  extern int smp_sigio_handler(void); -extern void *get_current(void); -extern struct task_struct *get_task(int pid, int require); -extern void machine_halt(void); +extern void initial_thread_cb(void (*proc)(void *), void *arg);  extern int is_syscall(unsigned long addr); +extern void timer_handler(int sig, struct uml_pt_regs *regs); -extern void free_irq(unsigned int, void *); -extern int cpu(void); +extern void timer_handler(int sig, struct uml_pt_regs *regs); + +extern int start_uml(void); +extern void paging_init(void); -extern void time_init_kern(void); +extern void uml_cleanup(void); +extern void do_uml_exitcalls(void); -/* Are we disallowed to sleep? Used to choose between GFP_KERNEL and GFP_ATOMIC. */ +/* + * Are we disallowed to sleep? Used to choose between GFP_KERNEL and + * GFP_ATOMIC. + */  extern int __cant_sleep(void); -extern void sigio_handler(int sig, struct uml_pt_regs *regs); -extern void copy_sc(struct uml_pt_regs *regs, void *from); +extern void *get_current(void); +extern int copy_from_user_proc(void *to, void *from, int size); +extern int cpu(void); +extern char *uml_strdup(const char *string); +  extern unsigned long to_irq_stack(unsigned long *mask_out); -unsigned long from_irq_stack(int nested); -extern int start_uml(void); +extern unsigned long from_irq_stack(int nested); + +extern void syscall_trace(struct uml_pt_regs *regs, int entryexit); +extern int singlestepping(void *t); + +extern void segv_handler(int sig, struct uml_pt_regs *regs); +extern void bus_handler(int sig, struct uml_pt_regs *regs); +extern void winch(int sig, struct uml_pt_regs *regs); + +  #endif diff --git a/arch/um/include/os.h b/arch/um/include/os.h index 82e5aeae2b8..55ca073589d 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h @@ -8,7 +8,6 @@  #include <stdarg.h>  #include "irq_user.h" -#include "kern_util.h"  #include "longjmp.h"  #include "mm_id.h"  #include "sysdep/tls.h" @@ -237,9 +236,6 @@ extern void unblock_signals(void);  extern int get_signals(void);  extern int set_signals(int enable); -/* trap.c */ -extern void os_fill_handlinfo(struct kern_handlers h); -  /* util.c */  extern void stack_protections(unsigned long address);  extern int raw(int fd); diff --git a/arch/um/kernel/initrd.c b/arch/um/kernel/initrd.c index 16dc43e9d94..ae31c62f032 100644 --- a/arch/um/kernel/initrd.c +++ b/arch/um/kernel/initrd.c @@ -7,7 +7,6 @@  #include "linux/bootmem.h"  #include "linux/initrd.h"  #include "asm/types.h" -#include "kern_util.h"  #include "initrd.h"  #include "init.h"  #include "os.h" diff --git a/arch/um/kernel/reboot.c b/arch/um/kernel/reboot.c index 04cebcf0679..1ce49cd8aca 100644 --- a/arch/um/kernel/reboot.c +++ b/arch/um/kernel/reboot.c @@ -4,6 +4,7 @@   */  #include "linux/sched.h" +#include "kern_util.h"  #include "os.h"  #include "skas.h" diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c index 36d89cf8d20..a12e5bd1579 100644 --- a/arch/um/kernel/smp.c +++ b/arch/um/kernel/smp.c @@ -21,7 +21,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);  #include "asm/smp.h"  #include "asm/processor.h"  #include "asm/spinlock.h" -#include "kern_util.h"  #include "kern.h"  #include "irq_user.h"  #include "os.h" diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index e3a3ab8f863..ff405a446d1 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c @@ -128,7 +128,7 @@ static void bad_segv(struct faultinfo fi, unsigned long ip)  	force_sig_info(SIGSEGV, &si, current);  } -static void segv_handler(int sig, struct uml_pt_regs *regs) +void segv_handler(int sig, struct uml_pt_regs *regs)  {  	struct faultinfo * fi = UPT_FAULTINFO(regs); @@ -229,27 +229,18 @@ void relay_signal(int sig, struct uml_pt_regs *regs)  	force_sig(sig, current);  } -static void bus_handler(int sig, struct uml_pt_regs *regs) +void bus_handler(int sig, struct uml_pt_regs *regs)  {  	if (current->thread.fault_catcher != NULL)  		UML_LONGJMP(current->thread.fault_catcher, 1);  	else relay_signal(sig, regs);  } -static void winch(int sig, struct uml_pt_regs *regs) +void winch(int sig, struct uml_pt_regs *regs)  {  	do_IRQ(WINCH_IRQ, regs);  } -const struct kern_handlers handlinfo_kern = { -	.relay_signal = relay_signal, -	.winch = winch, -	.bus_handler = bus_handler, -	.page_fault = segv_handler, -	.sigio_handler = sigio_handler, -	.timer_handler = timer_handler -}; -  void trap_init(void)  {  } diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index f1c71393f57..9b5d2cdb621 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c @@ -16,6 +16,7 @@  #include "as-layout.h"  #include "init.h"  #include "kern.h" +#include "kern_util.h"  #include "mem_user.h"  #include "os.h"  #include "skas.h" @@ -280,11 +281,6 @@ int __init linux_main(int argc, char **argv)  	host_task_size = set_task_sizes_skas(&task_size); -	/* -	 * Setting up handlers to 'sig_info' struct -	 */ -	os_fill_handlinfo(handlinfo_kern); -  	brk_start = (unsigned long) sbrk(0);  	/* diff --git a/arch/um/os-Linux/Makefile b/arch/um/os-Linux/Makefile index 8e129af8170..8a48d6a3006 100644 --- a/arch/um/os-Linux/Makefile +++ b/arch/um/os-Linux/Makefile @@ -4,7 +4,7 @@  #  obj-y = aio.o elf_aux.o execvp.o file.o helper.o irq.o main.o mem.o process.o \ -	registers.o sigio.o signal.o start_up.o time.o trap.o tty.o uaccess.o \ +	registers.o sigio.o signal.o start_up.o time.o tty.o uaccess.o \  	umid.o tls.o user_syms.o util.o drivers/ sys-$(SUBARCH)/ skas/  obj-$(CONFIG_TTY_LOG) += tty_log.o @@ -12,7 +12,7 @@ user-objs-$(CONFIG_TTY_LOG) += tty_log.o  USER_OBJS := $(user-objs-y) aio.o elf_aux.o execvp.o file.o helper.o irq.o \  	main.o mem.o process.o registers.o sigio.o signal.o start_up.o time.o \ -	trap.o tty.o tls.o uaccess.o umid.o util.o +	tty.o tls.o uaccess.o umid.o util.o  CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH) diff --git a/arch/um/os-Linux/aio.c b/arch/um/os-Linux/aio.c index 93dc0c80eba..b8d8c9ca8d4 100644 --- a/arch/um/os-Linux/aio.c +++ b/arch/um/os-Linux/aio.c @@ -12,6 +12,7 @@  #include "aio.h"  #include "init.h"  #include "kern_constants.h" +#include "kern_util.h"  #include "os.h"  #include "user.h" diff --git a/arch/um/os-Linux/drivers/tuntap_user.c b/arch/um/os-Linux/drivers/tuntap_user.c index 1d847959d1d..7739e29cf34 100644 --- a/arch/um/os-Linux/drivers/tuntap_user.c +++ b/arch/um/os-Linux/drivers/tuntap_user.c @@ -14,6 +14,7 @@  #include <sys/wait.h>  #include <sys/uio.h>  #include "kern_constants.h" +#include "kern_util.h"  #include "os.h"  #include "tuntap.h"  #include "user.h" diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c index c3bb5ce70c9..9387cb11c0a 100644 --- a/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c @@ -17,7 +17,6 @@  #include <sys/uio.h>  #include "os.h"  #include "user.h" -#include "kern_util.h"  static void copy_stat(struct uml_stat *dst, const struct stat64 *src)  { diff --git a/arch/um/os-Linux/irq.c b/arch/um/os-Linux/irq.c index 6aa6f95d652..a26e0662aa1 100644 --- a/arch/um/os-Linux/irq.c +++ b/arch/um/os-Linux/irq.c @@ -11,7 +11,6 @@  #include <sys/poll.h>  #include <sys/types.h>  #include <sys/time.h> -#include "kern_util.h"  #include "user.h"  #include "process.h"  #include "sigio.h" diff --git a/arch/um/os-Linux/mem.c b/arch/um/os-Linux/mem.c index 9674ed1bef2..eedc2d88ef8 100644 --- a/arch/um/os-Linux/mem.c +++ b/arch/um/os-Linux/mem.c @@ -9,7 +9,6 @@  #include <sys/types.h>  #include <sys/mman.h>  #include <sys/statfs.h> -#include "kern_util.h"  #include "user.h"  #include "mem_user.h"  #include "init.h" diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c index 37302e86fda..7ff8f57b715 100644 --- a/arch/um/os-Linux/signal.c +++ b/arch/um/os-Linux/signal.c @@ -9,6 +9,7 @@  #include <errno.h>  #include <signal.h>  #include <strings.h> +#include "kern_util.h"  #include "os.h"  #include "sysdep/barrier.h"  #include "sysdep/sigcontext.h" diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index e8b7a97e83d..765cfa6ddbc 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c @@ -15,6 +15,7 @@  #include "as-layout.h"  #include "chan_user.h"  #include "kern_constants.h" +#include "kern_util.h"  #include "mem.h"  #include "os.h"  #include "process.h" diff --git a/arch/um/os-Linux/skas/trap.c b/arch/um/os-Linux/skas/trap.c index 3b1b9244f46..a19a74f08fa 100644 --- a/arch/um/os-Linux/skas/trap.c +++ b/arch/um/os-Linux/skas/trap.c @@ -3,22 +3,26 @@   * Licensed under the GPL   */ -#if 0 -#include "kern_util.h" -#include "skas.h" -#include "ptrace_user.h" -#include "sysdep/ptrace_user.h" -#endif -  #include <errno.h>  #include <signal.h>  #include "sysdep/ptrace.h"  #include "kern_constants.h"  #include "as-layout.h" +#include "kern_util.h"  #include "os.h"  #include "sigcontext.h"  #include "task.h" +void (*sig_info[NSIG])(int, struct uml_pt_regs *) = { +	[SIGTRAP]	= relay_signal, +	[SIGFPE]	= relay_signal, +	[SIGILL]	= relay_signal, +	[SIGWINCH]	= winch, +	[SIGBUS]	= bus_handler, +	[SIGSEGV]	= segv_handler, +	[SIGIO]		= sigio_handler, +	[SIGVTALRM]	= timer_handler }; +  static struct uml_pt_regs ksig_regs[UM_NR_CPUS];  void sig_handler_common_skas(int sig, void *sc_ptr) diff --git a/arch/um/os-Linux/trap.c b/arch/um/os-Linux/trap.c deleted file mode 100644 index 2a1c9843e32..00000000000 --- a/arch/um/os-Linux/trap.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#include <signal.h> -#include "os.h" -#include "sysdep/ptrace.h" - -/* Initialized from linux_main() */ -void (*sig_info[NSIG])(int, struct uml_pt_regs *); - -void os_fill_handlinfo(struct kern_handlers h) -{ -	sig_info[SIGTRAP] = h.relay_signal; -	sig_info[SIGFPE] = h.relay_signal; -	sig_info[SIGILL] = h.relay_signal; -	sig_info[SIGWINCH] = h.winch; -	sig_info[SIGBUS] = h.bus_handler; -	sig_info[SIGSEGV] = h.page_fault; -	sig_info[SIGIO] = h.sigio_handler; -	sig_info[SIGVTALRM] = h.timer_handler; -} diff --git a/arch/um/os-Linux/tty.c b/arch/um/os-Linux/tty.c index 4cfdd18ea1e..b09ff66a77e 100644 --- a/arch/um/os-Linux/tty.c +++ b/arch/um/os-Linux/tty.c @@ -1,13 +1,16 @@ -/*  - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) +/* + * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)   * Licensed under the GPL   */  #include <stdlib.h> +#include <unistd.h>  #include <errno.h> +#include <fcntl.h> +#include "kern_constants.h" +#include "kern_util.h"  #include "os.h"  #include "user.h" -#include "kern_util.h"  struct grantpt_info {  	int fd; @@ -26,36 +29,34 @@ static void grantpt_cb(void *arg)  int get_pty(void)  {  	struct grantpt_info info; -	int fd; +	int fd, err; -	fd = os_open_file("/dev/ptmx", of_rdwr(OPENFLAGS()), 0); -	if(fd < 0){ -		printk("get_pty : Couldn't open /dev/ptmx - err = %d\n", -fd); -		return(fd); +	fd = open("/dev/ptmx", O_RDWR); +	if (fd < 0) { +		err = -errno; +		printk(UM_KERN_ERR "get_pty : Couldn't open /dev/ptmx - " +		       "err = %d\n", errno); +		return err;  	}  	info.fd = fd;  	initial_thread_cb(grantpt_cb, &info); -	if(info.res < 0){ -		printk("get_pty : Couldn't grant pty - errno = %d\n",  -		       -info.err); -		return(-1); +	if (info.res < 0) { +		err = -info.err; +		printk(UM_KERN_ERR "get_pty : Couldn't grant pty - " +		       "errno = %d\n", -info.err); +		goto out;  	} -	if(unlockpt(fd) < 0){ -		printk("get_pty : Couldn't unlock pty - errno = %d\n", errno); -		return(-1); + +	if (unlockpt(fd) < 0) { +		err = -errno; +		printk(UM_KERN_ERR "get_pty : Couldn't unlock pty - " +		       "errno = %d\n", errno); +		goto out;  	} -	return(fd); +	return fd; +out: +	close(fd); +	return err;  } - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only.  This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-file-style: "linux" - * End: - */ diff --git a/arch/um/os-Linux/tty_log.c b/arch/um/os-Linux/tty_log.c index d11a55baa6b..cc648e6fd3a 100644 --- a/arch/um/os-Linux/tty_log.c +++ b/arch/um/os-Linux/tty_log.c @@ -12,7 +12,6 @@  #include <sys/time.h>  #include "init.h"  #include "user.h" -#include "kern_util.h"  #include "os.h"  #define TTY_LOG_DIR "./" diff --git a/arch/um/sys-i386/bugs.c b/arch/um/sys-i386/bugs.c index b0cb05228a9..a74442d1376 100644 --- a/arch/um/sys-i386/bugs.c +++ b/arch/um/sys-i386/bugs.c @@ -5,6 +5,7 @@  #include <signal.h>  #include "kern_constants.h" +#include "kern_util.h"  #include "longjmp.h"  #include "task.h"  #include "user.h"  |