|
Message-Id: <3KDMGHI91MHTL.24XCHF6E4X1XG@mforney.org> Date: Sat, 20 Apr 2024 20:51:35 -0700 From: Michael Forney <mforney@...rney.org> To: musl@...ts.openwall.com Subject: Alignment attribute in headers I'm looking at changing headers to use C11 alignment specifiers when available instead of GNU attributes. These are used in the following headers: arch/loongarch64/bits/signal.h arch/powerpc/bits/signal.h arch/powerpc/bits/user.h arch/powerpc64/bits/signal.h arch/powerpc64/bits/user.h arch/riscv32/bits/signal.h arch/riscv64/bits/signal.h arch/x32/bits/shm.h In some of these cases (powerpc, powerpc64, x32), the attribute is conditional on __GNUC__, which I think may result in improperly aligned structs on compilers that don't define this. For powerpc/powerpc64 user.h, the attribute is applied to a typedef of a struct, but alignas can't be used with typedef. I think this could be fixed by moving the attribute/alignment specifier to the first (and only) struct member instead. Similarly, x32 shm.h uses an attribute after a struct specifier, which could be made compatible with an alignment specifier in the same way. I also noticed that arch/i386/bits/alltypes.h.in uses _Alignas(8) for C, __attribute__((__aligned__(8))) for GNU C++, and alignas(8) for non-GNU C++. Looking through commit history, this seems to be a work around for a gcc 4.7 bug which claims C++11 support but doesn't offer alignas. Do we need to use this same approach for each of the instances above to handle the three cases (C, GNU C++, non-GNU C++)? I see that stdalign.h uses _Alignas conditional on C11 support, but i386 alltypes.h uses it unconditionally on C. Should i386 alltypes.h use __attribute__ when __STDC_VERSION__ < 201112L? Something like #if __STDC_VERSION__ >= 201112L /* use _Alignas */ #elif defined(__cplusplus) && !defined(__GNUC__) /* use alignas */ #else /* use __attribute__((__aligned__(N))) */ #end ?
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.