void __wrap_free(void *addr) { if (EarlyMallocEnabled) { early_free(addr); } enter_kernel(); __real_free(addr); leave_kernel(); }
void *__wrap_malloc(size_t size) { if (EarlyMallocEnabled) { return early_malloc(size); } enter_kernel(); void *mem = __real_malloc(size); leave_kernel(); return mem; }
asmlinkage void csyscall(struct pt_regs* regs) { unsigned long num = regs->gregs[13]; extern void stack_trace(void); extern void leave_kernel(struct pt_regs* regs); CHECK_STACK(); #if 0 if (user_mode(regs)) { printk("syscall %d; pc == 0x%8x\n", num, get_pc()); stack_trace(); } #endif if (num >= 0 && num < __NR_nocall) { switch(num) { /* * system calls that need the regs */ case __NR_fork: case __NR_clone: case __NR_execve: case __NR_sigsuspend: regs->gregs[0] = ((int (*)(int))(syscall_tab[num]))((int)regs); break; #ifdef DEBUG /* help debug user applications */ case __NR_dbg_break: printk("break: %s\n", regs->gregs[0]); system_break(); break; case __NR_dbg_hexprint: printk("value: %x\n", regs->gregs[0]); break; #endif case __NR_mmap: regs->gregs[0] = sys_mmap(regs); #if 0 dprintk("mmap: returning 0x%8x\n", regs->gregs[0]); #endif break; default: regs->gregs[0] = syscall_tab[num](regs->gregs[0], regs->gregs[1], regs->gregs[2], regs->gregs[3], regs->gregs[4]); break; } } else { regs->gregs[0] = -ENOSYS; } #if 0 printk("csyscall: returning %p\n", regs->gregs[0]); stack_trace(); #endif leave_kernel(regs); }