static void __init setup_vector(void) { int i; unsigned long *ramvec, *ramvec_p; const h8300_vector *trap_entry; ramvec = get_vector_address(); if (ramvec == NULL) panic("interrupt vector serup failed."); else pr_debug("virtual vector at 0x%p\n", ramvec); /* create redirect table */ ramvec_p = ramvec; trap_entry = trap_table; for (i = 0; i < NR_IRQS; i++) { if (i < 12) { if (*trap_entry) *ramvec_p = VECTOR(*trap_entry); ramvec_p++; trap_entry++; } else *ramvec_p++ = REDIRECT(_interrupt_entry); } _interrupt_redirect_table = ramvec; }
void __init init_IRQ(void) { #if defined(CONFIG_RAMKERNEL) int i; unsigned long *ramvec,*ramvec_p; const unsigned long *trap_entry; const int *saved_vector; ramvec = get_vector_address(); if (ramvec == NULL) panic("interrupt vector serup failed."); else printk(KERN_INFO "virtual vector at 0x%08lx\n",(unsigned long)ramvec); /* create redirect table */ ramvec_p = ramvec; trap_entry = h8300_trap_table; saved_vector = h8300_saved_vectors; for ( i = 0; i < NR_IRQS; i++) { if (i == *saved_vector) { ramvec_p++; saved_vector++; } else { if ( i < NR_TRAPS ) { if (*trap_entry) *ramvec_p = VECTOR(*trap_entry); ramvec_p++; trap_entry++; } else *ramvec_p++ = REDIRECT(interrupt_entry); } } interrupt_redirect_table = ramvec; #ifdef DUMP_VECTOR ramvec_p = ramvec; for (i = 0; i < NR_IRQS; i++) { if ((i % 8) == 0) printk(KERN_DEBUG "\n%p: ",ramvec_p); printk(KERN_DEBUG "%p ",*ramvec_p); ramvec_p++; } printk(KERN_DEBUG "\n"); #endif #endif }
void __init init_IRQ(void) { #if defined(CONFIG_RAMKERNEL) int i; unsigned long *ramvec,*ramvec_p; unsigned long break_vec; ramvec = get_vector_address(); if (ramvec == NULL) panic("interrupt vector serup failed."); else printk("virtual vector at 0x%08lx\n",(unsigned long)ramvec); #if defined(CONFIG_GDB_DEBUG) /* save orignal break vector */ break_vec = ramvec[TRAP3_VEC]; #else break_vec = VECTOR(trace_break); #endif /* create redirect table */ for (ramvec_p = ramvec, i = 0; i < NR_IRQS; i++) *ramvec_p++ = REDIRECT(interrupt_entry); /* set special vector */ ramvec[TRAP0_VEC] = VECTOR(system_call); ramvec[TRAP3_VEC] = break_vec; interrupt_redirect_table = ramvec; #ifdef DUMP_VECTOR ramvec_p = ramvec; for (i = 0; i < NR_IRQS; i++) { if ((i % 8) == 0) printk("\n%p: ",ramvec_p); printk("%p ",*ramvec_p); ramvec_p++; } printk("\n"); #endif #endif }
HOOK(ssize_t, readlinkat, int dirfd, const char *path, char *buf, size_t bufsiz) { REDIRECT(path); return ORIGCALL(readlinkat, dirfd, NEWPATH, buf, bufsiz); }
HOOK(int, readlink, const char *path, char *buf, size_t bufsz) { REDIRECT(path); return ORIGCALL(readlink, NEWPATH, buf, bufsz); }
HOOK(int, open, const char *file, int flag) { REDIRECT(file); return ORIGCALL(open, NEWPATH, flag); }
HOOK(int, chdir, const char *file) { REDIRECT(file); return ORIGCALL(chdir, NEWPATH); }
HOOK(int, unlinkat, int dirfd, const char *path, int flags) { REDIRECT(path); return ORIGCALL(unlinkat, dirfd, NEWPATH, flags); }
HOOK(int, faccessat, int dirfd, const char *path, int mode, int flags) { REDIRECT(path); return ORIGCALL(faccessat, dirfd, NEWPATH, mode, flags); }
HOOK(int, mkdir, const char *path, mode_t mode) { REDIRECT(path); return ORIGCALL(mkdir, NEWPATH, mode); }
HOOK(int, fchmodat, int fd, const char *path, mode_t mode, int f) { REDIRECT(path); return ORIGCALL(fchmodat, fd, NEWPATH, mode, f); }
HOOK(int, fstatat, int fd, const char *path, struct stat* buf, int f) { REDIRECT(path); return ORIGCALL(fstatat, fd, NEWPATH, buf, f); }
HOOK(int, fchownat, int fd, const char *path, uid_t u, gid_t g, int f) { REDIRECT(path); return ORIGCALL(fchownat, fd, NEWPATH, u, g, f); }
HOOK(int, chown, const char *path, uid_t owner, gid_t group) { REDIRECT(path); return ORIGCALL(chown, NEWPATH, owner, group); }
HOOK(void*, dlopen, const char *path, int flag) { REDIRECT(path); return ORIGCALL(dlopen, NEWPATH, flag); }
HOOK(int, mknod, const char *path, mode_t mode, dev_t dev) { REDIRECT(path); return ORIGCALL(mknod, NEWPATH, mode, dev); }
HOOK(int, unlink, const char *path) { REDIRECT(path); return ORIGCALL(unlink, NEWPATH); }
HOOK(int, rmdir, const char *path) { REDIRECT(path); return ORIGCALL(rmdir, NEWPATH); }
HOOK(int, chmod, const char *path, mode_t mode) { REDIRECT(path); return ORIGCALL(chmod, NEWPATH, mode); }
HOOK(int, truncate, const char * path,off_t length) { REDIRECT(path); return ORIGCALL(truncate, NEWPATH, length); }
HOOK(int, access, const char *path, int flag) { REDIRECT(path); return ORIGCALL(access, NEWPATH, flag); }
HOOK(int, execve, const char * path,char * const argv[],char * const envp[]) { REDIRECT(path); return ORIGCALL(execve, NEWPATH, argv, envp); }
HOOK(int, lstat, const char *path, struct stat *buf) { REDIRECT(path); return ORIGCALL(lstat, NEWPATH, buf); }