On ELF, (NOLOAD) sets the section type to SHT_NOBITS[1]. It is conceptually inappropriate for .plt and .text.* sections which are always SHT_PROGBITS. In GNU ld, if PLT entries are needed, .plt will be SHT_PROGBITS anyway and (NOLOAD) will be essentially ignored. In ld.lld, since https://reviews.llvm.org/D118840 ("[ELF] Support (TYPE=<value>) to customize the output section type"), ld.lld will report a `section type mismatch` error. Just remove (NOLOAD) to fix the error. [1] https://lld.llvm.org/ELF/linker_script.html As of today, "The section should be marked as not loadable" on https://sourceware.org/binutils/docs/ld/Output-Section-Type.html is outdated for ELF. Tested-by: Nathan Chancellor <nathan@kernel.org> Reported-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Fangrui Song <maskray@google.com> Acked-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20220218081209.354383-1-maskray@google.com Signed-off-by: Will Deacon <will@kernel.org>
21 lines
646 B
C
21 lines
646 B
C
SECTIONS {
|
|
#ifdef CONFIG_ARM64_MODULE_PLTS
|
|
.plt 0 : { BYTE(0) }
|
|
.init.plt 0 : { BYTE(0) }
|
|
.text.ftrace_trampoline 0 : { BYTE(0) }
|
|
#endif
|
|
|
|
#ifdef CONFIG_KASAN_SW_TAGS
|
|
/*
|
|
* Outlined checks go into comdat-deduplicated sections named .text.hot.
|
|
* Because they are in comdats they are not combined by the linker and
|
|
* we otherwise end up with multiple sections with the same .text.hot
|
|
* name in the .ko file. The kernel module loader warns if it sees
|
|
* multiple sections with the same name so we use this sections
|
|
* directive to force them into a single section and silence the
|
|
* warning.
|
|
*/
|
|
.text.hot : { *(.text.hot) }
|
|
#endif
|
|
}
|