On Fri, 6 Nov 2020 17:45:37 +0100 Johan Hovold <johan@xxxxxxxxxx> wrote:
It's simply specifying alignment when declaring the variable that prevents this optimisation. The relevant code is in the function align_variable() in [1] where DATA_ALIGNMENT() is never called in case an alignment has been specified (!DECL_USER_ALIGN(decl)). There's no mention in the documentation of this that I'm aware of, but this is the way the aligned attribute has worked since its introduction judging from the commit history. As mentioned above, we've been relying on this for kernel parameters and other structures since 2003-2004 so if it ever were to change we'd find out soon enough. It's about to be used for scheduler classes as well. [2]
Is this something that gcc folks are aware of? Yes, we appear to be relying on undocumented implementations, but that hasn't caused gcc to break the kernel in the past. -- Steve