From patchwork Wed Aug 24 02:22:11 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: 9296729 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 20AB1607D0 for ; Wed, 24 Aug 2016 02:25:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 125D228D10 for ; Wed, 24 Aug 2016 02:25:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0743928DD8; Wed, 24 Aug 2016 02:25:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 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.wl.linuxfoundation.org (Postfix) with ESMTPS id C496C28D10 for ; Wed, 24 Aug 2016 02:25:04 +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 1bcNqE-00039X-Tk; Wed, 24 Aug 2016 02:22:58 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bcNqE-00038E-5H for xen-devel@lists.xenproject.org; Wed, 24 Aug 2016 02:22:58 +0000 Received: from [85.158.143.35] by server-3.bemta-6.messagelabs.com id 19/F3-05661-1050DB75; Wed, 24 Aug 2016 02:22:57 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNLMWRWlGSWpSXmKPExsXSO6nOVZeBdW+ 4weFrXBbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8a6nl/sBRcsK771f2JtYNxh2MXIxSEkMJlJ 4vjlV6wQzm9GickPpzNCOBsZJX6cmsoE4UxglJjy9jFQGQcHm4CJxJtVjl2MnBwiAhESvS9Ps YDUMAu8YpJovrebHSQhLGAhseT6ZSYQm0VAVeL1xU8sIDavgJvE7WsPwOZICMhLPLtdDxLmFH CXOHN4FliJEFDJosNvwMZICBhLtL+9yDaBkW8BI8MqRvXi1KKy1CJdS72kosz0jJLcxMwcXUM DM73c1OLixPTUnMSkYr3k/NxNjMBAYQCCHYx3NwUcYpTkYFIS5TV7uydciC8pP6UyI7E4I76o NCe1+BCjDAeHkgTvWea94UKCRanpqRVpmTnAkIVJS3DwKInwirEApXmLCxJzizPTIVKnGBWlx HnXgvQJgCQySvPg2mBxcolRVkqYlxHoECGegtSi3MwSVPlXjOIcjErCvK9BpvBk5pXATX8FtJ gJaHHL/d0gi0sSEVJSDYzF097vfWxsvLPnzM17rYksz+ybn1S5m3Wv36qt8FbX3bLJ1aW88It S7LmL99adzv2tcmKvWErJugdRb78wC/T11XT5+M/6pmU9q2OV3/PmR4E6kwU3SzHfsO3ha205 e+mN4Jq1Rbk1mza/uM68QHfKVpUtfjzzrshtMA8XUZzFKvN9XU2Mm4ESS3FGoqEWc1FxIgB9q 7MBjgIAAA== X-Env-Sender: konrad.wilk@oracle.com X-Msg-Ref: server-9.tower-21.messagelabs.com!1472005374!29743624!1 X-Originating-IP: [141.146.126.69] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTQxLjE0Ni4xMjYuNjkgPT4gMjc3MjE4\n X-StarScan-Received: X-StarScan-Version: 8.84; banners=-,-,- X-VirusChecked: Checked Received: (qmail 50808 invoked from network); 24 Aug 2016 02:22:55 -0000 Received: from aserp1040.oracle.com (HELO aserp1040.oracle.com) (141.146.126.69) by server-9.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 24 Aug 2016 02:22:55 -0000 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id u7O2MlVF000822 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 24 Aug 2016 02:22:48 GMT Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id u7O2MlLV018023 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 24 Aug 2016 02:22:47 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id u7O2MkIt014677; Wed, 24 Aug 2016 02:22:46 GMT Received: from localhost.localdomain.com (/209.6.196.81) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 23 Aug 2016 19:22:46 -0700 From: Konrad Rzeszutek Wilk To: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com Date: Tue, 23 Aug 2016 22:22:11 -0400 Message-Id: <1472005332-32207-9-git-send-email-konrad.wilk@oracle.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1472005332-32207-1-git-send-email-konrad.wilk@oracle.com> References: <1472005332-32207-1-git-send-email-konrad.wilk@oracle.com> X-Source-IP: aserv0022.oracle.com [141.146.126.234] Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Jan Beulich Subject: [Xen-devel] [PATCH v4 8/9] symbols: Generate an xen-sym.map 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-Virus-Scanned: ClamAV using ClamSMTP You could construct _most_ of the names of the functions by doing 'nm --defined' but unfortunatly you do not get the prefix that is added on in Xen . For example: $ cat xen-syms.symbols |grep do_domain_pause 0xffff82d080104920 t domain.c#do_domain_pause $ nm --defined xen-syms|grep do_domain_pause ffff82d080104920 t do_domain_pause This is normally not an issue, but if one is doing livepatching and wants during build-time verify that the symbols the livepatch payloads will patch do correspond to the one the hypervisor has built - this helps a lot. Note that during runtime one can do: [root@localhost xen]# cat /proc/xen/xensyms |grep do_domain_pause ffff82d080104920 t domain.c#do_domain_pause But one may not want to build and verify a livepatch on the same host. Signed-off-by: Konrad Rzeszutek Wilk Reviewed-by: Jan Beulich Reviewed-by: Ross Lagerwall --- Cc: Ross Lagerwall Cc: Andrew Cooper Cc: George Dunlap Cc: Ian Jackson Cc: Jan Beulich Cc: Stefano Stabellini Cc: Tim Deegan Cc: Wei Liu v1: First submission v2: Do not use intermediary object file but the final one v3: Fix comment to have the example from /proc/xen/xensyms. Using '#' at start of line is a BAD IDEA. v4: Also do it for EFI builds. Do not use --warn-dup --- .gitignore | 1 + xen/Makefile | 6 +++++- xen/arch/arm/Makefile | 3 +++ xen/arch/x86/Makefile | 7 ++++++- xen/tools/symbols.c | 12 +++++++++++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d193820..44cc7bf 100644 --- a/.gitignore +++ b/.gitignore @@ -287,6 +287,7 @@ tools/flask/policy/policy.conf tools/flask/policy/xenpolicy-* xen/xen xen/xen-syms +xen/xen-syms.map xen/xen.* unmodified_drivers/linux-2.6/.tmp_versions unmodified_drivers/linux-2.6/*.cmd diff --git a/xen/Makefile b/xen/Makefile index 76b60bc..294fb9e 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -62,10 +62,12 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX) ln -f -s $(T)-$(XEN_FULLVERSION)$(Z) $(D)$(BOOT_DIR)/$(T)$(Z) [ -d "$(D)$(DEBUG_DIR)" ] || $(INSTALL_DIR) $(D)$(DEBUG_DIR) $(INSTALL_DATA) $(TARGET)-syms $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION) + $(INSTALL_DATA) $(TARGET)-syms.map $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION).map $(INSTALL_DATA) $(KCONFIG_CONFIG) $(D)$(BOOT_DIR)/$(T)-$(XEN_FULLVERSION).config if [ -r $(TARGET).efi -a -n '$(EFI_DIR)' ]; then \ [ -d $(D)$(EFI_DIR) ] || $(INSTALL_DIR) $(D)$(EFI_DIR); \ $(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_DIR)/$(T)-$(XEN_FULLVERSION).efi; \ + $(INSTALL_DATA) $(TARGET)-efi.map $(D)$(DEBUG_DIR)/$(T)-$(XEN_FULLVERSION).efi.map \ ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).$(XEN_SUBVERSION).efi; \ ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi; \ ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T).efi; \ @@ -91,8 +93,10 @@ _uninstall: rm -f $(D)$(BOOT_DIR)/$(T)-$(XEN_VERSION)$(Z) rm -f $(D)$(BOOT_DIR)/$(T)$(Z) rm -f $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION) + rm -f $(D)$(DEBUG_DIR)/$(T)-syms-$(XEN_FULLVERSION).map rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_FULLVERSION).efi rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).$(XEN_SUBVERSION).efi + rm -f $(D)$(DEBUG_DIR)/$(T)-$(XEN_FULLVERSION).efi.map rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi rm -f $(D)$(EFI_DIR)/$(T).efi rm -f $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi @@ -112,7 +116,7 @@ _clean: delete-unfresh-files $(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) clean $(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean find . \( -name "*.o" -o -name ".*.d" \) -exec rm -f {} \; - rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET)-syms *~ core + rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core rm -f include/asm-*/asm-offsets.h rm -f .banner diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile index 23aaf52..0a96713 100644 --- a/xen/arch/arm/Makefile +++ b/xen/arch/arm/Makefile @@ -102,6 +102,9 @@ $(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o $(LD) $(LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \ $(@D)/.$(@F).1.o -o $@ + $(NM) -pa --format=sysv $(@D)/$(@F) \ + | $(BASEDIR)/tools/symbols --xensyms --sysv --sort \ + >$(@D)/$(@F).map rm -f $(@D)/.$(@F).[0-9]* asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index 5b9e9da..7209560 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -138,6 +138,9 @@ $(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o $(LD) $(LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \ $(@D)/.$(@F).1.o -o $@ + $(NM) -pa --format=sysv $(@D)/$(@F) \ + | $(BASEDIR)/tools/symbols --xensyms --sysv --sort \ + >$(@D)/$(@F).map rm -f $(@D)/.$(@F).[0-9]* note.o: $(TARGET)-syms @@ -182,7 +185,9 @@ $(TARGET).efi: prelink-efi.o efi.lds efi/relocs-dummy.o $(BASEDIR)/common/symbol $(guard) $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(guard) $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \ $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file) -o $@ - if $(guard) false; then rm -f $@; echo 'EFI support disabled'; fi + if $(guard) false; then rm -f $@; echo 'EFI support disabled'; \ + else $(NM) -pa --format=sysv $(@D)/$(@F) \ + | $(BASEDIR)/tools/symbols --xensyms --sysv --sort >$(@D)/$(@F).map; fi rm -f $(@D)/.$(@F).[0-9]* efi/boot.init.o efi/runtime.o efi/compat.o: $(BASEDIR)/arch/x86/efi/built_in.o diff --git a/xen/tools/symbols.c b/xen/tools/symbols.c index 941fbe7..8c5842d 100644 --- a/xen/tools/symbols.c +++ b/xen/tools/symbols.c @@ -52,6 +52,7 @@ static unsigned int table_size, table_cnt; static unsigned long long _stext, _etext, _sinittext, _einittext, _sextratext, _eextratext; static int all_symbols = 0; static int sort_by_name = 0; +static int map_only = 0; static char symbol_prefix_char = '\0'; static enum { fmt_bsd, fmt_sysv } input_format; static int compare_name(const void *p1, const void *p2); @@ -181,7 +182,7 @@ static int read_symbol(FILE *in, struct sym_entry *s) *sym++ = '#'; } strcpy(sym, str); - if (sort_by_name) { + if (sort_by_name || map_only) { s->orig_symbol = strdup(SYMBOL_NAME(s)); s->type = stype; /* As s->sym[0] ends mangled. */ } @@ -307,6 +308,13 @@ static void write_src(void) unsigned int *markers; char buf[KSYM_NAME_LEN+1]; + if (map_only) { + for (i = 0; i < table_cnt; i++) + printf("%#llx %c %s\n", table[i].addr, table[i].type, + table[i].orig_symbol); + + return; + } printf("#include \n"); printf("#include \n"); printf("#if BITS_PER_LONG == 64 && !defined(SYMBOLS_ORIGIN)\n"); @@ -609,6 +617,8 @@ int main(int argc, char **argv) sort_by_name = 1; else if (strcmp(argv[i], "--warn-dup") == 0) warn_dup = true; + else if (strcmp(argv[i], "--xensyms") == 0) + map_only = true; else usage(); }