<div dir="ltr">Fangrui,<div>All of the OSes/Targets which uses ELF Binary Format  go for default -fuse-init-array except NetBSD.</div><div><div>Please see here</div><div><a href="https://reviews.llvm.org/D71360">https://reviews.llvm.org/D71360</a><br></div></div><div><br></div><div>kamlesh</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Dec 12, 2019 at 11:02 AM Fangrui Song <<a href="mailto:maskray@google.com">maskray@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2019-12-10, Reid Kleckner via llvm-dev wrote:<br>
>I bet if you use `-target i386-linux` it will work. You passed `-target -i386`,<br>
>which is a triple with no OS, so Clang is doing something arbitrary. Grepping<br>
>Clang sources shows that this flag is handled in an OS-specific manner:<br>
><br>
>$ git grep -i fuse_init_array ../clang/lib/Driver/<br>
>../clang/lib/Driver/ToolChains/Fuchsia.cpp:  if (DriverArgs.hasFlag<br>
>(options::OPT_fuse_init_array,<br>
>../clang/lib/Driver/ToolChains/Gnu.cpp:  if (DriverArgs.hasFlag<br>
>(options::OPT_fuse_init_array,<br>
>../clang/lib/Driver/ToolChains/NetBSD.cpp:  if (DriverArgs.hasFlag<br>
>(options::OPT_fuse_init_array,<br>
>../clang/lib/Driver/ToolChains/WebAssembly.cpp:  if (DriverArgs.hasFlag<br>
>(clang::driver::options::OPT_fuse_init_array,<br>
><br>
>The Gnu.cpp file most likely handles the case of Linux.<br>
><br>
>This logic looks like it is ripe for refactoring. Patches very welcome. =(<br>
<br>
We should probably make -fuse-init-array the CC1 default and the default<br>
for Driver/ToolChains/Gnu.cpp. Very few platforms actually use<br>
.ctors/.dtors nowadays. (This caused a bug this year which was fixed by <a href="https://reviews.llvm.org/D62509" rel="noreferrer" target="_blank">https://reviews.llvm.org/D62509</a>)<br>
<br>
If my suggestion does not sound too stupid, I can create a patch.<br>
</blockquote></div>