From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 02/10] ARM: ftrace: document mcount formats
Date: Sat, 13 Feb 2010 21:37:48 +0100 [thread overview]
Message-ID: <20100213203748.GC16528@pengutronix.de> (raw)
In-Reply-To: <1266090518-31120-3-git-send-email-rabin@rab.in>
Hello,
On Sun, Feb 14, 2010 at 01:18:30AM +0530, Rabin Vincent wrote:
> Add a comment describing the mcount variants and how the callsites look
> like.
>
> Signed-off-by: Rabin Vincent <rabin@rab.in>
> ---
> arch/arm/kernel/entry-common.S | 32 ++++++++++++++++++++++++++++++++
> 1 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> index 0b042bd..d412d7c 100644
> --- a/arch/arm/kernel/entry-common.S
> +++ b/arch/arm/kernel/entry-common.S
> @@ -92,6 +92,38 @@ ENDPROC(ret_from_fork)
> #define CALL(x) .long x
>
> #ifdef CONFIG_FUNCTION_TRACER
> +/*
> + * When compiling with -pg, gcc inserts a call to the mcount routine at the
> + * start of every function. In mcount, apart from the function's address (in
> + * lr), we need to get hold of the function's caller's address.
> + *
> + * Older GCCs (pre-4.4) inserted a call to a routine called mcount like this:
> + *
> + * bl mcount
> + *
> + * These versions have the limitation that in order for the mcount routine to
> + * be able to determine the function's caller's address, an APCS-style frame
> + * pointer (which is set up with something like the code below) is required.
> + *
> + * mov ip, sp
> + * push {fp, ip, lr, pc}
> + * sub fp, ip, #4
> + *
> + * With EABI, these frame pointers are not available unless -mapcs-frame is
> + * specified, and if building as Thumb-2, not even then.
> + *
> + * Newer GCCs (4.4+) solve this problem by introducing a new version of mcount,
> + * with call sites like:
> + *
> + * push {lr}
> + * bl __gnu_mcount_nc
> + *
> + * With these compilers, frame pointers are not necessary.
> + *
> + * With both the mcount types, we need to restore the original lr before
> + * returning. In the __gnu_mcount_nc, version we're allowed to clobber ip.
> + * No other registers should be clobbered.
> + */
Very nice.
Maybe make the last two sentences:
In the __gnu_mcount_nc case the ip register is clobbered which is OK as
the calling convention for ARM allow clobbering this value for
subroutines and it doesn't contain parameters.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2010-02-13 20:37 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-13 19:48 [PATCH 00/10] ARM: ftrace: cleanups, Thumb-2, and dynamic ftrace Rabin Vincent
2010-02-13 19:48 ` [PATCH 01/10] ARM: ftrace: clean up mcount assembly indentation Rabin Vincent
2010-02-13 20:18 ` Uwe Kleine-König
2010-02-22 18:36 ` Frederic Weisbecker
2010-02-13 19:48 ` [PATCH 02/10] ARM: ftrace: document mcount formats Rabin Vincent
2010-02-13 20:37 ` Uwe Kleine-König [this message]
2010-02-22 18:06 ` Rabin Vincent
2010-02-22 19:20 ` Uwe Kleine-König
2010-02-23 19:42 ` Rabin Vincent
2010-02-23 20:27 ` Uwe Kleine-König
2010-02-22 18:41 ` Frederic Weisbecker
2010-02-13 19:48 ` [PATCH 03/10] ftrace: allow building without frame pointers Rabin Vincent
2010-02-22 18:36 ` Frederic Weisbecker
2010-02-23 13:44 ` Steven Rostedt
2010-02-13 19:48 ` [PATCH 04/10] ARM: " Rabin Vincent
2010-02-22 19:05 ` Frederic Weisbecker
2010-02-23 13:18 ` Steven Rostedt
2010-02-23 17:11 ` Frederic Weisbecker
2010-02-23 17:58 ` Rabin Vincent
2010-02-23 18:03 ` Steven Rostedt
2010-02-23 18:41 ` Rabin Vincent
2010-02-23 13:47 ` Steven Rostedt
2010-02-13 19:48 ` [PATCH 05/10] ARM: ftrace: add ENDPROC annotations Rabin Vincent
2010-02-13 22:54 ` Catalin Marinas
2010-02-13 19:48 ` [PATCH 06/10] ARM: ftrace: add Thumb-2 support Rabin Vincent
2010-02-13 23:27 ` Catalin Marinas
2010-02-14 16:38 ` Rabin Vincent
2010-02-13 19:48 ` [PATCH 07/10] ftrace: pass KBUILD_CFLAGS to record_mcount.pl Rabin Vincent
2010-02-23 13:30 ` Steven Rostedt
2010-02-23 18:23 ` Rabin Vincent
2010-02-23 18:37 ` Steven Rostedt
2010-02-13 19:48 ` [PATCH 08/10] ARM: ftrace: fix and update dynamic ftrace Rabin Vincent
2010-02-14 11:08 ` Uwe Kleine-König
2010-02-14 15:53 ` Rabin Vincent
2010-02-13 19:48 ` [PATCH 09/10] ARM: ftrace: add Thumb-2 support to " Rabin Vincent
2010-02-23 13:35 ` Steven Rostedt
2010-02-23 17:10 ` Rabin Vincent
2010-02-13 19:48 ` [PATCH 10/10] ARM: ftrace: enable " Rabin Vincent
2010-02-22 18:16 ` [PATCH 00/10] ARM: ftrace: cleanups, Thumb-2, and " Rabin Vincent
-- strict thread matches above, loose matches on Subject: below --
2010-03-13 6:49 [PATCH 00/10] ARM: ftrace: cleanups, Thumb-2, and dynamic ftrace (v2) Rabin Vincent
2010-03-13 6:49 ` [PATCH 02/10] ARM: ftrace: document mcount formats Rabin Vincent
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=20100213203748.GC16528@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).