Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: Wu Zhangjin <wuzhangjin@gmail.com>
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org, rostedt@goodmis.org
Subject: Re: [RFC 2/2] MIPS: tracing/ftrace: Fixes mcount_regex for modules
Date: Fri, 22 Oct 2010 14:10:09 -0700	[thread overview]
Message-ID: <4CC1FDB1.8050404@caviumnetworks.com> (raw)
In-Reply-To: <485f5af61fae72dc9c1f0e31b1b5f1f57a5e7ed8.1287779153.git.wuzhangjin@gmail.com>

On 10/22/2010 01:58 PM, Wu Zhangjin wrote:
> From: Wu Zhangjin<wuzhangjin@gmail.com>
>
> In some situations(with related kernel config and gcc options), the
> modules may have the same address space as the core kernel space, so
> mcount_regex for modules should also match R_MIPS_26.
>

I think Steve is rewriting this bit to be a pure C program.  Is this 
file even used anymore?  If so for how long?

David Daney

> Signed-off-by: Wu Zhangjin<wuzhangjin@gmail.com>
> ---
>   scripts/recordmcount.pl |   46 +++++++++++++++++++++++++++++-----------------
>   1 files changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
> index e67f054..e9c1a0f 100755
> --- a/scripts/recordmcount.pl
> +++ b/scripts/recordmcount.pl
> @@ -299,14 +299,33 @@ if ($arch eq "x86_64") {
>       $cc .= " -m64";
>       $objcopy .= " -O elf64-sparc";
>   } elsif ($arch eq "mips") {
> -    # To enable module support, we need to enable the -mlong-calls option
> -    # of gcc for module, after using this option, we can not get the real
> -    # offset of the calling to _mcount, but the offset of the lui
> -    # instruction or the addiu one. herein, we record the address of the
> -    # first one, and then we can replace this instruction by a branch
> -    # instruction to jump over the profiling function to filter the
> -    # indicated functions, or swith back to the lui instruction to trace
> -    # them, which means dynamic tracing.
> +    #<For kernel>
> +    # To disable tracing, just replace "jal _mcount" with nop;
> +    # to enable tracing, replace back. so, the offset 14 is
> +    # needed to be recorded.
> +    #
> +    #     10:   03e0082d        move    at,ra
> +    #     14:   0c000000        jal     0
> +    #                    14: R_MIPS_26   _mcount
> +    #                    14: R_MIPS_NONE *ABS*
> +    #                    14: R_MIPS_NONE *ABS*
> +    #     18:   00020021        nop
> +    #
> +    #<For module>
> +    #
> +    # If no long call(-mlong-calls), the same to kernel.
> +    #
> +    # If the module space differs from the kernel space, long
> +    # call is needed, as a result, the address of _mcount is
> +    # needed to be recorded in a register and then jump from
> +    # module space to kernel space via "jalr<register>". To
> +    # disable tracing, "jalr<register>" can be replaced by
> +    # nop; to enable tracing, replace it back. Since the
> +    # offset of "jalr<register>" is not easy to be matched,
> +    # the offset of the 1st _mcount below is recorded and to
> +    # disable tracing, "lui v1, 0x0" is substituted with "b
> +    # label", which jumps over "jalr<register>"; to enable
> +    # tracing, replace it back.
>       #
>       #       c:	3c030000 	lui	v1,0x0
>       #			c: R_MIPS_HI16	_mcount
> @@ -318,19 +337,12 @@ if ($arch eq "x86_64") {
>       #			10: R_MIPS_NONE	*ABS*
>       #      14:	03e0082d 	move	at,ra
>       #      18:	0060f809 	jalr	v1
> +    #   label:
>       #
> -    # for the kernel:
> -    #
> -    #     10:   03e0082d        move    at,ra
> -    #	  14:   0c000000        jal     0<loongson_halt>
> -    #                    14: R_MIPS_26   _mcount
> -    #                    14: R_MIPS_NONE *ABS*
> -    #                    14: R_MIPS_NONE *ABS*
> -    #	 18:   00020021        nop
>       if ($is_module eq "0") {
>   	    $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_26\\s+_mcount\$";
>       } else {
> -	    $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_HI16\\s+_mcount\$";
> +	    $mcount_regex = "^\\s*([0-9a-fA-F]+): R_MIPS_(HI16|26)\\s+_mcount\$";
>       }
>       $objdump .= " -Melf-trad".$endian."mips ";
>

  reply	other threads:[~2010-10-22 21:10 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-22 20:58 [RFC 0/2] Fixes the modules support of dynamic function tracer for MIPS Wu Zhangjin
2010-10-22 20:58 ` [RFC 1/2] MIPS: tracing/ftrace: Replace in_module() with a generic in_kernel_space() Wu Zhangjin
2010-10-22 21:31   ` David Daney
2010-10-23  5:51     ` wu zhangjin
2010-10-27 11:11   ` wu zhangjin
2010-10-22 20:58 ` [RFC 2/2] MIPS: tracing/ftrace: Fixes mcount_regex for modules Wu Zhangjin
2010-10-22 21:10   ` David Daney [this message]
2010-10-22 21:31     ` Steven Rostedt
2010-10-23  6:03       ` wu zhangjin

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=4CC1FDB1.8050404@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=linux-mips@linux-mips.org \
    --cc=ralf@linux-mips.org \
    --cc=rostedt@goodmis.org \
    --cc=wuzhangjin@gmail.com \
    /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