• Arvind Sankar's avatar
    x86/boot/compressed: Remove .eh_frame section from bzImage · 0eea39a2
    Arvind Sankar authored
    Discarding unnecessary sections with "*(*)" (see thread at Link: below)
    works fine with the bfd linker but fails with lld:
    
      $ make -j$(nproc) -s CC=clang LD=ld.lld O=out.x86_64 distclean defconfig bzImage
      ld.lld: error: discarding .shstrtab section is not allowed
    
    lld tries to also discard essential sections like .shstrtab, .symtab and
    .strtab, which results in the link failing since .shstrtab is required
    by the ELF specification: the e_shstrndx field in the ELF header is the
    index of .shstrtab, and each section in the section table is required to
    have an sh_name that points into the .shstrtab.
    
    .symtab and .strtab are also necessary to generate the zoffset.h file
    for the bzImage header.
    
    Since the only sizeable section that can be discarded is .eh_frame,
    restrict the discard to only .eh_frame to be safe.
    
     [ bp: Flesh out commit message and replace offending commit with this one. ]
    Signed-off-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Link: https://lkml.kernel.org/r/20200109150218.16544-2-nivedita@alum.mit.edu
    0eea39a2
vmlinux.lds.S 1.22 KB