From: Alan Kao <alankao@andestech.com>
To: Steven Rostedt <rostedt@goodmis.org>,
Palmer Dabbelt <palmer@sifive.com>, Albert Ou <albert@sifive.com>,
<sw-dev@groups.riscv.org>, <linux-kernel@vger.kernel.org>
Cc: <greentime@andestech.com>, <zong@andestech.com>
Subject: ftrace: Proposal for an Alternative RecordMcount framework
Date: Tue, 27 Feb 2018 18:04:26 +0800 [thread overview]
Message-ID: <20180227100425.GB20904@andestech.com> (raw)
Hi Steven,
Current recordmcount framework collects the mcount call-sites by grep'ing
the relocation info in each *.o file right after it is compiled, and then
puts them into the __mcount_loc_start array. This works fine in many
architectures, but as mentioned in this riscv/ftrace patch[1], aggressive
relaxing optimizations corrupt the collected offsets, resulting in panics
due to wrong call-site patching in runtime.
Meanwhile, some architectures, such as RISC-V and the on-going nds32, highly
rely on linker relaxation as a link-time optimization to reduce code size
and improve performance. It would be very undesirable to sacrifice them for
ftrace only. But, why can't we collect the call-sites after all of them
are fixed?
We propose an alternative framework, for architectures that cannot
properly record call-sites because of relaxing. Here is the rough
procedure:
1. During the final linking stages, do "objdump vmlinux.o | grep ..." [2]
2. Form the output as an ELF objecj
3. Link the object to __mcount_loc_start symbol
4. Done
With the similar reason as the patch [3], we should mark _mcount to be
a weak symbol to prevent it from being relaxed later.
We would like to know your opinion and comments on this.
Thanks!
Alan Kao
[1] riscv/ftrace dynamic support [patch v4 1/6]:
https://lkml.org/lkml/2018/2/13/12
[2] This used to not collect some call-sites since their jumps has no
target symbol hint. It becomes possible after the fix in 2.30 release.
See https://github.com/riscv/riscv-binutils-gdb/issues/129 for more
details.
[3] https://lkml.org/lkml/2016/5/14/101
next reply other threads:[~2018-02-27 10:07 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-27 10:04 Alan Kao [this message]
2018-02-27 21:12 ` ftrace: Proposal for an Alternative RecordMcount framework Steven Rostedt
2018-03-01 2:05 ` Alan Kao
2018-03-07 1:47 ` Alan Kao
2018-03-07 2:00 ` Steven Rostedt
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=20180227100425.GB20904@andestech.com \
--to=alankao@andestech.com \
--cc=albert@sifive.com \
--cc=greentime@andestech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=palmer@sifive.com \
--cc=rostedt@goodmis.org \
--cc=sw-dev@groups.riscv.org \
--cc=zong@andestech.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 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.