On 7/30/25 13:25, Yury Khrustalev wrote: External email: Use caution opening links or attachments
Hi Remi On Wed, Jul 23, 2025 at 01:53:13PM +0000, Remi Machet wrote: On 7/23/25 04:45, Yury Khrustalev wrote: ... -#if __has_include(<sys/ifunc.h>) -#include <sys/ifunc.h> -#else +/* The following struct is ABI-correct description of the 2nd argument for an + ifunc resolver as per SYSVABI spec (see link below). It is safe to extend + it with new fields. The ifunc resolver implementations must always check + the runtime size of the buffer using the value in the _size field. + https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst. */ typedef struct __ifunc_arg_t { unsigned long _size; unsigned long _hwcap; unsigned long _hwcap2; + unsigned long _hwcap3; + unsigned long _hwcap4; } __ifunc_arg_t; Hi Yury, Having __ifunc_arg_t defined in 2 places (libatomic's host-config.h and libgcc cpuinfo.c) feels like a maintenance nightmare to me, would it be feasible to somehow combine the 2 definitions into one? This is a good point. In fact this struct is used in 3 places (also in gcc in build_ifunc_arg_type()). However, libatomic is supposed to be independent in terms of build process: it should be possible to build libatomic without gcc. If we shared some header from libgcc, we'd have to create a new dependency between libgcc and libatomic. I'd rather not do it. In essence, this type (either as a struct or a plain array of uint64_t's) should be defined locally where it is used. It just needs to comply with the ABI spec. That said, if you see a better way for having the definition shared across all the components, I'd be interested to know about it. Hi, Thank you for your reply and looking into it. I don't see anything trivial thus this is probably best left for a subsequent cleanup. Can we assume libatomic depends on libgcc? If that is ok then it might be possible to move __ifunc_arg_t into one of libgcc header files and have libatomic use that? Remi Kind regards, Yury