[PATCH] D13950: ELF2: Implement --gc-sections.

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 21 14:34:57 PDT 2015


I am also getting a test failure:

Command Output (stderr):
--
<stdin>:178:2: error: GC-NOT: string occurred!
 Name: x (3)
 ^
/home/espindola/llvm/lld/test/elf2/gc-sections.s:24:11: note: GC-NOT:
pattern specified here
# GC-NOT: Name: x

On 21 October 2015 at 17:33, Rafael EspĂ­ndola
<rafael.espindola at gmail.com> wrote:
> Just applied the patch locally to review it. There are a few
> formatting issues. Please git-clang-format.
>
> On 21 October 2015 at 13:30, Rui Ueyama <ruiu at google.com> wrote:
>> ruiu created this revision.
>> ruiu added a reviewer: rafael.
>> ruiu added a subscriber: llvm-commits.
>>
>> Section garbage collection is a feature to remove unused sections
>> from outputs. Unused sections are sections that cannot be reachable
>> from known GC-root symbols or sections. Naturally the feature is
>> implemented as a mark-sweep garbage collector.
>>
>> In this patch, I added Live bit to InputSectionBase. If and only
>> if Live bit is on, the section will be written to the output.
>> Starting from GC-root symbols or sections, a new function, markLive(),
>> visits all reachable sections and sets their Live bits. Writer then
>> ignores sections whose Live bit is off, so that such sections are
>> excluded from the output.
>>
>> This change has small negative impact on performance. The time to
>> link Clang changes from 0.356s to 0.386s, or +8%.
>>
>> It reduces Clang size from 57,764,984 bytes to 55,296,600 bytes.
>> That is 4.3% reduction.
>>
>>
>> http://reviews.llvm.org/D13950
>>
>> Files:
>>   ELF/CMakeLists.txt
>>   ELF/Config.h
>>   ELF/Driver.cpp
>>   ELF/InputFiles.cpp
>>   ELF/InputFiles.h
>>   ELF/InputSection.h
>>   ELF/MarkLive.cpp
>>   ELF/Options.td
>>   ELF/OutputSections.cpp
>>   ELF/SymbolTable.h
>>   ELF/Symbols.h
>>   ELF/Writer.cpp
>>   ELF/Writer.h
>>   test/elf2/gc-sections.s
>>


More information about the llvm-commits mailing list