diff options
author | bp <bp@FreeBSD.org> | 2001-03-22 07:14:42 +0000 |
---|---|---|
committer | bp <bp@FreeBSD.org> | 2001-03-22 07:14:42 +0000 |
commit | 6adc30be29e99707ea9c6d7819f9ee585663097f (patch) | |
tree | 85fb6c6721d0cb5853b1da1dd3493c3da2b911c4 /sys/kern/kern_linker.c | |
parent | cde3cb40c284841420dda3e60bd40c068e03f83f (diff) | |
download | FreeBSD-src-6adc30be29e99707ea9c6d7819f9ee585663097f.zip FreeBSD-src-6adc30be29e99707ea9c6d7819f9ee585663097f.tar.gz |
Remove support for old way of handling module dependencies.
Approved by: peter
Diffstat (limited to 'sys/kern/kern_linker.c')
-rw-r--r-- | sys/kern/kern_linker.c | 53 |
1 files changed, 18 insertions, 35 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c index e24f171..489df30 100644 --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -242,11 +242,10 @@ extern struct linker_set modmetadata_set; static int linker_file_register_modules(linker_file_t lf) { - int error, mcount; + int error; struct linker_set *modules; struct mod_metadata **mdpp; const moduledata_t *moddata; - struct sysinit **sipp; KLD_DPF(FILE, ("linker_file_register_modules: registering modules in %s\n", lf->filename)); @@ -257,39 +256,23 @@ linker_file_register_modules(linker_file_t lf) if (!modules && lf == linker_kernel_file) modules = &modmetadata_set; - mcount = 0; - if (modules) { - for (mdpp = (struct mod_metadata**)modules->ls_items; *mdpp; mdpp++) { - if ((*mdpp)->md_type != MDT_MODULE) - continue; - mcount++; - moddata = (*mdpp)->md_data; - KLD_DPF(FILE, ("Registering module %s in %s\n", - moddata->name, lf->filename)); - error = module_register(moddata, lf); - if (error) - printf("Module %s failed to register: %d\n", moddata->name, error); - } - } - if (mcount) - return mcount; /* Do not mix old and new style */ - - /* Hack - handle old kld's without metadata */ - modules = (struct linker_set*) - linker_file_lookup_symbol(lf, "sysinit_set", 0); - if (modules) { - for (sipp = (struct sysinit **)modules->ls_items; *sipp; sipp++) { - if ((*sipp)->func != module_register_init) - continue; - mcount++; - moddata = (*sipp)->udata; - printf("Old-style KLD file %s found\n", moddata->name); - error = module_register(moddata, lf); - if (error) - printf("Old-style KLD file %s failed to register: %d\n", moddata->name, error); + if (modules == NULL) + return 0; + for (mdpp = (struct mod_metadata**)modules->ls_items; *mdpp; mdpp++) { + if ((*mdpp)->md_type != MDT_MODULE) + continue; + moddata = (*mdpp)->md_data; + KLD_DPF(FILE, ("Registering module %s in %s\n", + moddata->name, lf->filename)); + if (module_lookupbyname(moddata->name) != NULL) { + printf("Warning: module %s already exists\n", moddata->name); + continue; /* or return a error ? */ } + error = module_register(moddata, lf); + if (error) + printf("Module %s failed to register: %d\n", moddata->name, error); } - return mcount; + return 0; } static void @@ -962,7 +945,7 @@ linker_preload(void* arg) char *modtype; linker_file_t lf; linker_class_t lc; - int error, mcount; + int error; struct linker_set *sysinits; linker_file_list_t loaded_files; linker_file_list_t depended_files; @@ -1142,7 +1125,7 @@ restart: continue; } - mcount = linker_file_register_modules(lf); + linker_file_register_modules(lf); sysinits = (struct linker_set*) linker_file_lookup_symbol(lf, "sysinit_set", 0); if (sysinits) |