Hey Masahiro, On Tue, Dec 27, 2022 at 04:06:35AM +0900, Masahiro Yamada wrote: > On Mon, Dec 26, 2022 at 12:18 AM Conor Dooley <conor@xxxxxxxxxx> wrote: > > On Sun, Dec 25, 2022 at 04:27:51AM +0900, Masahiro Yamada wrote: > > > Dennis Gilmore reports that the BuildID is missing in the arm64 vmlinux > > > since commit 994b7ac1697b ("arm64: remove special treatment for the > > > link order of head.o"). > > > > > > The issue is that the type of .notes section, which contains the BuildID, > > > changed from NOTES to PROGBITS. > > > > > > Ard Biesheuvel figured out that whichever object gets linked first gets > > > to decide the type of a section, and the PROGBITS type is the result of > > > the compiler emitting .note.GNU-stack as PROGBITS rather than NOTE. > > > > > > While Ard provided a fix for arm64, I want to fix this globally because > > > the same issue is happening on riscv since commit 2348e6bf4421 ("riscv: > > > remove special treatment for the link order of head.o"). This problem > > > will happen in general for other architectures if they start to drop > > > unneeded entries from scripts/head-object-list.txt. > > > > > > Discard .note.GNU-stack in include/asm-generic/vmlinux.lds.h. > > > > > > riscv needs to change its linker script so that DISCARDS comes before > > > the .notes section. > > > > No idea why I decided to look at patchwork today, but this seems to > > break the build on RISC-V, there's a whole load of the following in the > > output: > > `.LPFE4' referenced in section `__patchable_function_entries' of kernel/trace/trace_selftest_dynamic.o: defined in discarded section `.text.exit' of kernel/trace/trace_selftest_dynamic.o > > > > I assume that's what's doing it, but given the day that's in it - I > > haven't looked into this any further, nor gone and fished the logs out of > > the builder. > > > arch/riscv/kernel/vmlinux.lds.S clearly says: > /* we have to discard exit text and such at runtime, not link time */ > > riscv already relies on the linker not discarding EXIT_{TEXT,DATA} > so riscv should define RUNTIME_DISCARD_EXIT like x86, arm64. Huh, fair enough. The diff for that appears to be trivial, but I was not able to correctly determine a fixes tag. I may have erred in my history-diving, but it's a wee bit hard to determine the correct fixes tag. That comment about runtime discards appears to date back to commit fbe934d69eb7 ("RISC-V: Build Infrastructure") in 2017 - apparently pre-dating the addition of the define in the first place. Commit 84d5f77fc2ee ("x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS") added it to x86 but not to arm64 - but it seems like it was added to arm during a later reword. Does that make 84d5f77fc2ee the correct one to mark it as a fix of & riscv was just overlooked when the define was added? > Anyway, I came up with a simpler patch, so I do not need to > touch around arch linker scripts. > > I sent v2. > https://lore.kernel.org/lkml/20221226184537.744960-1-masahiroy@xxxxxxxxxx/T/#u Sweet, thanks. Hopefully the automation likes that version better :)
Attachment:
signature.asc
Description: PGP signature