| #ifndef __KERN_UTIL_H__ |
| #define __KERN_UTIL_H__ |
| |
| #define x(s) #s |
| #define xx(s) x(s) |
| |
| #ifndef _UNISTD_H |
| extern int write(int, const char *, int); |
| #endif |
| |
| #define KERN_UNTESTED() \ |
| do { char buf[100]; \ |
| static int stop_here = 1; \ |
| if(stop_here){ \ |
| sprintf(buf, "Untested (%d) [0x%p]: " __FILE__ " line " xx(__LINE__) \ |
| "\n", linux_getpid(), &stop_here); \ |
| write(1, buf, strlen(buf)); \ |
| stop(); \ |
| } \ |
| } while(0) |
| |
| extern int ncpus; |
| |
| extern int kernel_fork(unsigned long flags, int (*fn)(void *), void * arg); |
| extern unsigned long stack_sp(unsigned long page); |
| extern int kernel_thread_proc(void *data); |
| extern long execute_syscall(int syscall, unsigned long *args); |
| extern void syscall_segv(int sig); |
| extern int current_pid(void *t); |
| extern void do_bh(void); |
| extern void set_extern_pid(int task_pid, int pid); |
| extern unsigned long alloc_stack(void); |
| extern int do_signal(void *t, sigset_t *oldset, unsigned long *error, |
| int *again_out); |
| extern int current_external_pid(void); |
| extern void store_syscall(void *t, int syscall, unsigned long arg1, |
| unsigned long arg2, unsigned long arg3, |
| unsigned long arg4, unsigned long arg5, |
| unsigned long arg6); |
| extern int current_syscall(void *t, unsigned long *args_out); |
| extern int is_stack_fault(unsigned long sp); |
| extern void segv(unsigned long address, int is_write); |
| extern int set_user_thread(void *task, int on); |
| extern void syscall_ready(void); |
| extern void set_syscall_result(void *t, int result, int again); |
| extern void set_tracing(void *t, int tracing); |
| extern int is_tracing(void *task); |
| extern int get_want_tracing(void *task); |
| extern int segv_syscall(void); |
| extern void ret_from_sys_call(void *t); |
| extern void add_perm_vma(unsigned long start, unsigned long end, char rperm, |
| char wperm, char xperm, char private, |
| unsigned long offset); |
| extern void kern_finish_exec(void *task, unsigned long ip, unsigned long sp, |
| int pid); |
| extern int page_size(void); |
| extern int need_finish_fork(void); |
| extern int do_proc_op(void *t, int proc_id); |
| extern void free_stack(unsigned long stack); |
| extern void add_input_request(int op, void (*proc)(int), void *arg); |
| extern char *current_comm(void); |
| extern int sys_execve(char *file, char **argv, char **env); |
| extern void *current_sigstack(void *t); |
| extern void set_forced_fault(void *task, unsigned long addr); |
| extern unsigned long forced_fault(void); |
| extern char *current_cmd(void); |
| extern void timer_handler(int signal); |
| extern int sigs_blocked(void *task); |
| extern int set_signals(void *t, int on); |
| extern void force_sigbus(void); |
| extern int pid_to_processor_id(int pid); |
| extern void block_signals(void *t); |
| extern void unblock_signals(void *t); |
| extern int deliver_signals(void *t, int altstack); |
| extern void input_handler(unsigned long ignore); |
| extern void input_notify(int index); |
| extern void lock_syscall(void); |
| extern void unlock_syscall(void); |
| extern void lock_trap(void); |
| extern void unlock_trap(void); |
| extern void lock_pid(void); |
| extern void unlock_pid(void); |
| extern int cpu_idle(void); |
| extern int kernel_thread1(int (*fn)(void *), void * arg, unsigned long flags, |
| int cpu, int *extern_pid_out); |
| extern void finish_fork(void); |
| extern void *get_current_task(void); |
| extern void paging_init(void); |
| extern unsigned long um_virt_to_phys(void *t, unsigned long addr); |
| extern void init_flush_vm(void); |
| extern unsigned long *process_state(void *t); |
| extern unsigned long *syscall_state(void *t, void **stack_out, |
| int *size_out); |
| extern int have_signals(void *t, int altstack); |
| extern void save_syscall_stack(void *t, unsigned long sp); |
| extern int redoing_syscall(void *t, unsigned long *args_out, long *result_out); |
| extern void zero_address(unsigned long sp); |
| extern void syscall_trace(void); |
| extern void save_altstack(void *t, unsigned long sp); |
| extern unsigned long *altstack_state(void *t, void **stack_out, int *size_out); |
| extern int hz(void); |
| #endif |