[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE



commit 48a312d1ade7f7df0ee10ae192cb7a09247c14bc
Author:     Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
AuthorDate: Thu Apr 28 10:11:46 2016 -0400
Commit:     Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
CommitDate: Fri Apr 29 03:59:29 2016 -0400

    xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE
    
    With this third payload one can do:
    
    -bash-4.1# xen-xsplice load xen_hello_world.xsplice
    Uploading xen_hello_world.xsplice (10148 bytes)
    Performing check: completed
    Performing apply:. completed
    
    [xen_hello_world depends on hypervisor build-id]
    -bash-4.1# xen-xsplice load xen_bye_world.xsplice
    Uploading xen_bye_world.xsplice (7076 bytes)
    Performing check: completed
    Performing apply:. completed
    [xen_bye_world depends on xen_hello_world build-id]
    -bash-4.1# xen-xsplice upload xen_replace_world xen_replace_world.xsplice
    Uploading xen_replace_world.xsplice (7148 bytes)
    -bash-4.1# xen-xsplice list
     ID                                     | status
    ----------------------------------------+------------
    xen_hello_world                         | APPLIED
    xen_bye_world                           | APPLIED
    xen_replace_world                       | CHECKED
    -bash-4.1# xen-xsplice replace xen_replace_world
    Performing replace:. completed
    -bash-4.1# xl info | grep extra
    xen_extra              : Hello Again World!
    -bash-4.1# xen-xsplice list
     ID                                     | status
    ----------------------------------------+------------
    xen_hello_world                         | CHECKED
    xen_bye_world                           | CHECKED
    xen_replace_world                       | APPLIED
    
    and revert both of the previous payloads and apply
    the xen_replace_world.
    
    All the magic of this is in the Makefile - we extract
    the build-id from the hypervisor (xen-syms) and jam it
    in the xen_replace_world as .xsplice.depends.
    
    We also make .old_addr be zero, forcing the hypervisor
    to lookup the xen_extra_version.
    
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
    Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
    Release-acked-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
 .gitignore                                 |  1 +
 xen/arch/x86/test/Makefile                 | 11 +++++++++-
 xen/arch/x86/test/xen_replace_world.c      | 33 ++++++++++++++++++++++++++++++
 xen/arch/x86/test/xen_replace_world_func.c | 22 ++++++++++++++++++++
 4 files changed, 66 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 88cec1d..1b73293 100644
--- a/.gitignore
+++ b/.gitignore
@@ -249,6 +249,7 @@ xen/arch/x86/efi/mkreloc
 xen/arch/x86/test/config.h
 xen/arch/x86/test/xen_hello_world.xsplice
 xen/arch/x86/test/xen_bye_world.xsplice
+xen/arch/x86/test/xen_replace_world.xsplice
 xen/arch/*/efi/boot.c
 xen/arch/*/efi/compat.c
 xen/arch/*/efi/efi.h
diff --git a/xen/arch/x86/test/Makefile b/xen/arch/x86/test/Makefile
index 3a25ca3..a9d43a1 100644
--- a/xen/arch/x86/test/Makefile
+++ b/xen/arch/x86/test/Makefile
@@ -7,15 +7,18 @@ CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ 
print "0x"$$2}')
 
 XSPLICE := xen_hello_world.xsplice
 XSPLICE_BYE := xen_bye_world.xsplice
+XSPLICE_REPLACE := xen_replace_world.xsplice
 
 default: xsplice
 
 install: xsplice
        $(INSTALL_DATA) $(XSPLICE) $(DESTDIR)$(DEBUG_DIR)/$(XSPLICE)
        $(INSTALL_DATA) $(XSPLICE_BYE) $(DESTDIR)$(DEBUG_DIR)/$(XSPLICE_BYE)
+       $(INSTALL_DATA) $(XSPLICE_REPLACE) 
$(DESTDIR)$(DEBUG_DIR)/$(XSPLICE_REPLACE)
 uninstall:
        rm -f $(DESTDIR)$(DEBUG_DIR)/$(XSPLICE)
        rm -f $(DESTDIR)$(DEBUG_DIR)/$(XSPLICE_BYE)
+       rm -f $(DESTDIR)$(DEBUG_DIR)/$(XSPLICE_REPLACE)
 
 .PHONY: clean
 clean::
@@ -72,5 +75,11 @@ xen_bye_world.o: config.h
 $(XSPLICE_BYE): xen_bye_world_func.o xen_bye_world.o hello_world_note.o
        $(LD) $(LDFLAGS) $(build_id_linker) -r -o $(XSPLICE_BYE) $^
 
+xen_replace_world.o: config.h
+
+.PHONY: $(XSPLICE_REPLACE)
+$(XSPLICE_REPLACE): xen_replace_world_func.o xen_replace_world.o note.o
+       $(LD) $(LDFLAGS) $(build_id_linker) -r -o $(XSPLICE_REPLACE) $^
+
 .PHONY: xsplice
-xsplice: $(XSPLICE) $(XSPLICE_BYE)
+xsplice: $(XSPLICE) $(XSPLICE_BYE) $(XSPLICE_REPLACE)
diff --git a/xen/arch/x86/test/xen_replace_world.c 
b/xen/arch/x86/test/xen_replace_world.c
new file mode 100644
index 0000000..fab2841
--- /dev/null
+++ b/xen/arch/x86/test/xen_replace_world.c
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ */
+
+#include "config.h"
+#include <xen/lib.h>
+#include <xen/types.h>
+#include <xen/xsplice.h>
+
+#include <public/sysctl.h>
+
+static char xen_replace_world_name[] = "xen_extra_version";
+extern const char *xen_replace_world(void);
+
+struct xsplice_patch_func __section(".xsplice.funcs") 
xsplice_xen_replace_world = {
+    .version = XSPLICE_PAYLOAD_VERSION,
+    .name = xen_replace_world_name,
+    .old_addr = 0, /* Forces the hypervisor to lookup .name */
+    .new_addr = xen_replace_world,
+    .new_size = NEW_CODE_SZ,
+    .old_size = OLD_CODE_SZ,
+};
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/arch/x86/test/xen_replace_world_func.c 
b/xen/arch/x86/test/xen_replace_world_func.c
new file mode 100644
index 0000000..afb5cda
--- /dev/null
+++ b/xen/arch/x86/test/xen_replace_world_func.c
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
+ *
+ */
+
+#include <xen/types.h>
+
+/* Our replacement function for xen_hello_world. */
+const char *xen_replace_world(void)
+{
+    return "Hello Again World!";
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.