Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1262387

[for-next][PATCH 03/13] recordmcount: arm64: Replace the ignored mcount call into nop

From Steven Rostedt <rostedt@goodmis.org>
Newsgroups linux.kernel
Subject [for-next][PATCH 03/13] recordmcount: arm64: Replace the ignored mcount call into nop
Date 2015-11-04 16:40 +0100
Message-ID <qr8kk-2go-85@gated-at.bofh.it> (permalink)
References <qr8kh-2go-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Li Bin <huawei.libin@huawei.com>

By now, the recordmcount only records the function that in
following sections:
.text/.ref.text/.sched.text/.spinlock.text/.irqentry.text/
.kprobes.text/.text.unlikely

For the function that not in these sections, the call mcount
will be in place and not be replaced when kernel boot up. And
it will bring performance overhead, such as do_mem_abort (in
.exception.text section). This patch make the call mcount to
nop for this case in recordmcount.

Link: http://lkml.kernel.org/r/1446019445-14421-1-git-send-email-huawei.libin@huawei.com
Link: http://lkml.kernel.org/r/1446193864-24593-4-git-send-email-huawei.libin@huawei.com

Cc: <lkp@intel.com>
Cc: <catalin.marinas@arm.com>
Cc: <takahiro.akashi@linaro.org>
Cc: <stable@vger.kernel.org> # 3.18+
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Li Bin <huawei.libin@huawei.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/recordmcount.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index 8cc020bbe859..698768bdc581 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -42,6 +42,7 @@
 
 #ifndef EM_AARCH64
 #define EM_AARCH64	183
+#define R_AARCH64_NONE		0
 #define R_AARCH64_ABS64	257
 #endif
 
@@ -160,6 +161,22 @@ static int make_nop_x86(void *map, size_t const offset)
 	return 0;
 }
 
+static unsigned char ideal_nop4_arm64[4] = {0x1f, 0x20, 0x03, 0xd5};
+static int make_nop_arm64(void *map, size_t const offset)
+{
+	uint32_t *ptr;
+
+	ptr = map + offset;
+	/* bl <_mcount> is 0x94000000 before relocation */
+	if (*ptr != 0x94000000)
+		return -1;
+
+	/* Convert to nop */
+	ulseek(fd_map, offset, SEEK_SET);
+	uwrite(fd_map, ideal_nop, 4);
+	return 0;
+}
+
 /*
  * Get the whole file as a programming convenience in order to avoid
  * malloc+lseek+read+free of many pieces.  If successful, then mmap
@@ -354,7 +371,12 @@ do_file(char const *const fname)
 			 altmcount = "__gnu_mcount_nc";
 			 break;
 	case EM_AARCH64:
-			 reltype = R_AARCH64_ABS64; gpfx = '_'; break;
+			reltype = R_AARCH64_ABS64;
+			make_nop = make_nop_arm64;
+			rel_type_nop = R_AARCH64_NONE;
+			ideal_nop = ideal_nop4_arm64;
+			gpfx = '_';
+			break;
 	case EM_IA_64:	 reltype = R_IA64_IMM64;   gpfx = '_'; break;
 	case EM_METAG:	 reltype = R_METAG_ADDR32;
 			 altmcount = "_mcount_wrapper";
-- 
2.6.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[for-next][PATCH 00/13] tracing: Some more last minute cleanups and fixes for 4.4 Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 13/13] tracing: Put back comma for empty fields in boot string parsing Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 05/13] tracing: Rename max_stack_lock to stack_trace_max_lock Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 12/13] tracing: Apply tracer specific options from kernel command line. Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 09/13] tracing: Allow dumping traces without tracking trace started cpus Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 02/13] recordmcount: Fix endianness handling bug for nop_mcount Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 07/13] ring_buffer: Do no not complete benchmark reader too early Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 06/13] tracing: Remove redundant TP_ARGS redefining Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 08/13] ring_buffer: Fix more races when terminating the producer in the  benchmark Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 10/13] ring_buffer: Remove unneeded smp_wmb() before wakeup of reader  benchmark Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 04/13] tracing: Allow arch-specific stack tracer Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 03/13] recordmcount: arm64: Replace the ignored mcount call into nop Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100
  [for-next][PATCH 01/13] tracepoints: Fix documentation of RCU lockdep checks Steven Rostedt <rostedt@goodmis.org> - 2015-11-04 16:40 +0100

csiph-web