From: Jeff Law <jeffreyalaw@gmail.com>
To: "Wang, Yanzhang" <yanzhang.wang@intel.com>,
"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Cc: "juzhe.zhong@rivai.ai" <juzhe.zhong@rivai.ai>,
"kito.cheng@sifive.com" <kito.cheng@sifive.com>,
"Li, Pan2" <pan2.li@intel.com>
Subject: Re: [PATCH] RISCV: Add -m(no)-omit-leaf-frame-pointer support.
Date: Tue, 6 Jun 2023 20:13:28 -0600 [thread overview]
Message-ID: <e2d1bf0e-7f3e-7308-cc39-74e075b41e4e@gmail.com> (raw)
In-Reply-To: <IA1PR11MB6466101CB30FBAF74AFFD4A7F24DA@IA1PR11MB6466.namprd11.prod.outlook.com>
On 6/4/23 20:49, Wang, Yanzhang wrote:
> Hi Jeff,
>
> Yes, there's a requirement to support backtrace based on the fp+ra.
> And the unwind/cfa is not acceptable because it will add additional
> sections to the binary. Currently, -fno-omit-frame-pointer can not
> save the ra for the leaf function. So we need to add another option
> like ARM/X86 to support consistent fp+ra stack layout for the leaf
> and non-leaf functions.
One of the things that needs to be upstreamed is long jump support
within a function. Essentially once a function reaches 1M in size we
have the real possibility that a direct jump may not reach its target.
To support this I expect that $ra is going to become a fixed register
(ie, not available to the register allocator as a temporary). It'll be
used as a scratch register for long jump sequences.
One of the consequences of this is $ra will need to be saved in leaf
functions that are near or over 1M in size.
Note that at the time when we have to lay out the stack, we do not know
the precise length of the function. So there's a degree of "fuzz" in
the decision whether or not to save $ra in a function that is close to
the 1M limit.
I don't think you can reliably know if $ra is valid in an arbitrary leaf
function or not. You could implement some heuristics by looking at the
symbol table (which I'm guessing you don't want to do) or by
disassembling the prologue (again, I'm guessing you don't want to do
that either).
Meaning that what you really want is to be using -fno-omit-frame-pointer
and for $ra to always be saved in the stack, even in a leaf function.
Presumably you're not suggesting any of these options be used in general
-- they're going to be used for things like embedded devices or
firmware? Also note there are low overhead unwinding schemes out there
that are already supported in various tools -- ORC & SFRAME come
immediately to mind. Those may be better than building a bespoke
solution for the embedded space.
Jeff
next prev parent reply other threads:[~2023-06-07 2:13 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-02 7:07 yanzhang.wang
2023-06-03 2:43 ` Jeff Law
2023-06-05 2:49 ` Wang, Yanzhang
2023-06-07 2:13 ` Jeff Law [this message]
2023-06-07 3:50 ` Wang, Yanzhang
2023-06-08 15:05 ` Jeff Law
2023-06-21 8:14 ` Wang, Yanzhang
2023-06-24 15:01 ` Jeff Law
2023-06-25 1:40 ` Stefan O'Rear
2023-06-25 12:49 ` Jeff Law
2023-06-25 18:45 ` Stefan O'Rear
2023-06-26 14:30 ` Jeff Law
2023-06-26 14:50 ` Kito Cheng
2023-06-26 16:51 ` Jeff Law
2023-06-05 1:04 ` Li, Pan2
2023-06-05 3:36 ` Wang, Yanzhang
2023-07-13 6:12 ` yanzhang.wang
2023-07-18 7:49 ` [PATCH v3] " yanzhang.wang
2023-07-21 3:49 ` Kito Cheng
2023-07-21 4:11 ` Jeff Law
2023-08-02 1:51 ` Wang, Yanzhang
2023-08-03 6:12 ` Jeff Law
2023-08-03 6:16 ` Li, Pan2
2023-08-03 6:22 ` Li, Pan2
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=e2d1bf0e-7f3e-7308-cc39-74e075b41e4e@gmail.com \
--to=jeffreyalaw@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=juzhe.zhong@rivai.ai \
--cc=kito.cheng@sifive.com \
--cc=pan2.li@intel.com \
--cc=yanzhang.wang@intel.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).