summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_linker.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_linker.c')
-rw-r--r--sys/kern/kern_linker.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index 353d811..7c2b59d 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -1702,3 +1702,34 @@ linker_load_dependancies(linker_file_t lf)
linker_addmodules(lf, start, stop, 0);
return error;
}
+
+static int
+sysctl_kern_function_list_iterate(const char *name, void *opaque)
+{
+ struct sysctl_req *req;
+
+ req = opaque;
+ return (SYSCTL_OUT(req, name, strlen(name) + 1));
+}
+
+/*
+ * Export a nul-separated, double-nul-terminated list of all function names
+ * in the kernel.
+ */
+static int
+sysctl_kern_function_list(SYSCTL_HANDLER_ARGS)
+{
+ linker_file_t lf;
+ int error;
+
+ TAILQ_FOREACH(lf, &linker_files, link) {
+ error = LINKER_EACH_FUNCTION_NAME(lf,
+ sysctl_kern_function_list_iterate, req);
+ if (error)
+ return (error);
+ }
+ return (SYSCTL_OUT(req, "", 1));
+}
+
+SYSCTL_PROC(_kern, OID_AUTO, function_list, CTLFLAG_RD,
+ NULL, 0, sysctl_kern_function_list, "", "kernel function list");
OpenPOWER on IntegriCloud