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

Zequan Wu via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 22 17:27:35 PDT 2021

Hi all,

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?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210322/bf422600/attachment.html>

More information about the llvm-dev mailing list