On Mon Apr 21, 2025 at 4:14 AM CEST, Xu Kuohai wrote: > On 4/21/2025 12:02 AM, Alexis Lothoré wrote: >> Hi Xu, >> >> On Thu Apr 17, 2025 at 4:10 PM CEST, Xu Kuohai wrote: >>> On 4/17/2025 3:14 PM, Alexis Lothoré wrote: >>>> Hi Andrii, >>>> >>>> On Wed Apr 16, 2025 at 11:24 PM CEST, Andrii Nakryiko wrote: >>>>> On Fri, Apr 11, 2025 at 1:32 PM Alexis Lothoré (eBPF Foundation) >>>>> <alexis.loth...@bootlin.com> wrote:
[...] >> Ah, thanks for those clear examples, I completely overlooked this >> possibility. And now that you mention it, I feel a bit dumb because I now >> remember that you mentioned this in Puranjay's series... >> >> I took a quick look at the x86 JIT compiler for reference, and saw no code >> related to this specific case neither. So I searched in the kernel for >> actual functions taking struct arguments by value AND being declared with >> some >> packed or aligned attribute. I only found a handful of those, and none >> seems to take enough arguments to have the corresponding struct passed on the >> stack. So rather than supporting this very specific case, I am tempted >> to just return an error for now during trampoline creation if we detect such >> structure (and then the JIT compiler can keep using data size to compute >> alignment, now that it is sure not to receive custom alignments). Or am I >> missing some actual cases involving those very specific alignments ? >> > > How can we reliably 'detect' the case? If a function has such a parameter > but we fail to detect it, the BPF trampoline will pass an incorrect value > to the function, which is also unacceptable. That's a question I still have to answer :) I imagined being able to detect it thanks to some info somewhere in BTF, but I have to dig further to find how. Alexis -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com