From: Josh Poimboeuf <jpoimboe@redhat.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
netdev@vger.kernel.org, bpf@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
Song Liu <songliubraving@fb.com>, Kairui Song <kasong@redhat.com>
Subject: Re: [PATCH 7/9] x86/unwind/orc: Fall back to using frame pointers for generated code
Date: Thu, 13 Jun 2019 20:30:51 -0500 [thread overview]
Message-ID: <20190614013051.6gnwduy4dsygbamj@treble> (raw)
In-Reply-To: <20190613220054.tmonrgfdeie2kl74@ast-mbp.dhcp.thefacebook.com>
On Thu, Jun 13, 2019 at 03:00:55PM -0700, Alexei Starovoitov wrote:
> > @@ -392,8 +402,16 @@ bool unwind_next_frame(struct unwind_state *state)
> > * calls and calls to noreturn functions.
> > */
> > orc = orc_find(state->signal ? state->ip : state->ip - 1);
> > - if (!orc)
> > - goto err;
> > + if (!orc) {
> > + /*
> > + * As a fallback, try to assume this code uses a frame pointer.
> > + * This is useful for generated code, like BPF, which ORC
> > + * doesn't know about. This is just a guess, so the rest of
> > + * the unwind is no longer considered reliable.
> > + */
> > + orc = &orc_fp_entry;
> > + state->error = true;
>
> That seems fragile.
I don't think so. The unwinder has sanity checks to make sure it
doesn't go off the rails. And it works just fine. The beauty is that
it should work for all generated code (not just BPF).
> Can't we populate orc_unwind tables after JIT ?
As I mentioned it would introduce a lot more complexity. For each JIT
function, BPF would have to tell ORC the following:
- where the BPF function lives
- how big the stack frame is
- where RBP and other callee-saved regs are on the stack
There's a lot more fragility lurking there, compared to the above.
Not to mention the unwinder would need BPF-specific knowledge, unless we
created some generic abstraction for generated code to register their
functions (which we have actually considered in the past). But the
above approach is much simpler: just have all generated code use frame
pointers.
--
Josh
next prev parent reply other threads:[~2019-06-14 1:30 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-13 13:20 [PATCH 0/9] x86/bpf: unwinder fixes Josh Poimboeuf
2019-06-13 13:20 ` [PATCH 1/9] perf/x86: Always store regs->ip in perf_callchain_kernel() Josh Poimboeuf
2019-06-13 13:20 ` [PATCH 2/9] objtool: Fix ORC unwinding in non-JIT BPF generated code Josh Poimboeuf
2019-06-13 20:57 ` Alexei Starovoitov
2019-06-14 1:20 ` Josh Poimboeuf
2019-06-14 1:37 ` Alexei Starovoitov
2019-06-14 1:51 ` Josh Poimboeuf
2019-06-14 7:08 ` Peter Zijlstra
2019-06-14 7:35 ` Alexei Starovoitov
2019-06-14 8:11 ` Peter Zijlstra
2019-06-14 15:13 ` Alexei Starovoitov
2019-06-14 16:11 ` Josh Poimboeuf
2019-06-13 13:21 ` [PATCH 3/9] x86/bpf: Move epilogue generation to a dedicated function Josh Poimboeuf
2019-06-13 18:57 ` Song Liu
2019-06-13 19:12 ` Josh Poimboeuf
2019-06-13 13:21 ` [PATCH 4/9] x86/bpf: Simplify prologue generation Josh Poimboeuf
2019-06-13 13:21 ` [PATCH 5/9] x86/bpf: Support SIB byte generation Josh Poimboeuf
2019-06-13 13:21 ` [PATCH 6/9] x86/bpf: Fix JIT frame pointer usage Josh Poimboeuf
2019-06-13 21:58 ` Alexei Starovoitov
2019-06-14 1:22 ` Josh Poimboeuf
2019-06-14 1:39 ` Alexei Starovoitov
2019-06-14 1:52 ` Josh Poimboeuf
2019-06-14 10:50 ` David Laight
2019-06-14 13:44 ` Josh Poimboeuf
2019-06-14 13:58 ` David Laight
2019-06-14 17:07 ` Josh Poimboeuf
2019-06-17 15:07 ` David Laight
2019-06-13 13:21 ` [PATCH 7/9] x86/unwind/orc: Fall back to using frame pointers for generated code Josh Poimboeuf
2019-06-13 22:00 ` Alexei Starovoitov
2019-06-14 1:30 ` Josh Poimboeuf [this message]
2019-06-14 1:42 ` Alexei Starovoitov
2019-06-14 1:58 ` Josh Poimboeuf
2019-06-14 2:28 ` Josh Poimboeuf
2019-06-14 4:50 ` Josh Poimboeuf
2019-06-14 6:00 ` Alexei Starovoitov
2019-06-14 7:41 ` Peter Zijlstra
2019-06-14 13:31 ` Josh Poimboeuf
2019-06-14 15:29 ` Alexei Starovoitov
2019-06-14 13:34 ` Josh Poimboeuf
2019-06-14 15:31 ` Alexei Starovoitov
2019-06-14 15:56 ` Josh Poimboeuf
2019-06-13 13:21 ` [PATCH 8/9] x86/bpf: Convert asm comments to AT&T syntax Josh Poimboeuf
2019-06-13 18:52 ` Song Liu
2019-06-13 19:11 ` Josh Poimboeuf
2019-06-14 7:42 ` Peter Zijlstra
2019-06-14 15:13 ` Song Liu
2019-06-13 13:21 ` [PATCH 9/9] x86/bpf: Convert MOV function/macro argument ordering " Josh Poimboeuf
2019-06-13 19:00 ` [PATCH 0/9] x86/bpf: unwinder fixes Song Liu
2019-06-13 20:41 ` Peter Zijlstra
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=20190614013051.6gnwduy4dsygbamj@treble \
--to=jpoimboe@redhat.com \
--cc=alexei.starovoitov@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kasong@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=songliubraving@fb.com \
--cc=x86@kernel.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