[llvm-dev] Enabling statistics in release builds / static constructors

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 13 13:53:20 PST 2016


On Tue, Dec 13, 2016 at 1:22 PM, Matthias Braun <mbraun at apple.com> wrote:

>
> > On Dec 13, 2016, at 12:56 PM, Reid Kleckner <rnk at google.com> wrote:
> >
> > Given that LLVM has so many auto-registration systems (cl::opt, target
> registry, pass registry, statistics, I'm sure there's more), maybe we
> should spend the time to build an auto-registration system that doesn't
> involve static constructors?
> I would volunteer to do the work, however this obviously needs some
> consensus first on how that would look.
>
> >
> > It needs custom code for every supported object file format, and is hard
> to get right when DSOs are involved, but in the long run it's probably
> worth fixing this problem once and for all.
> I assume you are thinking about creating custom linker sections with list
> of init functions; Similar to the existing constructors sections but
> running at a time controlled by llvm code. While the compiler/linker nerd
> in me would love doing that, I could see this being very tricky to pull off
> consistenly on all platforms.
>

The goal of using sections would be to build the array of statistics
without running any code. This is only possible when you have one DSO. Once
you have a second DSO, it will need to run some initialization code to link
the two arrays together.

We should not forget that there is a portable and proven solution: Just
> write the code!


Yep, that always works, and you can control when it happens so you don't
have to run initializers scattered across your binary at startup.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161213/43873af1/attachment.html>


More information about the llvm-dev mailing list