MCPcopy Create free account
hub / github.com/F-Stack/f-stack / linker_file_register_modules

Function linker_file_register_modules

freebsd/kern/kern_linker.c:360–400  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

358}
359
360static int
361linker_file_register_modules(linker_file_t lf)
362{
363 struct mod_metadata **start, **stop, **mdp;
364 const moduledata_t *moddata;
365 int first_error, error;
366
367 KLD_DPF(FILE, ("linker_file_register_modules: registering modules"
368 " in %s\n", lf->filename));
369
370 sx_assert(&kld_sx, SA_XLOCKED);
371
372 if (linker_file_lookup_set(lf, MDT_SETNAME, &start, &stop, NULL) != 0) {
373 /*
374 * This fallback should be unnecessary, but if we get booted
375 * from boot2 instead of loader and we are missing our
376 * metadata then we have to try the best we can.
377 */
378 if (lf == linker_kernel_file) {
379 start = SET_BEGIN(modmetadata_set);
380 stop = SET_LIMIT(modmetadata_set);
381 } else
382 return (0);
383 }
384 first_error = 0;
385 for (mdp = start; mdp < stop; mdp++) {
386 if ((*mdp)->md_type != MDT_MODULE)
387 continue;
388 moddata = (*mdp)->md_data;
389 KLD_DPF(FILE, ("Registering module %s in %s\n",
390 moddata->name, lf->filename));
391 error = module_register(moddata, lf);
392 if (error) {
393 printf("Module %s failed to register: %d\n",
394 moddata->name, error);
395 if (first_error == 0)
396 first_error = error;
397 }
398 }
399 return (first_error);
400}
401
402static void
403linker_init_kernel_modules(void)

Callers 3

linker_load_fileFunction · 0.85
linker_preloadFunction · 0.85

Calls 3

linker_file_lookup_setFunction · 0.85
module_registerFunction · 0.85
printfFunction · 0.70

Tested by

no test coverage detected