Philip Reames via llvm-dev
2021-Mar-23 01:16 UTC
[llvm-dev] [RFC] Annotating global functions and variables to prevent ICF during linking
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 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/bc7d22a5/attachment.html>
David Blaikie via llvm-dev
2021-Mar-23 01:36 UTC
[llvm-dev] [RFC] Annotating global functions and variables to prevent ICF during linking
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>