On Wed, Jan 06, 2021 at 08:08:29PM +0000, Alexander Lobakin 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 <[email protected]> # .got
> Suggested-by: Fangrui Song <[email protected]> # .rel.dyn
> Signed-off-by: Alexander Lobakin <[email protected]>
> ---
>  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!")

This assertion does trigger now.

$ make -skj"$(nproc)" ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- LLVM=1 \
       O=out/mipsel distclean malta_kvm_guest_defconfig all
...
ld.lld: error: Unexpected GOT entries detected!
ld.lld: error: Unexpected GOT entries detected!
...

> +     .got.plt (INFO) : {
> +             *(.got.plt)
> +     }
> +     ASSERT(SIZEOF(.got.plt) == 0, "Unexpected GOT/PLT entries detected!")
> +
> +     .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!")
>  }
> -- 
> 2.30.0
> 
> 

Reply via email to