This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH V2 2/8] bpf: new GCC port
On Thu, Aug 22, 2019 at 04:11:46AM +0200, Jose E. Marchesi wrote:
> A colleague (who actually _uses_ eBPF extensively, ahem) tells me that
> the kernel verifier allows to pass addresses of the caller's stack
> frame, tracking that it is a ptr to a stack location, and it knows which
> stack it came from. So it is indeed possible for the callee to access
> the caller's frame, and therefore to pass arguments by reference.
Good news for testability of the GCC port, and also good news for users,
who will have one less (HUGE) arbitrary restriction to deal with :-)
> On the downside, it is not possible for a callee to access the caller's
> frame applying an offset to its frame pointer,
That is true for many targets.
> because the stacks are disjoint.
And even that sometimes.
> This means that most probably I will have to dedicate a real,
> not eliminable register to act as the arg pointer, if I want to get rid
> of the annoying limitation on the number of arguments... and in order
> to keep ABI compatibility with llvm built objects, this register is
> gonna have to be %r5, i.e. the last register usable to pass arguments,
> but it should be only used for that purpose if the function gets more
> than 5 arguments... sounds messy, but there is hope, yay!
At *function entry* it is in %r5, but you can immediately copy that
elsewhere, at function start; there is no need to dedicate a hard
register to it.