From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Andy Lutomirski <luto@amacapital.net>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 0/5 v2] ftrace/x86_32: Ftrace cleanup and add support for -mfentry
Date: Thu, 16 Mar 2017 13:20:08 -0400 [thread overview]
Message-ID: <20170316172008.086705006@goodmis.org> (raw)
With the issues of gcc screwing around with the mcount stack frame causing
function graph tracer to panic on x86_32, and with Linus saying that we
should start deprecating mcount (at least on x86), I figured that x86_32
needs to support fentry.
First, I renamed mcount_64.S to ftrace_64.S. As we want to get away from
mcount, having the ftrace code in a file called mcount seems rather backwards.
Next I moved the ftrace code out of entry_32.S. It's not in entry_64.S
and it does not belong in entry_32.S.
I noticed that the x86_32 code has the same issue as the x86_64 did
in the past with respect to a stack frame. I fixed that just for the main
ftrace_caller. The ftrace_regs_caller is rather special, and so is
function graph tracing.
I realized the ftrace_regs_caller code was complex due to me aggressively
saving flags, even though I could still do push, lea and mov without
changing them. That made the logic a little nicer.
Finally I added the fentry code.
I tested this with an older compiler (for mcount) with and without
FRAME_POINTER set. I also did it with a new compiler (with fentry), with and
without FRAME_POINTER. I tested function tracing, stack tracing, function_graph
tracing, and kprobes (as that uses the ftrace_regs_caller).
Steven Rostedt (VMware) (5):
x86/ftrace: Rename mcount_64.S to ftrace_64.S
ftrace/x86-32: Move the ftrace specific code out of entry_32.S
ftrace/x86_32: Add stack frame pointer to ftrace_caller
ftrace/x86_32: Clean up ftrace_regs_caller
ftrace/x86-32: Add -mfentry support to x86_32 with DYNAMIC_FTRACE set
----
Makefile | 12 +-
arch/x86/Kconfig | 2 +-
arch/x86/entry/entry_32.S | 168 ------------------
arch/x86/kernel/Makefile | 5 +-
arch/x86/kernel/ftrace_32.S | 250 +++++++++++++++++++++++++++
arch/x86/kernel/{mcount_64.S => ftrace_64.S} | 0
6 files changed, 260 insertions(+), 177 deletions(-)
create mode 100644 arch/x86/kernel/ftrace_32.S
rename arch/x86/kernel/{mcount_64.S => ftrace_64.S} (100%)
Changes from v1:
Removed MCOUNT_FRAME_SIZE macro, as it is not used.
(Masami Hiramatsu)
Fixed vertical alignment of args (Josh Poimboeuf)
s/ndef USING_FRAME_POINTER/def CC_USING_FENTRY/ (Josh Poimboeuf)
Fixed adding $0 into orig_ax and not ax. (Josh Poimboeuf)
Updated some comments.
Here's the diff of v1 to v2:
diff --git a/arch/x86/kernel/ftrace_32.S b/arch/x86/kernel/ftrace_32.S
index 4bf8223..7ed4137 100644
--- a/arch/x86/kernel/ftrace_32.S
+++ b/arch/x86/kernel/ftrace_32.S
@@ -9,7 +9,6 @@
#include <asm/export.h>
#include <asm/ftrace.h>
-
#ifdef CC_USING_FENTRY
# define function_hook __fentry__
EXPORT_SYMBOL(__fentry__)
@@ -24,14 +23,8 @@ EXPORT_SYMBOL(mcount)
#endif
#ifdef USING_FRAME_POINTER
-# ifdef CC_USING_FENTRY
-# define MCOUNT_FRAME_SIZE (4*4) /* bp,ip and parent's */
-# else
-# define MCOUNT_FRAME_SIZE 4 /* just the bp */
-# endif
# define MCOUNT_FRAME 1 /* using frame = true */
#else
-# define MCOUNT_FRAME_SIZE 0 /* no stack frame */
# define MCOUNT_FRAME 0 /* using frame = false */
#endif
@@ -52,14 +45,14 @@ ENTRY(ftrace_caller)
* parent-ip, function-ip. We need to add a frame with
* parent-ip followed by ebp.
*/
- pushl 4(%esp) /* parent ip */
- pushl %ebp
- movl %esp, %ebp
- pushl 2*4(%esp) /* function ip */
+ pushl 4(%esp) /* parent ip */
+ pushl %ebp
+ movl %esp, %ebp
+ pushl 2*4(%esp) /* function ip */
# endif
/* For mcount, the function ip is directly above */
- pushl %ebp
- movl %esp, %ebp
+ pushl %ebp
+ movl %esp, %ebp
#endif
pushl %eax
pushl %ecx
@@ -131,8 +124,8 @@ ENTRY(ftrace_regs_caller)
/* move flags into the location of where the return ip was */
movl 5*4(%esp), %eax
- movl $0, (%esp) /* Load 0 into orig_ax */
- movl %eax, 8*4(%esp)
+ movl $0, 5*4(%esp) /* Load 0 into orig_ax */
+ movl %eax, 8*4(%esp) /* Load flags in return ip */
pushl %ebp
pushl %edi
@@ -140,7 +133,7 @@ ENTRY(ftrace_regs_caller)
pushl %edx
pushl %ecx
pushl %ebx
-#ifndef USING_FRAME_POINTER
+#ifdef CC_USING_FENTRY
/* Load 4 off of the parent ip addr into ebp */
lea 14*4(%esp), %ebp
#endif
@@ -160,7 +153,7 @@ GLOBAL(ftrace_regs_call)
movl 14*4(%esp), %eax
movl %eax, 13*4(%esp)
- /* Move ip back to its original location */
+ /* Move return ip back to its original location */
movl 12*4(%esp), %eax
movl %eax, 14*4(%esp)
next reply other threads:[~2017-03-16 17:22 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-16 17:20 Steven Rostedt [this message]
2017-03-16 17:20 ` [PATCH 1/5 v2] x86/ftrace: Rename mcount_64.S to ftrace_64.S Steven Rostedt
2017-03-16 17:20 ` [PATCH 2/5 v2] ftrace/x86-32: Move the ftrace specific code out of entry_32.S Steven Rostedt
2017-03-17 13:21 ` Steven Rostedt
2017-03-16 17:20 ` [PATCH 3/5 v2] ftrace/x86_32: Add stack frame pointer to ftrace_caller Steven Rostedt
2017-03-16 17:20 ` [PATCH 4/5 v2] ftrace/x86_32: Clean up ftrace_regs_caller Steven Rostedt
2017-03-16 17:40 ` Linus Torvalds
2017-03-16 17:55 ` Steven Rostedt
2017-03-16 18:09 ` [PATCH 4/5 v3] " Steven Rostedt
2017-03-16 18:19 ` Linus Torvalds
2017-03-16 19:19 ` Steven Rostedt
2017-03-16 19:24 ` Steven Rostedt
2017-03-16 19:30 ` Linus Torvalds
2017-03-16 19:50 ` Steven Rostedt
2017-03-16 19:28 ` Linus Torvalds
2017-03-16 19:49 ` Steven Rostedt
2017-03-16 20:14 ` [PATCH 4/5 v3.1] " Steven Rostedt
2017-03-16 17:20 ` [PATCH 5/5 v2] ftrace/x86-32: Add -mfentry support to x86_32 with DYNAMIC_FTRACE set Steven Rostedt
2017-03-16 20:40 ` [PATCH 5/5 v3] " Steven Rostedt
2017-03-16 21:00 ` Josh Poimboeuf
2017-03-16 21:25 ` Steven Rostedt
2017-03-17 10:38 ` Masami Hiramatsu
2017-03-23 14:33 [PATCH 0/6 v5] [GIT PULL] ftrace/x86: Ftrace cleanup and add support for -mfentry on x86_32 Steven Rostedt
2017-03-23 14:33 ` [PATCH 1/6 v5] ftrace/x86_64: Rename mcount_64.S to ftrace_64.S Steven Rostedt
2017-03-24 9:19 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
2017-03-23 14:33 ` [PATCH 2/6 v5] ftrace/x86_32: Move the ftrace specific code out of entry_32.S Steven Rostedt
2017-03-23 18:19 ` Thomas Gleixner
2017-03-23 19:03 ` Steven Rostedt
2017-03-24 9:20 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
2017-03-23 14:33 ` [PATCH 3/6 v5] ftrace/x86_32: Add stack frame pointer to ftrace_caller Steven Rostedt
2017-03-24 9:20 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
2017-03-23 14:33 ` [PATCH 4/6 v5] ftrace/x86_32: Clean up ftrace_regs_caller Steven Rostedt
2017-03-24 9:21 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
2017-03-23 14:33 ` [PATCH 5/6 v5] ftrace/x86_32: Add -mfentry support to x86_32 with DYNAMIC_FTRACE set Steven Rostedt
2017-03-24 9:21 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
2017-03-23 14:33 ` [PATCH 6/6 v5] ftrace/x86: Use Makefile logic instead of #ifdef for compiling ftrace_*.o Steven Rostedt
2017-03-24 9:22 ` [tip:x86/asm] x86/ftrace: " tip-bot for Steven Rostedt (VMware)
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=20170316172008.086705006@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome