summaryrefslogtreecommitdiffstats
path: root/sys/boot/common
diff options
context:
space:
mode:
authorroyger <royger@FreeBSD.org>2017-05-09 09:53:18 +0000
committerroyger <royger@FreeBSD.org>2017-05-09 09:53:18 +0000
commitf20a7aeef0f6912c9d47d5ceb488ff7b745c5369 (patch)
treec81475e713b208d6570fe587744b6141305847c8 /sys/boot/common
parente776c54686e61cb89b170e3ec621f197edd73050 (diff)
downloadFreeBSD-src-f20a7aeef0f6912c9d47d5ceb488ff7b745c5369.zip
FreeBSD-src-f20a7aeef0f6912c9d47d5ceb488ff7b745c5369.tar.gz
MFC r316754: loader/multiboot: fix multiboot loading
Sponsored by: Citrix Systems R&D
Diffstat (limited to 'sys/boot/common')
-rw-r--r--sys/boot/common/bootstrap.h1
-rw-r--r--sys/boot/common/module.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/sys/boot/common/bootstrap.h b/sys/boot/common/bootstrap.h
index 472fc3e..a4c8939 100644
--- a/sys/boot/common/bootstrap.h
+++ b/sys/boot/common/bootstrap.h
@@ -229,6 +229,7 @@ void file_discard(struct preloaded_file *fp);
void file_addmetadata(struct preloaded_file *fp, int type, size_t size, void *p);
int file_addmodule(struct preloaded_file *fp, char *modname, int version,
struct kernel_module **newmp);
+void file_removemetadata(struct preloaded_file *fp);
/* MI module loaders */
#ifdef __elfN
diff --git a/sys/boot/common/module.c b/sys/boot/common/module.c
index 15c4807..e96aabb 100644
--- a/sys/boot/common/module.c
+++ b/sys/boot/common/module.c
@@ -642,6 +642,22 @@ file_findmetadata(struct preloaded_file *fp, int type)
return(md);
}
+/*
+ * Remove all metadata from the file.
+ */
+void
+file_removemetadata(struct preloaded_file *fp)
+{
+ struct file_metadata *md, *next;
+
+ for (md = fp->f_metadata; md != NULL; md = next)
+ {
+ next = md->md_next;
+ free(md);
+ }
+ fp->f_metadata = NULL;
+}
+
struct file_metadata *
metadata_next(struct file_metadata *md, int type)
{
OpenPOWER on IntegriCloud