@@ -295,6 +295,7 @@ xen/arch/*/efi/boot.c
xen/arch/*/efi/compat.c
xen/arch/*/efi/efi.h
xen/arch/*/efi/runtime.c
+xen/common/config_data.c
xen/include/headers*.chk
xen/include/asm
xen/include/asm-*/asm-offsets.h
@@ -312,6 +313,7 @@ xen/test/livepatch/xen_bye_world.livepatch
xen/test/livepatch/xen_hello_world.livepatch
xen/test/livepatch/xen_nop.livepatch
xen/test/livepatch/xen_replace_world.livepatch
+xen/tools/bin2c
xen/tools/kconfig/.tmp_gtkcheck
xen/tools/kconfig/.tmp_qtcheck
xen/tools/symbols
@@ -53,3 +53,12 @@ tags enclosed in square brackets.
#### /
The root of the hypervisor file system.
+
+#### /buildinfo/
+
+A directory containing static information generated while building the
+hypervisor.
+
+#### /buildinfo/config = STRING
+
+The contents of the `xen/.config` file at the time of the hypervisor build.
@@ -1,6 +1,7 @@
obj-$(CONFIG_ARGO) += argo.o
obj-y += bitmap.o
obj-y += bsearch.o
+obj-y += config_data.o
obj-$(CONFIG_CORE_PARKING) += core_parking.o
obj-y += cpu.o
obj-y += cpupool.o
@@ -79,3 +80,11 @@ subdir-$(CONFIG_UBSAN) += ubsan
subdir-$(CONFIG_NEEDS_LIBELF) += libelf
subdir-$(CONFIG_HAS_DEVICE_TREE) += libfdt
+
+config_data.c: ../.config
+ ( echo "char xen_config_data[] ="; \
+ ../tools/bin2c <$<; \
+ echo ";" ) > $@
+
+clean::
+ rm config_data.c 2>/dev/null || true
@@ -25,6 +25,10 @@ static struct hypfs_entry hypfs_root_entry = {
.dir = &hypfs_root,
};
+static struct hypfs_dir hypfs_buildinfo = {
+ .list = LIST_HEAD_INIT(hypfs_buildinfo.list),
+};
+
static int hypfs_add_entry(struct hypfs_dir *parent, struct hypfs_entry *new)
{
int ret = -ENOENT;
@@ -312,3 +316,16 @@ long do_hypfs_op(unsigned int cmd,
return ret;
}
+
+static int __init hypfs_init(void)
+{
+ int ret;
+
+ ret = hypfs_new_dir(&hypfs_root, "buildinfo", &hypfs_buildinfo);
+ BUG_ON(ret);
+ ret = hypfs_new_entry_string(&hypfs_buildinfo, "config", xen_config_data);
+ BUG_ON(ret);
+
+ return 0;
+}
+__initcall(hypfs_init);
@@ -100,5 +100,7 @@ extern enum system_state {
bool_t is_active_kernel_text(unsigned long addr);
+extern char xen_config_data[];
+
#endif /* _LINUX_KERNEL_H */
@@ -1,13 +1,18 @@
include $(XEN_ROOT)/Config.mk
+PROGS = symbols bin2c
+
.PHONY: default
default:
- $(MAKE) symbols
+ $(MAKE) $(PROGS)
.PHONY: clean
clean:
- rm -f *.o symbols
+ rm -f *.o $(PROGS)
symbols: symbols.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
+
+bin2c: bin2c.c
+ $(HOSTCC) $(HOSTCFLAGS) -o $@ $<
new file mode 100644
@@ -0,0 +1,28 @@
+/*
+ * Unloved program to convert a binary on stdin to a C include on stdout
+ *
+ * Jan 1999 Matt Mackall <mpm@selenic.com>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ */
+
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ int ch, total = 0;
+
+ do {
+ printf("\t\"");
+ while ((ch = getchar()) != EOF) {
+ total++;
+ printf("\\x%02x", ch);
+ if (total % 16 == 0)
+ break;
+ }
+ printf("\"\n");
+ } while (ch != EOF);
+
+ return 0;
+}
Add the /buildinfo/config entry to the hypervisor filesystem. This entry contains the .config file used to build the hypervisor. Signed-off-by: Juergen Gross <jgross@suse.com> --- .gitignore | 2 ++ docs/misc/hypfs-paths.pandoc | 9 +++++++++ xen/common/Makefile | 9 +++++++++ xen/common/hypfs.c | 17 +++++++++++++++++ xen/include/xen/kernel.h | 2 ++ xen/tools/Makefile | 9 +++++++-- xen/tools/bin2c.c | 28 ++++++++++++++++++++++++++++ 7 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 xen/tools/bin2c.c