From: Stephen Boyd <sboyd@codeaurora.org>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
"Nicolas Pitre" <nico@fluxnic.net>,
"Arnd Bergmann" <arnd@arndb.de>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Måns Rullgård" <mans@mansr.com>
Subject: [RFC/PATCH 1/3] scripts: Allow recordmcount to be used without tracing enabled
Date: Fri, 20 Nov 2015 17:23:15 -0800 [thread overview]
Message-ID: <1448068997-26631-2-git-send-email-sboyd@codeaurora.org> (raw)
In-Reply-To: <1448068997-26631-1-git-send-email-sboyd@codeaurora.org>
In the next patch we're going to modify recordmcount to also
record locations of calls to __aeabi_{u}idiv(). Lay the
groundwork for this by adding a flag to recordmcount that
indicates if we're expected to find calls to mcount or not.
Cc: Nicolas Pitre <nico@fluxnic.net>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Måns Rullgård <mans@mansr.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
kernel/trace/Kconfig | 4 ++++
scripts/Makefile.build | 15 +++++----------
scripts/recordmcount.c | 10 +++++++---
scripts/recordmcount.h | 2 +-
scripts/recordmcount.pl | 11 ++++++++---
5 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 8d6363f42169..578b666ed7d9 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -57,6 +57,10 @@ config HAVE_C_RECORDMCOUNT
help
C version of recordmcount available?
+config RUN_RECORDMCOUNT
+ def_bool y
+ depends on DYNAMIC_FTRACE && HAVE_FTRACE_MCOUNT_RECORD
+
config TRACER_MAX_TRACE
bool
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 01df30af4d4a..22f2eb10d434 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -210,7 +210,7 @@ cmd_modversions = \
fi;
endif
-ifdef CONFIG_FTRACE_MCOUNT_RECORD
+ifdef CONFIG_RUN_RECORDMCOUNT
ifdef BUILD_C_RECORDMCOUNT
ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
RECORDMCOUNT_FLAGS = -w
@@ -219,26 +219,21 @@ endif
# The empty.o file is created in the make process in order to determine
# the target endianness and word size. It is made before all other C
# files, including recordmcount.
-sub_cmd_record_mcount = \
+cmd_record_mcount = \
if [ $(@) != "scripts/mod/empty.o" ]; then \
- $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \
+ $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $(if $(findstring $(CC_FLAGS_FTRACE),$(_c_flags)),-t,) "$(@)"; \
fi;
recordmcount_source := $(srctree)/scripts/recordmcount.c \
$(srctree)/scripts/recordmcount.h
else
-sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
+cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
"$(if $(CONFIG_64BIT),64,32)" \
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
- "$(if $(part-of-module),1,0)" "$(@)";
+ "$(if $(part-of-module),1,0)" "$(if $(findstring $(CC_FLAGS_FTRACE),$(_c_flags)),1,0)" "$(@)";
recordmcount_source := $(srctree)/scripts/recordmcount.pl
endif
-cmd_record_mcount = \
- if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" = \
- "$(CC_FLAGS_FTRACE)" ]; then \
- $(sub_cmd_record_mcount) \
- fi;
endif
define rule_cc_o_c
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index 698768bdc581..b6b4a5df647a 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -54,6 +54,7 @@ static struct stat sb; /* Remember .st_size, etc. */
static jmp_buf jmpenv; /* setjmp/longjmp per-file error escape */
static const char *altmcount; /* alternate mcount symbol name */
static int warn_on_notrace_sect; /* warn when section has mcount not being recorded */
+static int trace_mcount; /* Record mcount callers */
/* setjmp() return values */
enum {
@@ -453,19 +454,22 @@ main(int argc, char *argv[])
int c;
int i;
- while ((c = getopt(argc, argv, "w")) >= 0) {
+ while ((c = getopt(argc, argv, "wt")) >= 0) {
switch (c) {
case 'w':
warn_on_notrace_sect = 1;
break;
+ case 't':
+ trace_mcount = 1;
+ break;
default:
- fprintf(stderr, "usage: recordmcount [-w] file.o...\n");
+ fprintf(stderr, "usage: recordmcount [-wt] file.o...\n");
return 0;
}
}
if ((argc - optind) < 1) {
- fprintf(stderr, "usage: recordmcount [-w] file.o...\n");
+ fprintf(stderr, "usage: recordmcount [-wt] file.o...\n");
return 0;
}
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index b9897e2be404..6e196dba748d 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -323,7 +323,7 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
get_sym_str_and_relp(relhdr, ehdr, &sym0, &str0, &relp);
for (t = nrel; t; --t) {
- if (!mcountsym)
+ if (trace_mcount && !mcountsym)
mcountsym = get_mcountsym(sym0, relp, str0);
if (mcountsym == Elf_r_sym(relp) && !is_fake_mcount(relp)) {
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index 826470d7f000..cff3040ddbdc 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -113,20 +113,25 @@ $P =~ s@.*/@@g;
my $V = '0.1';
-if ($#ARGV != 11) {
- print "usage: $P arch endian bits objdump objcopy cc ld nm rm mv is_module inputfile\n";
+if ($#ARGV != 12) {
+ print "usage: $P arch endian bits objdump objcopy cc ld nm rm mv is_module is_traced inputfile\n";
print "version: $V\n";
exit(1);
}
my ($arch, $endian, $bits, $objdump, $objcopy, $cc,
- $ld, $nm, $rm, $mv, $is_module, $inputfile) = @ARGV;
+ $ld, $nm, $rm, $mv, $is_module, $is_traced, $inputfile) = @ARGV;
# This file refers to mcount and shouldn't be ftraced, so lets' ignore it
if ($inputfile =~ m,kernel/trace/ftrace\.o$,) {
exit(0);
}
+# We only trace mcount calls
+if ($is_traced eq "0") {
+ exit(0);
+}
+
# Acceptable sections to record.
my %text_sections = (
".text" => 1,
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
WARNING: multiple messages have this Message-ID (diff)
From: sboyd@codeaurora.org (Stephen Boyd)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC/PATCH 1/3] scripts: Allow recordmcount to be used without tracing enabled
Date: Fri, 20 Nov 2015 17:23:15 -0800 [thread overview]
Message-ID: <1448068997-26631-2-git-send-email-sboyd@codeaurora.org> (raw)
In-Reply-To: <1448068997-26631-1-git-send-email-sboyd@codeaurora.org>
In the next patch we're going to modify recordmcount to also
record locations of calls to __aeabi_{u}idiv(). Lay the
groundwork for this by adding a flag to recordmcount that
indicates if we're expected to find calls to mcount or not.
Cc: Nicolas Pitre <nico@fluxnic.net>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: M?ns Rullg?rd <mans@mansr.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
kernel/trace/Kconfig | 4 ++++
scripts/Makefile.build | 15 +++++----------
scripts/recordmcount.c | 10 +++++++---
scripts/recordmcount.h | 2 +-
scripts/recordmcount.pl | 11 ++++++++---
5 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 8d6363f42169..578b666ed7d9 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -57,6 +57,10 @@ config HAVE_C_RECORDMCOUNT
help
C version of recordmcount available?
+config RUN_RECORDMCOUNT
+ def_bool y
+ depends on DYNAMIC_FTRACE && HAVE_FTRACE_MCOUNT_RECORD
+
config TRACER_MAX_TRACE
bool
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 01df30af4d4a..22f2eb10d434 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -210,7 +210,7 @@ cmd_modversions = \
fi;
endif
-ifdef CONFIG_FTRACE_MCOUNT_RECORD
+ifdef CONFIG_RUN_RECORDMCOUNT
ifdef BUILD_C_RECORDMCOUNT
ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
RECORDMCOUNT_FLAGS = -w
@@ -219,26 +219,21 @@ endif
# The empty.o file is created in the make process in order to determine
# the target endianness and word size. It is made before all other C
# files, including recordmcount.
-sub_cmd_record_mcount = \
+cmd_record_mcount = \
if [ $(@) != "scripts/mod/empty.o" ]; then \
- $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \
+ $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $(if $(findstring $(CC_FLAGS_FTRACE),$(_c_flags)),-t,) "$(@)"; \
fi;
recordmcount_source := $(srctree)/scripts/recordmcount.c \
$(srctree)/scripts/recordmcount.h
else
-sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
+cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
"$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
"$(if $(CONFIG_64BIT),64,32)" \
"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
"$(LD)" "$(NM)" "$(RM)" "$(MV)" \
- "$(if $(part-of-module),1,0)" "$(@)";
+ "$(if $(part-of-module),1,0)" "$(if $(findstring $(CC_FLAGS_FTRACE),$(_c_flags)),1,0)" "$(@)";
recordmcount_source := $(srctree)/scripts/recordmcount.pl
endif
-cmd_record_mcount = \
- if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" = \
- "$(CC_FLAGS_FTRACE)" ]; then \
- $(sub_cmd_record_mcount) \
- fi;
endif
define rule_cc_o_c
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index 698768bdc581..b6b4a5df647a 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -54,6 +54,7 @@ static struct stat sb; /* Remember .st_size, etc. */
static jmp_buf jmpenv; /* setjmp/longjmp per-file error escape */
static const char *altmcount; /* alternate mcount symbol name */
static int warn_on_notrace_sect; /* warn when section has mcount not being recorded */
+static int trace_mcount; /* Record mcount callers */
/* setjmp() return values */
enum {
@@ -453,19 +454,22 @@ main(int argc, char *argv[])
int c;
int i;
- while ((c = getopt(argc, argv, "w")) >= 0) {
+ while ((c = getopt(argc, argv, "wt")) >= 0) {
switch (c) {
case 'w':
warn_on_notrace_sect = 1;
break;
+ case 't':
+ trace_mcount = 1;
+ break;
default:
- fprintf(stderr, "usage: recordmcount [-w] file.o...\n");
+ fprintf(stderr, "usage: recordmcount [-wt] file.o...\n");
return 0;
}
}
if ((argc - optind) < 1) {
- fprintf(stderr, "usage: recordmcount [-w] file.o...\n");
+ fprintf(stderr, "usage: recordmcount [-wt] file.o...\n");
return 0;
}
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index b9897e2be404..6e196dba748d 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -323,7 +323,7 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
get_sym_str_and_relp(relhdr, ehdr, &sym0, &str0, &relp);
for (t = nrel; t; --t) {
- if (!mcountsym)
+ if (trace_mcount && !mcountsym)
mcountsym = get_mcountsym(sym0, relp, str0);
if (mcountsym == Elf_r_sym(relp) && !is_fake_mcount(relp)) {
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index 826470d7f000..cff3040ddbdc 100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
@@ -113,20 +113,25 @@ $P =~ s@.*/@@g;
my $V = '0.1';
-if ($#ARGV != 11) {
- print "usage: $P arch endian bits objdump objcopy cc ld nm rm mv is_module inputfile\n";
+if ($#ARGV != 12) {
+ print "usage: $P arch endian bits objdump objcopy cc ld nm rm mv is_module is_traced inputfile\n";
print "version: $V\n";
exit(1);
}
my ($arch, $endian, $bits, $objdump, $objcopy, $cc,
- $ld, $nm, $rm, $mv, $is_module, $inputfile) = @ARGV;
+ $ld, $nm, $rm, $mv, $is_module, $is_traced, $inputfile) = @ARGV;
# This file refers to mcount and shouldn't be ftraced, so lets' ignore it
if ($inputfile =~ m,kernel/trace/ftrace\.o$,) {
exit(0);
}
+# We only trace mcount calls
+if ($is_traced eq "0") {
+ exit(0);
+}
+
# Acceptable sections to record.
my %text_sections = (
".text" => 1,
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2015-11-21 1:23 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-21 1:23 [RFC/PATCH 0/3] ARM: Use udiv/sdiv for __aeabi_{u}idiv library functions Stephen Boyd
2015-11-21 1:23 ` Stephen Boyd
2015-11-21 1:23 ` Stephen Boyd [this message]
2015-11-21 1:23 ` [RFC/PATCH 1/3] scripts: Allow recordmcount to be used without tracing enabled Stephen Boyd
2015-11-21 1:23 ` [RFC/PATCH 2/3] recordmcount: Record locations of __aeabi_{u}idiv() calls on ARM Stephen Boyd
2015-11-21 1:23 ` Stephen Boyd
2015-11-21 10:13 ` Russell King - ARM Linux
2015-11-21 10:13 ` Russell King - ARM Linux
2015-11-23 20:53 ` Stephen Boyd
2015-11-23 20:53 ` Stephen Boyd
2015-11-23 20:58 ` Steven Rostedt
2015-11-23 20:58 ` Steven Rostedt
2015-11-23 21:03 ` Russell King - ARM Linux
2015-11-23 21:03 ` Russell King - ARM Linux
2015-11-23 21:16 ` Stephen Boyd
2015-11-23 21:16 ` Stephen Boyd
2015-11-23 21:33 ` Russell King - ARM Linux
2015-11-23 21:33 ` Russell King - ARM Linux
2015-11-24 1:04 ` Stephen Boyd
2015-11-24 1:04 ` Stephen Boyd
2015-11-21 1:23 ` [RFC/PATCH 3/3] ARM: Replace calls to __aeabi_{u}idiv with udiv/sdiv instructions Stephen Boyd
2015-11-21 1:23 ` Stephen Boyd
2015-11-21 11:50 ` Måns Rullgård
2015-11-21 11:50 ` Måns Rullgård
2015-11-23 20:49 ` Stephen Boyd
2015-11-23 20:49 ` Stephen Boyd
2015-11-23 20:54 ` Måns Rullgård
2015-11-23 20:54 ` Måns Rullgård
2015-11-23 21:16 ` Stephen Boyd
2015-11-23 21:16 ` Stephen Boyd
2015-11-21 20:39 ` [RFC/PATCH 0/3] ARM: Use udiv/sdiv for __aeabi_{u}idiv library functions Arnd Bergmann
2015-11-21 20:39 ` Arnd Bergmann
2015-11-21 20:45 ` Måns Rullgård
2015-11-21 20:45 ` Måns Rullgård
2015-11-21 21:00 ` Arnd Bergmann
2015-11-21 21:00 ` Arnd Bergmann
2015-11-21 22:11 ` Måns Rullgård
2015-11-21 22:11 ` Måns Rullgård
2015-11-21 23:14 ` Arnd Bergmann
2015-11-21 23:14 ` Arnd Bergmann
2015-11-21 23:21 ` Arnd Bergmann
2015-11-21 23:21 ` Arnd Bergmann
2015-11-22 13:29 ` Peter Maydell
2015-11-22 13:29 ` Peter Maydell
2015-11-22 19:25 ` Arnd Bergmann
2015-11-22 19:25 ` Arnd Bergmann
2015-11-22 19:30 ` Måns Rullgård
2015-11-22 19:30 ` Måns Rullgård
2015-11-22 19:30 ` Måns Rullgård
2015-11-22 19:47 ` Russell King - ARM Linux
2015-11-22 19:47 ` Russell King - ARM Linux
2015-11-22 19:58 ` Arnd Bergmann
2015-11-22 19:58 ` Arnd Bergmann
2015-11-22 20:03 ` Russell King - ARM Linux
2015-11-22 20:03 ` Russell King - ARM Linux
2015-11-22 20:37 ` Arnd Bergmann
2015-11-22 20:37 ` Arnd Bergmann
2015-11-22 20:39 ` Måns Rullgård
2015-11-22 20:39 ` Måns Rullgård
2015-11-22 20:39 ` Måns Rullgård
2015-11-22 21:18 ` Arnd Bergmann
2015-11-22 21:18 ` Arnd Bergmann
2015-11-23 2:36 ` Nicolas Pitre
2015-11-23 2:36 ` Nicolas Pitre
2015-11-23 8:15 ` Arnd Bergmann
2015-11-23 8:15 ` Arnd Bergmann
2015-11-23 14:14 ` Christopher Covington
2015-11-23 14:14 ` Christopher Covington
2015-11-23 15:32 ` Arnd Bergmann
2015-11-23 15:32 ` Arnd Bergmann
2015-11-23 20:38 ` Stephen Boyd
2015-11-23 20:38 ` Stephen Boyd
2015-11-23 21:19 ` Arnd Bergmann
2015-11-23 21:19 ` Arnd Bergmann
2015-11-23 21:32 ` Stephen Boyd
2015-11-23 21:32 ` Stephen Boyd
2015-11-23 21:57 ` Arnd Bergmann
2015-11-23 21:57 ` Arnd Bergmann
2015-11-23 23:13 ` Stephen Boyd
2015-11-23 23:13 ` Stephen Boyd
2015-11-24 10:17 ` Arnd Bergmann
2015-11-24 10:17 ` Arnd Bergmann
2015-11-24 12:15 ` Måns Rullgård
2015-11-24 12:15 ` Måns Rullgård
2015-11-24 12:15 ` Måns Rullgård
2015-11-24 13:45 ` Arnd Bergmann
2015-11-24 13:45 ` Arnd Bergmann
2015-11-25 1:51 ` Stephen Boyd
2015-11-25 1:51 ` Stephen Boyd
2015-11-25 7:21 ` Arnd Bergmann
2015-11-25 7:21 ` Arnd Bergmann
2015-11-24 0:13 ` Stephen Boyd
2015-11-24 0:13 ` Stephen Boyd
2015-11-24 8:53 ` Stephen Boyd
2015-11-24 8:53 ` Stephen Boyd
2015-11-24 10:38 ` Arnd Bergmann
2015-11-24 10:38 ` Arnd Bergmann
2015-11-24 10:42 ` Russell King - ARM Linux
2015-11-24 10:42 ` Russell King - ARM Linux
2015-11-24 10:42 ` Russell King - ARM Linux
2015-11-24 12:10 ` Måns Rullgård
2015-11-24 12:10 ` Måns Rullgård
2015-11-24 12:10 ` Måns Rullgård
2015-11-24 12:23 ` Russell King - ARM Linux
2015-11-24 12:23 ` Russell King - ARM Linux
2015-11-24 12:29 ` Måns Rullgård
2015-11-24 12:29 ` Måns Rullgård
2015-11-24 12:29 ` Måns Rullgård
2015-11-24 14:00 ` Russell King - ARM Linux
2015-11-24 14:00 ` Russell King - ARM Linux
2015-11-24 14:03 ` Måns Rullgård
2015-11-24 14:03 ` Måns Rullgård
2015-11-24 14:03 ` Måns Rullgård
2015-11-24 10:39 ` Russell King - ARM Linux
2015-11-24 10:39 ` Russell King - ARM Linux
2015-11-24 20:07 ` Stephen Boyd
2015-11-24 20:07 ` Stephen Boyd
2015-11-24 20:35 ` Russell King - ARM Linux
2015-11-24 20:35 ` Russell King - ARM Linux
2015-11-24 21:11 ` Arnd Bergmann
2015-11-24 21:11 ` Arnd Bergmann
2016-01-13 1:51 ` Stephen Boyd
2016-01-13 1:51 ` Stephen Boyd
2015-11-24 10:37 ` Russell King - ARM Linux
2015-11-24 10:37 ` Russell King - ARM Linux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1448068997-26631-2-git-send-email-sboyd@codeaurora.org \
--to=sboyd@codeaurora.org \
--cc=arnd@arndb.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mans@mansr.com \
--cc=nico@fluxnic.net \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.