summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/subr_module.c25
-rw-r--r--sys/sys/linker.h4
2 files changed, 28 insertions, 1 deletions
diff --git a/sys/kern/subr_module.c b/sys/kern/subr_module.c
index 1295cb8..2485c94 100644
--- a/sys/kern/subr_module.c
+++ b/sys/kern/subr_module.c
@@ -35,7 +35,8 @@ __FBSDID("$FreeBSD$");
* Preloaded module support
*/
-caddr_t preload_metadata;
+vm_offset_t preload_addr_relocate = 0;
+caddr_t preload_metadata;
/*
* Search for the preloaded module (name)
@@ -230,6 +231,28 @@ preload_delete_name(const char *name)
}
}
+void *
+preload_fetch_addr(caddr_t mod)
+{
+ caddr_t *mdp;
+
+ mdp = (caddr_t *)preload_search_info(mod, MODINFO_ADDR);
+ if (mdp == NULL)
+ return (NULL);
+ return (*mdp + preload_addr_relocate);
+}
+
+size_t
+preload_fetch_size(caddr_t mod)
+{
+ size_t *mdp;
+
+ mdp = (size_t *)preload_search_info(mod, MODINFO_SIZE);
+ if (mdp == NULL)
+ return (0);
+ return (*mdp);
+}
+
/* Called from locore on i386. Convert physical pointers to kvm. Sigh. */
void
preload_bootstrap_relocate(vm_offset_t offset)
diff --git a/sys/sys/linker.h b/sys/sys/linker.h
index aa705fd..8ea140f 100644
--- a/sys/sys/linker.h
+++ b/sys/sys/linker.h
@@ -234,7 +234,11 @@ void *linker_hwpmc_list_objects(void);
/*
* Module lookup
*/
+extern vm_offset_t preload_addr_relocate;
extern caddr_t preload_metadata;
+
+extern void * preload_fetch_addr(caddr_t _mod);
+extern size_t preload_fetch_size(caddr_t _mod);
extern caddr_t preload_search_by_name(const char *_name);
extern caddr_t preload_search_by_type(const char *_type);
extern caddr_t preload_search_next_name(caddr_t _base);
OpenPOWER on IntegriCloud