On Tue, Mar 04, 2025 at 09:10:12AM +0800, Menglong Dong wrote: > Hello, sorry that I forgot to add something to the changelog. In fact, > I don't add extra 5-bytes anymore, which you can see in the 3rd patch. > > The thing is that we can't add extra 5-bytes if CFI is enabled. Without > CFI, we can make the padding space any value, such as 5-bytes, and > the layout will be like this: > > __align: > nop > nop > nop > nop > nop > foo: -- __align +5 > > However, the CFI will always make the cfi insn 16-bytes aligned. When > we set the FUNCTION_PADDING_BYTES to (11 + 5), the layout will be > like this: > > __cfi_foo: > nop (11) > mov $0x12345678, %reg > nop (16) > foo: > > and the padding space is 32-bytes actually. So, we can just select > FUNCTION_ALIGNMENT_32B instead, which makes the padding > space 32-bytes too, and have the following layout: > > __cfi_foo: > mov $0x12345678, %reg > nop (27) > foo: *blink*, wtf is clang smoking. I mean, you're right, this is what it is doing, but that is somewhat unexpected. Let me go look at clang source, this is insane.