Hi,

On Oct 31, 2023, "Jose E. Marchesi" <jose.march...@oracle.com> wrote:

> As you may know, in BPF we have to live (for now) with the constant pain
> from being limited to functions whose arguments can be compiled to get
> their arguments in five or less registers.

Ugh.  I had no idea.

> The recently introduced __hardcfr_check_fail in the run-time component
> of hardcfr breaks the bpf-unknown-none build:

>   ../../../libgcc/hardcfr.c: In function ‘__hardcfr_check_fail’:
>   ../../../libgcc/hardcfr.c:210:1: error: too many function arguments for eBPF
>     210 | __hardcfr_check_fail (size_t const blocks ATTRIBUTE_UNUSED,
>         | ^~~~~~~~~~~~~~~~~~~~

Would it by any chance be enough to make it always_inline on bpf?

Failing that, the alternative I see is to pack some (or all) of the
arguments into a struct, and pass it by reference.  That would be plenty
of overhead for a slow path, and it could be made conditional for
targets that require it.

> It seems to me that __hardcfr_check_fail is only called from
> __hardcfr_check, and compiled code is not instrumentalized with direct
> calls to it.

Yeah, it's static, it's not even supposed to be visible.

I envisioned making it visible and forcing it out-of-line, so that one
could set a breakpoint on it in case of failures, but I haven't done
that (yet?).

I'm afraid dropping any of the arguments is not viable for it to do its
job, but calls to it could conceivably be replaced with a goto, if the
code is moved (manually inlined) into __hardcfr_check.

-- 
Alexandre Oliva, happy hacker            https://FSFLA.org/blogs/lxo/
   Free Software Activist                   GNU Toolchain Engineer
More tolerance and less prejudice are key for inclusion and diversity
Excluding neuro-others for not behaving ""normal"" is *not* inclusive

Reply via email to