[LLVMdev] [PROPOSAL] ELF safe/unsafe sections

Eric Christopher echristo at gmail.com
Tue Jul 30 17:50:47 PDT 2013


On Tue, Jul 30, 2013 at 5:36 PM, Nick Kledzik <kledzik at apple.com> wrote:
>
> On Jul 30, 2013, at 4:28 PM, Eric Christopher wrote:
>> On Mon, Jul 29, 2013 at 9:24 AM, Nick Kledzik <kledzik at apple.com> wrote:
>>>
>>> On Jul 25, 2013, at 2:10 PM, Rui Ueyama wrote:
>>>> Is there any reason -ffunction-sections and -fdata-sections wouldn't work? If it'll work, it may be be better to say "if you want to get a better linker output use these options", rather than defining new ELF section.
>>>
>>> From my understanding, -ffunction-sections is a good semantic match.  But it introduces a lot of bloat in the .o file which the linker must process.
>>>
>>
>> Drive by comment here:
>>
>> Other than the overhead of the section header I'm not sure what bloat
>> you're talking about here that the linker needs to process?
>
> The internal model of lld is "atom" based.  Each atom is an indivisible run of bytes.  A compiler generated function naturally matches that and should be an atom.  The problem is that a hand written assembly code could look like it has a couple of functions, but there could be implicit dependencies (like falling through to next function).
>

I'll stipulate all of this :)

> If an object file has a hundred functions, that means there will be a hundred more sections (one per function).    So, if we used -ffunction-sections to determine that an object file was compiler generated, we still have the problem that an assembly language programmer could have hand written extra sections that look like -ffunction-sections would have produced, but he did something tricky like have one function with two entry symbols.  So, the linker would need to double check all those hundred sections.
>

I'm not talking about using -ffunction-sections to determine if
something is compiler generated, just that there's no inherent penalty
in using -ffunction-sections in general. Basically there's no benefit
(unless you allow a flag per object, etc) that says whether or not
something is "compiler generated", you may as well just use a flag to
the linker or a section in the output (the latter is a fairly common
elf-ism).

-eric




More information about the llvm-dev mailing list