Re: [PATCH] arch: fix broken BuildID for arm64 and riscv

From: Conor Dooley
Date: Sun Dec 25 2022 - 10:18:40 EST


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.

Hey Mashiro,

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.

Thanks,
Conor.

>
> Link: https://lore.kernel.org/lkml/CAABkxwuQoz1CTbyb57n0ZX65eSYiTonFCU8-LCQc=74D=xE=rA@xxxxxxxxxxxxxx/
> 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@xxxxxxxx>
> Suggested-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---
>
> arch/riscv/kernel/vmlinux.lds.S | 4 ++--
> include/asm-generic/vmlinux.lds.h | 1 +
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S
> index 4e6c88aa4d87..1865a258e560 100644
> --- a/arch/riscv/kernel/vmlinux.lds.S
> +++ b/arch/riscv/kernel/vmlinux.lds.S
> @@ -31,6 +31,8 @@ PECOFF_FILE_ALIGNMENT = 0x200;
>
> SECTIONS
> {
> + DISCARDS
> +
> /* Beginning of code and text segment */
> . = LOAD_OFFSET;
> _start = .;
> @@ -141,7 +143,5 @@ SECTIONS
> STABS_DEBUG
> DWARF_DEBUG
> ELF_DETAILS
> -
> - DISCARDS
> }
> #endif /* CONFIG_XIP_KERNEL */
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index a94219e9916f..2993b790fe98 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -1007,6 +1007,7 @@
> *(.modinfo) \
> /* ld.bfd warns about .gnu.version* even when not emitted */ \
> *(.gnu.version*) \
> + *(.note.GNU-stack) /* emitted as PROGBITS */
>
> #define DISCARDS \
> /DISCARD/ : { \
> --
> 2.34.1
>

Attachment: signature.asc
Description: PGP signature