Hello Alexei, On Fri Apr 25, 2025 at 1:14 AM CEST, Alexei Starovoitov wrote: > On Thu, Apr 24, 2025 at 6:38 AM Alexis Lothoré > <alexis.loth...@bootlin.com> wrote:
[...] >> > With DWARF info, we might not need to detect the structure alignment >> > anymore, >> > since the DW_AT_location attribute tells us where the structure parameter >> > is >> > located on the stack, and DW_AT_byte_size gives us the size of the >> > structure. >> >> I am not sure to follow you here, because DWARF info is not accessible >> from kernel at runtime, right ? Or are you meaning that we could, at build >> time, enrich the BTF info embedded in the kernel thanks to DWARF info ? > > Sounds like arm64 has complicated rules for stack alignment and > stack offset computation for passing 9th+ argument. AFAICT, arm64 has some specificities for large types, but not that much compared to x86 for example. If I take a look at System V ABI ([1]), I see pretty much the same constraints: - p.18: "Arguments of type __int128 offer the same operations as INTEGERs, [...] with the exception that arguments of type __int128 that are stored in memory must be aligned on a 16-byte boundary" - p.13: "Structures and unions assume the alignment of their most strictly aligned component" - the custom packing and alignments attributes will end up having the same consequence on both architectures As I mentioned in my cover letter, the new tests covering those same alignment constraints for ARM64 break on x86, which makes me think other archs are also silently ignoring those cases. > Since your analysis shows: > "there are about 200 functions accept 9 to 12 arguments, so adding support > for up to 12 function arguments." > I say, let's keep the existing limitation: > if (nregs > 8) > return -ENOTSUPP; > > If there is a simple and dumb way to detect that arg9+ are scalars > with simple stack passing rules, then, sure, let's support those too, > but fancy packed/align(x)/etc let's ignore. [1] https://refspecs.linuxbase.org/elf/x86_64-abi-0.99.pdf -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com