This reverses commit 1686f30951292e94bf3076ce8b3eafb0bcbba91d (Mangle .subsections_via_symbols away., D3287),
and implements proper support for -dead_strip via the injection of .alt_entry symbols for the function
definition pointing to the beginning of the prefix data.
This is the result of a lengthy discussion with rwbarton, and the following llvm-dev mailing list thread:
The essential problem is that there is no reference from a function to its info table.
This combined with .subsections_via_symbols, which llvm emits unconditionally, leads
the linker to believe that the prefix data is unnecessary and stripping it away if presented with the
The NCG has for this purpose special $dsp (dead strip preventer) symbols and adds a relocation
to the end of each function body pointing to that function's $dsp symbol. We cannot easily do the
same thing via LLVM. Instead we use the .alt_entry directive on the function symbol, which causes
the linker to treat it as a continuation of the previous symbol, namely the $dsp symbol. As a result
the function body will not be separated from its info table.