On Wed, Jan 6, 2021 at 12:08 PM Alexander Lobakin alobakin@pm.me wrote:
Catch any symbols placed in .got, .got.plt, .plt, .rel.dyn or .rela.dyn and check for these sections to be zero-sized at link time.
At least two of them were noticed in real builds:
mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn' from `init/main.o' being placed in section `.rel.dyn'
ld.lld: warning: <internal>:(.got) is being placed in '.got'
Adopted from x86/kernel/vmlinux.lds.S.
Reported-by: Nathan Chancellor natechancellor@gmail.com # .got Suggested-by: Fangrui Song maskray@google.com # .rel.dyn Signed-off-by: Alexander Lobakin alobakin@pm.me
arch/mips/kernel/vmlinux.lds.S | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 5d6563970ab2..05eda9d9a7d5 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -227,4 +227,39 @@ SECTIONS *(.pdr) *(.reginfo) }
/*
* Sections that should stay zero sized, which is safer to
* explicitly check instead of blindly discarding.
*/
.got : {
*(.got)
*(.igot.*)
}
ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!")
.got.plt (INFO) : {
*(.got.plt)
}
ASSERT(SIZEOF(.got.plt) == 0, "Unexpected GOT/PLT entries detected!")
(INFO) drops the SHF_ALLOC flag from the output section (It does not mean "informational"). INFO is not need here. The diff from 815d680771ae09080d2da83dac2647c08cdf99ce "x86/build: Enforce an empty .got.plt section" is not needed.
.plt : {
*(.plt)
*(.plt.*)
*(.iplt)
}
ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
.rel.dyn : {
*(.rel.*)
*(.rel_*)
}
ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!")
.rela.dyn : {
*(.rela.*)
*(.rela_*)
}
ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
}
x86 has both .rel.dyn and .rela.dyn because i386 psABI uses REL while x86-64 psABI uses RELA, but mips does not need .rela.dyn
-- 2.30.0