[llvm-dev] LLD bug causing objcopy ELF to binary generation to create large binaries

Kasun Fernando via llvm-dev llvm-dev at lists.llvm.org
Sun Mar 29 14:50:12 PDT 2020

Hi LLVM devs,

  I came across an LLD bug in v 10.x where ELF parser / processor is 
setting .PROGBITS attribute for .heap and .stack sections, which leads 
to large binaries when we do `llvm-objcopy -o binary` to generate the 
binary output for armv6m. (e.g. for a 57Kb elf would yield a ~400Mb 

This in comparison with LLVM 7.x , would produce the correct binary size 
of 35Kb and the elf sections have NOBITS for .heap and .stack sections.

I narrowed down the problem to the following commit and the commits 
around this....Please see below:

commit ccba42c7eb3cdfe7824cd4b473a9688e5738fa3a
Author: Andrew Ng <anng.sw at gmail.com>
Date:   Tue Apr 23 12:38:52 2019 +0000

     [ELF] Change default output section type to SHT_PROGBITS

     This fixes an issue where a symbol only section at the start of a
     PT_LOAD segment, causes incorrect alignment of the file offset for the
     start of the segment which results in the output of an invalid ELF.

     SHT_PROGBITS was the default output section type in the past.

     Differential Revision: https://reviews.llvm.org/D60131

     llvm-svn: 358981

commit 5929553868ddfd3f53672253782260c2a0a52c79
Author: Fangrui Song <maskray at google.com>
Date:   Wed Apr 24 14:44:07 2019 +0000

     [ELF] Delete a redundant SHT_NOBITS -> SHT_PROGBITS after D60131

     Differential Revision: https://reviews.llvm.org/D61006

     llvm-svn: 359099

What was the intention behind "Andrew Ng"'s commit? was it an oversight 
to set PROGBITS attribute unconditionally for sections that are 
allocation only?



More information about the llvm-dev mailing list