Messages in this thread | | | Date | Thu, 29 Dec 2022 08:22:27 -0800 (PST) | Subject | Re: [PATCH v2] arch: fix broken BuildID for arm64 and riscv | From | Palmer Dabbelt <> |
| |
On Mon, 26 Dec 2022 10:45:37 PST (-0800), masahiroy@kernel.org 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. 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. > > Link: https://lore.kernel.org/lkml/CAABkxwuQoz1CTbyb57n0ZX65eSYiTonFCU8-LCQc=74D=xE=rA@mail.gmail.com/ > Fixes: 994b7ac1697b ("arm64: remove special treatment for the link order of head.o") > Fixes: 2348e6bf4421 ("riscv: remove special treatment for the link order of head.o") > Reported-by: Dennis Gilmore <dennis@ausil.us> > Suggested-by: Ard Biesheuvel <ardb@kernel.org> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > Changes in v2: > - discard .note.GNU-stack before .notes because many architectures > call DISCARDS at the end of their linker scripts > > include/asm-generic/vmlinux.lds.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index a94219e9916f..659bf3b31c91 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -891,7 +891,12 @@ > #define PRINTK_INDEX > #endif > > +/* > + * Discard .note.GNU-stack, which is emitted as PROGBITS by the compiler. > + * Otherwise, the type of .notes section would become PROGBITS instead of NOTES. > + */ > #define NOTES \ > + /DISCARD/ : { *(.note.GNU-stack) } \ > .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ > BOUNDED_SECTION_BY(.note.*, _notes) \ > } NOTES_HEADERS \
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
Thanks!
| |