Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp910764ybb; Fri, 10 Apr 2020 12:39:13 -0700 (PDT) X-Google-Smtp-Source: APiQypLO+7aLhoNw5qxiZTpwUjEleM5fOBGyvYDKn/zdWEhwVVj1M26jHOMx48YdEbMx9EJxlRCv X-Received: by 2002:a05:6214:1414:: with SMTP id n20mr6767641qvx.160.1586547552984; Fri, 10 Apr 2020 12:39:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586547552; cv=none; d=google.com; s=arc-20160816; b=GSYGjnTqZVjgZjJ7kO6ktYE+BK36AZgbX9Upj+OCtVfrbyzohrObkOQPmdiEHqw6k7 NJkIAFgRAZYAvUS0iFbgyg2aVDum8U39p5RVarAEmKUzLhTV1eZAU/qHqmCkvEX2XJ80 WL/NPPBKdpKRE/vI07JzPxjj4uxjK5sgjExj/QuuJhnjm/0Leva358shLQgD5ER2/KE2 7Jp7H3NWvJTPN0SgfR3cs/EJLT0erGRKTFtIwIJ8RfD86pb8+lJIs4ib2HPKB+zzNRmK YfYzO32vnKsu8yiA6N9bwb0WiRXf/OQ8wESwXMKb8qTjjxrmtmXbUZBmi9BlL+wWOFSM x5iQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=9/EbMnwFB8dvmU4LvBuy3XjxX5Y0Rh2ZDImplrWhKgk=; b=sVmL4Lh1JTR5sIzhpfbo3dPYmN8MI9MK1I74pGGkZDPHya0C/SVKxFwO1chiC+ialj ZSoZ2tEjB9PqMJK2ZfQb2YhYfF/E7tGovjUFXTF/cZQaAoFjtio/SyhQx8aDsTEytcMH 6jJutPriL5nCD8lqfE+J5V7vCS89GQQhCqFL01sFAZiW5PMYqtouky6WLFkiCMVkqjZ6 3q2XcNMo/DLnuJ5/iCPoBditCAhNOtF0EDHoKTPNnVXavTOA5Ct0obeFmnPyVyomXk94 rfpbZzWaP3TO2dYKH/mwURMo/EUW1mMsz59Ska3zWJWPXrDEwUPPk/7/cjXzJy7fTx7T KESg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e19si2280256qtw.271.2020.04.10.12.38.58; Fri, 10 Apr 2020 12:39:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726816AbgDJTgp (ORCPT + 99 others); Fri, 10 Apr 2020 15:36:45 -0400 Received: from ex13-edg-ou-001.vmware.com ([208.91.0.189]:55137 "EHLO EX13-EDG-OU-001.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726702AbgDJTgp (ORCPT ); Fri, 10 Apr 2020 15:36:45 -0400 Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX13-EDG-OU-001.vmware.com (10.113.208.155) with Microsoft SMTP Server id 15.0.1156.6; Fri, 10 Apr 2020 12:36:40 -0700 Received: from sc9-mailhost3.vmware.com (unknown [10.166.69.226]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 1626EB2C87; Fri, 10 Apr 2020 15:36:44 -0400 (EDT) From: Matt Helsley To: CC: Josh Poimboeuf , Peter Zijlstra , Julien Thierry , Ingo Molnar , Steven Rostedt , Miroslav Benes , Matt Helsley Subject: [RFC][PATCH 06/36] objtool: Prepare to merge recordmcount Date: Fri, 10 Apr 2020 12:35:29 -0700 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII Received-SPF: None (EX13-EDG-OU-001.vmware.com: mhelsley@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move recordmcount into the objtool directory. We keep this step separate so changes which turn recordmcount into a subcommand of objtool don't get obscured. Signed-off-by: Matt Helsley --- Documentation/trace/ftrace-design.rst | 4 ++-- Documentation/trace/ftrace.rst | 2 +- scripts/.gitignore | 1 - scripts/Makefile | 1 - scripts/Makefile.build | 11 ++++++----- tools/objtool/.gitignore | 1 + tools/objtool/Build | 2 ++ tools/objtool/Makefile | 13 ++++++++++++- {scripts => tools/objtool}/recordmcount.c | 0 {scripts => tools/objtool}/recordmcount.h | 0 {scripts => tools/objtool}/recordmcount.pl | 0 11 files changed, 24 insertions(+), 11 deletions(-) rename {scripts => tools/objtool}/recordmcount.c (100%) rename {scripts => tools/objtool}/recordmcount.h (100%) rename {scripts => tools/objtool}/recordmcount.pl (100%) diff --git a/Documentation/trace/ftrace-design.rst b/Documentation/trace/ftrace-design.rst index a8e22e0db63c..dea8db5e79d0 100644 --- a/Documentation/trace/ftrace-design.rst +++ b/Documentation/trace/ftrace-design.rst @@ -261,7 +261,7 @@ You need very few things to get the syscalls tracing in an arch. HAVE_FTRACE_MCOUNT_RECORD ------------------------- -See scripts/recordmcount.pl for more info. Just fill in the arch-specific +See tools/objtool/recordmcount.pl for more info. Just fill in the arch-specific details for how to locate the addresses of mcount call sites via objdump. This option doesn't make much sense without also implementing dynamic ftrace. @@ -379,7 +379,7 @@ linux/ftrace.h for the functions:: ftrace_make_call() The rec->ip value is the address of the mcount call site that was collected -by the scripts/recordmcount.pl during build time. +by the tools/objtool/recordmcount.pl during build time. The last function is used to do runtime patching of the active tracer. This will be modifying the assembly code at the location of the ftrace_call symbol diff --git a/Documentation/trace/ftrace.rst b/Documentation/trace/ftrace.rst index 3b5614b1d1a5..9adefcc3c7a8 100644 --- a/Documentation/trace/ftrace.rst +++ b/Documentation/trace/ftrace.rst @@ -2685,7 +2685,7 @@ starts of pointing to a simple return. (Enabling FTRACE will include the -pg switch in the compiling of the kernel.) At compile time every C file object is run through the -recordmcount program (located in the scripts directory). This +recordmcount program (located in the tools/objtool directory). This program will parse the ELF headers in the C object to find all the locations in the .text section that call mcount. Starting with gcc version 4.6, the -mfentry has been added for x86, which diff --git a/scripts/.gitignore b/scripts/.gitignore index 0d1c8e217cd7..dafda6d2c306 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -2,7 +2,6 @@ bin2c kallsyms unifdef -recordmcount sorttable asn1_compiler extract-cert diff --git a/scripts/Makefile b/scripts/Makefile index 5e75802b1a44..f0f869364e5a 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -9,7 +9,6 @@ HOST_EXTRACFLAGS += -I$(srctree)/tools/include always-$(CONFIG_BUILD_BIN2C) += bin2c always-$(CONFIG_KALLSYMS) += kallsyms -always-$(BUILD_C_RECORDMCOUNT) += recordmcount always-$(CONFIG_BUILDTIME_TABLE_SORT) += sorttable always-$(CONFIG_ASN1) += asn1_compiler always-$(CONFIG_MODULE_SIG_FORMAT) += sign-file diff --git a/scripts/Makefile.build b/scripts/Makefile.build index a1730d42e5f3..5bc668dbfb61 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -175,18 +175,19 @@ endif # files, including recordmcount. sub_cmd_record_mcount = \ if [ $(@) != "scripts/mod/empty.o" ]; then \ - $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ + $(objtree)/tools/objtool/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ fi; -recordmcount_source := $(srctree)/scripts/recordmcount.c \ - $(srctree)/scripts/recordmcount.h + +recordmcount_source := $(srctree)/tools/objtool/recordmcount.c \ + $(srctree)/tools/objtool/recordmcount.h else -sub_cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ +sub_cmd_record_mcount = perl $(srctree)/tools/objtool/recordmcount.pl "$(ARCH)" \ "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \ "$(if $(CONFIG_64BIT),64,32)" \ "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \ "$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \ "$(if $(part-of-module),1,0)" "$(@)"; -recordmcount_source := $(srctree)/scripts/recordmcount.pl +recordmcount_source := $(srctree)/tools/objtool/recordmcount.pl endif # BUILD_C_RECORDMCOUNT cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \ $(sub_cmd_record_mcount)) diff --git a/tools/objtool/.gitignore b/tools/objtool/.gitignore index 45cefda24c7b..ea441abcd1d3 100644 --- a/tools/objtool/.gitignore +++ b/tools/objtool/.gitignore @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only arch/x86/lib/inat-tables.c objtool +recordmcount fixdep diff --git a/tools/objtool/Build b/tools/objtool/Build index e372cddd86e0..35385b1bf313 100644 --- a/tools/objtool/Build +++ b/tools/objtool/Build @@ -27,3 +27,5 @@ $(OUTPUT)str_error_r.o: ../lib/str_error_r.c FORCE $(OUTPUT)librbtree.o: ../lib/rbtree.c FORCE $(call rule_mkdir) $(call if_changed_dep,cc_o_c) + +recordmcount-y += recordmcount.o diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile index ee08aeff30a1..e9cbf8728e67 100644 --- a/tools/objtool/Makefile +++ b/tools/objtool/Makefile @@ -25,6 +25,12 @@ OBJTOOL_IN := $(OBJTOOL)-in.o LIBELF_FLAGS := $(shell pkg-config libelf --cflags 2>/dev/null) LIBELF_LIBS := $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf) +RECORDMCOUNT := $(OUTPUT)recordmcount +RECORDMCOUNT_IN := $(RECORDMCOUNT)-in.o +ifeq ($(BUILD_C_RECORDMCOUNT),y) +all: $(RECORDMCOUNT) +endif + all: $(OBJTOOL) INCLUDES := -I$(srctree)/tools/include \ @@ -45,16 +51,21 @@ include $(srctree)/tools/build/Makefile.include $(OBJTOOL_IN): fixdep FORCE @$(MAKE) $(build)=objtool +$(RECORDMCOUNT_IN): fixdep FORCE + @$(MAKE) $(build)=recordmcount + $(OBJTOOL): $(LIBSUBCMD) $(OBJTOOL_IN) @$(CONFIG_SHELL) ./sync-check.sh $(QUIET_LINK)$(CC) $(OBJTOOL_IN) $(LDFLAGS) -o $@ +$(RECORDMCOUNT): $(RECORDMCOUNT_IN) + $(QUIET_LINK)$(CC) $(RECORDMCOUNT_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(LIBSUBCMD): fixdep FORCE $(Q)$(MAKE) -C $(SUBCMD_SRCDIR) OUTPUT=$(LIBSUBCMD_OUTPUT) clean: - $(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL) + $(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL) $(RECORDMCOUNT) $(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete $(Q)$(RM) $(OUTPUT)arch/x86/inat-tables.c $(OUTPUT)fixdep diff --git a/scripts/recordmcount.c b/tools/objtool/recordmcount.c similarity index 100% rename from scripts/recordmcount.c rename to tools/objtool/recordmcount.c diff --git a/scripts/recordmcount.h b/tools/objtool/recordmcount.h similarity index 100% rename from scripts/recordmcount.h rename to tools/objtool/recordmcount.h diff --git a/scripts/recordmcount.pl b/tools/objtool/recordmcount.pl similarity index 100% rename from scripts/recordmcount.pl rename to tools/objtool/recordmcount.pl -- 2.20.1