diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index 301e109..9e0e7c1 100644 --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -125,6 +125,18 @@ linker_add_class(const char* desc, void* priv, return 0; } +const char * +get_fn_name(long callpc) +{ + Dl_info info; + + if (dladdr((const void *)callpc, &info) != 0) { + if (info.dli_saddr <= (const void *)callpc) + return info.dli_sname; + } + return NULL; +} + static void linker_file_sysinit(linker_file_t lf) { @@ -132,6 +144,7 @@ linker_file_sysinit(linker_file_t lf) struct sysinit** sipp; struct sysinit** xipp; struct sysinit* save; + const char *name = NULL; KLD_DPF(FILE, ("linker_file_sysinit: calling SYSINITs for %s\n", lf->filename)); @@ -168,6 +181,8 @@ linker_file_sysinit(linker_file_t lf) continue; /* skip dummy task(s)*/ /* Call function */ + name = get_fn_name((long)(*sipp)->func); + kprintf("debug: %s\n", name); (*((*sipp)->func))((*sipp)->udata); } } diff --git a/sys/kern/kern_module.c b/sys/kern/kern_module.c index 7af9655..b2d441a 100644 --- a/sys/kern/kern_module.c +++ b/sys/kern/kern_module.c @@ -94,8 +94,10 @@ module_register_init(const void *arg) const moduledata_t* data = (const moduledata_t*) arg; int error; module_t mod; + const char *name = NULL; mod = module_lookupbyname(data->name); + kprintf("debug: %s called, mod=%p\n", __func__, mod); if (mod == NULL) { #if 0 panic("module_register_init: module named %s not found", data->name); @@ -109,7 +111,10 @@ module_register_init(const void *arg) panic("module_register_init: module STILL not found!"); #endif } + name = get_fn_name((long)mod->handler); + kprintf("debug: preparing for MOD_EVENT handler=%s\n", name); error = MOD_EVENT(mod, MOD_LOAD); + kprintf("debug: MOD_EVENT done error=%d\n", error); if (error) { module_unload(mod); /* ignore error */ module_release(mod); diff --git a/sys/platform/vkernel64/conf/files b/sys/platform/vkernel64/conf/files index abcf4c6..468fc12 100644 --- a/sys/platform/vkernel64/conf/files +++ b/sys/platform/vkernel64/conf/files @@ -18,6 +18,7 @@ platform/vkernel64/x86_64/mp.c optional smp \ compile-with "${CC} -c -pthread ${CFLAGS} -I/usr/include ${.IMPSRC}" # # DDB XXX +kern/link_elf_obj.c standard cpu/x86_64/misc/elf_machdep.c standard cpu/x86_64/misc/lwbuf.c standard cpu/x86_64/misc/in_cksum2.s optional inet diff --git a/sys/sys/linker.h b/sys/sys/linker.h index 3871278..d3d70e8 100644 --- a/sys/sys/linker.h +++ b/sys/sys/linker.h @@ -241,6 +241,8 @@ int linker_ddb_search_symbol(caddr_t _value, c_linker_sym_t *_sym, long *_diffp); int linker_ddb_symbol_values(c_linker_sym_t _sym, linker_symval_t *_symval); +const char * get_fn_name(long); + #endif /* _KERNEL */ @@ -293,6 +295,7 @@ extern void preload_delete_name(const char *); extern void preload_bootstrap_relocate(vm_offset_t); extern struct mod_metadata *find_mod_metadata(const char *); +#define KLD_DEBUG 1 #ifdef KLD_DEBUG extern int kld_debug;