From patchwork Thu Apr 7 03:49:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Konrad Rzeszutek Wilk X-Patchwork-Id: 8768391 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 4D113C0553 for ; Thu, 7 Apr 2016 03:52:26 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4AF56201BC for ; Thu, 7 Apr 2016 03:52:25 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3B4EC201C7 for ; Thu, 7 Apr 2016 03:52:24 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao0xO-0005CD-LU; Thu, 07 Apr 2016 03:50:10 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao0xM-00053I-Sb for xen-devel@lists.xenproject.org; Thu, 07 Apr 2016 03:50:08 +0000 Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id AE/DE-04060-0F8D5075; Thu, 07 Apr 2016 03:50:08 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpnkeJIrShJLcpLzFFi42KZM10+UPf9DdZ wg8MLlS2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oyWbd+ZCmZrV0zetZy5gbFLpYuRi0NIoJVJ YsaNZiYI5yujxPF5nxghnA2MEvPW/IXKdDNKvFx6BSjDAeQUSXz4FwhisgmYSLxZ5QhSIiKwn FGic99qti5GTg5mgXKJ1TPeg9nCApESTddnsIPYLAKqEk/u9IDFeQXcJY79/cMGMkdCQE5iwY V0kDAnUPhf226wciEBN4ml33tYQWwJAUOJ0w+3MU5g5F/AyLCKUaM4tagstUjX0EQvqSgzPaM kNzEzR9fQwFgvN7W4ODE9NScxqVgvOT93EyMwgBiAYAfjiu2ehxglOZiURHldK1nDhfiS8lMq MxKLM+KLSnNSiw8xynBwKEnw3rsOlBMsSk1PrUjLzAGGMkxagoNHSYQ3DRjOQrzFBYm5xZnpE KlTjIpS4rwmIAkBkERGaR5cGyx+LjHKSgnzMgIdIsRTkFqUm1mCKv+KUZyDUUmY1wBkCk9mXg nc9FdAi5mAFtcLM4EsLklESEk1MKbGirAafl4wd8n09+ufidyddPnGycvr1vQfM3G0mtbHb7v m9DehrLyAiI47e0S3HjfSEgpNv+JaZsz898225uo1nFpHFi84OaNkXvSblX/7Gvt/2tvYmslf lPu24UDnUdY233drd7HmiDzY9+jbgxoBPXWOI+fW2ftYrZjJsWNGS6D0Hr/VrklKLMUZiYZaz EXFiQDFLTc/mgIAAA== X-Env-Sender: konrad@char.us.oracle.com X-Msg-Ref: server-12.tower-31.messagelabs.com!1460001005!16689751!1 X-Originating-IP: [156.151.31.81] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n X-StarScan-Received: X-StarScan-Version: 8.28; banners=-,-,- X-VirusChecked: Checked Received: (qmail 31549 invoked from network); 7 Apr 2016 03:50:07 -0000 Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by server-12.tower-31.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 7 Apr 2016 03:50:07 -0000 Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u373nxpI004314 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 7 Apr 2016 03:50:00 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userv0021.oracle.com (8.13.8/8.13.8) with ESMTP id u373nwHv010963 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 7 Apr 2016 03:49:58 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0121.oracle.com (8.13.8/8.13.8) with ESMTP id u373nvKO012700; Thu, 7 Apr 2016 03:49:57 GMT Received: from char.us.oracle.com (/10.137.176.158) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 06 Apr 2016 20:49:57 -0700 Received: by char.us.oracle.com (Postfix, from userid 1000) id 66BE06A0125; Wed, 6 Apr 2016 23:49:50 -0400 (EDT) From: Konrad Rzeszutek Wilk To: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com, andrew.cooper3@citrix.com Date: Wed, 6 Apr 2016 23:49:41 -0400 Message-Id: <1460000983-28170-23-git-send-email-konrad.wilk@oracle.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> References: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> X-Source-IP: userv0021.oracle.com [156.151.31.71] Cc: Keir Fraser , Jan Beulich , Konrad Rzeszutek Wilk Subject: [Xen-devel] [PATCH v6 22/24] xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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. Signed-off-by: Konrad Rzeszutek Wilk Reviewed-by: Andrew Cooper --- Cc: Keir Fraser Cc: Jan Beulich Cc: Andrew Cooper v4: New. Make the objcopy use -S to strip the name. --- --- .gitignore | 1 + xen/arch/x86/test/Makefile | 8 +++++++ xen/arch/x86/test/xen_replace_world.c | 34 ++++++++++++++++++++++++++++++ xen/arch/x86/test/xen_replace_world_func.c | 24 +++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 xen/arch/x86/test/xen_replace_world.c create mode 100644 xen/arch/x86/test/xen_replace_world_func.c diff --git a/.gitignore b/.gitignore index f1cadcf..0d373e3 100644 --- a/.gitignore +++ b/.gitignore @@ -248,6 +248,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 0cb2f86..880a474 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:: @@ -71,3 +74,8 @@ xsplice: config.h notes.o $(MAKE) -f $(BASEDIR)/Rules.mk hello_world_notes.o $(LD) $(LDFLAGS) $(build_id_linker) -r -o $(XSPLICE_BYE) \ xen_bye_world_func.o xen_bye_world.o hello_world_notes.o + $(MAKE) -f $(BASEDIR)/Rules.mk xen_replace_world_func.o + $(MAKE) -f $(BASEDIR)/Rules.mk xen_replace_world.o + $(LD) $(LDFLAGS) $(build_id_linker) -r -o $(XSPLICE_REPLACE) \ + xen_replace_world_func.o \ + xen_replace_world.o notes.o 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..fb21b8d --- /dev/null +++ b/xen/arch/x86/test/xen_replace_world.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. + * + */ + +#include +#include +#include +#include "config.h" +#include + +static char xen_replace_world_name[] = "xen_replace_world"; +extern const char *xen_replace_world(void); + +/* External symbol. */ +extern const char *xen_extra_version(void); + +struct xsplice_patch_func __section(".xsplice.funcs") xsplice_xen_replace_world = { + .name = xen_replace_world_name, + .new_addr = (unsigned long)(xen_replace_world), + .old_addr = (unsigned long)(xen_extra_version), + .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..e37da85 --- /dev/null +++ b/xen/arch/x86/test/xen_replace_world_func.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. + * + */ + +#include +#include +#include + +/* 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: + */