[llvm-dev] [RFC] Annotating global functions and variables to prevent ICF during linking

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 22 18:36:29 PDT 2021


ICF: Identical Code Folding

Linker deduplicates functions by collapsing any identical functions
together - with icf=safe, the linker looks at a .addressing section in the
object file and any functions listed in that section are not treated as
collapsible (eg: because they need to meet C++'s "distinct functions have
distinct addresses" guarantee)

On Mon, Mar 22, 2021 at 6:16 PM Philip Reames via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Can you define ICF please?  And give a bit of context?
>
> Philip
> On 3/22/21 5:27 PM, Zequan Wu via llvm-dev wrote:
>
> Hi all,
>
> Background:
> It's been a longstanding difficulty of debugging with ICF. Programmers
> don't have control over which sections should be folded by ICF, which
> sections shouldn't. The existing address significant table won't have
> effect for code sections during all ICF mode in both ld.lld and lld-link.
> By switching to safe ICF could mark code sections as unique, but at a cost
> of increasing binary size out of control. So, it would be good if
> programmers could selectively disable ICF in source code by annotating
> global functions/variables with an attribute to improve debugging
> experience and have the control on the binary size increase.
>
> My plan is to add a new section table(`.no_icf`) to object files. Sections
> of all symbols inside the table should not be folded by all ICF mode. And
> symbols can only be added into the table by annotating global
> functions/variables with a new attribute(`no_icf`) in source code.
>
> What do you think about this approach?
>
> Thanks,
> Zequan
>
>
> _______________________________________________
> LLVM Developers mailing listllvm-dev at lists.llvm.orghttps://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210322/efbeb8d9/attachment.html>


More information about the llvm-dev mailing list