summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjb <jb@FreeBSD.org>2007-11-18 00:23:31 +0000
committerjb <jb@FreeBSD.org>2007-11-18 00:23:31 +0000
commit9bd9c03e9216324dd9dfcda9145702c561b4abb8 (patch)
tree55bd23df13e645c28c563525f2433dd5ff2447ea /sys/kern
parent804a2cd23889a22a7ab5641fcfe31330a66f154e (diff)
downloadFreeBSD-src-9bd9c03e9216324dd9dfcda9145702c561b4abb8.zip
FreeBSD-src-9bd9c03e9216324dd9dfcda9145702c561b4abb8.tar.gz
Add a function to list symbols in a file and their values at the
same time rather than having to list the symbols and then go back and look each one up by name.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_linker.c10
-rw-r--r--sys/kern/linker_if.m11
2 files changed, 21 insertions, 0 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index e6080aa..321436d 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -690,6 +690,16 @@ linker_file_lookup_set(linker_file_t file, const char *name,
return (error);
}
+/*
+ * List all functions in a file.
+ */
+int
+linker_file_function_listall(linker_file_t lf,
+ int (*callback_func)(linker_file_t, linker_symval_t *, void *), void *arg)
+{
+ return (LINKER_EACH_FUNCTION_NAMEVAL(lf, callback_func, arg));
+}
+
caddr_t
linker_file_lookup_symbol(linker_file_t file, const char *name, int deps)
{
diff --git a/sys/kern/linker_if.m b/sys/kern/linker_if.m
index 84d56d2..1530da2 100644
--- a/sys/kern/linker_if.m
+++ b/sys/kern/linker_if.m
@@ -64,6 +64,17 @@ METHOD int each_function_name {
};
#
+# Call the callback with each specified function and it's value
+# defined in the file.
+# Stop and return the error if the callback returns an error.
+#
+METHOD int each_function_nameval {
+ linker_file_t file;
+ linker_function_nameval_callback_t callback;
+ void* opaque;
+};
+
+#
# Search for a linker set in a file. Return a pointer to the first
# entry (which is itself a pointer), and the number of entries.
# "stop" points to the entry beyond the last valid entry.
OpenPOWER on IntegriCloud