[LLD] Mixing bitcode and native code

When having a project that's partially bitcode and partially native code, should lld allow linking a native .o to a bitcode .o?

specifically in my case, I've got an stdcall function in bitcode, called by native code, but it can't find the symbol (bitcode has it
unmangled, native code with _ and @20)

When having thinlto enabled in both ends the same thing happens (but bitcode on both ends works fine)

Mixing native and bitcode files should just work, and that happens all the time, as most programs need at least crt.o (which is a precompiled native object file containing startup code).

Could you elaborate the issue a bit? It might be a bug in lld.

The problem is a bitcode implementation that has a stdcall function that’s used from native code. 1 side has _elements_exception_handler, compiled that would be __elements_exception_handler@20 due to stdcall. The native bit has the mangled name and the linker can’t find it as the bitcode indexes have it without mangling.

I’ll try to prepare a testcase when I get back in the office.

Rui Ueyama ruiu@google.com schreef op 30 maart 2018 19:17:06 CEST:

Clang may be avoiding this problem because it will always emit “\01__elements_exception_handler@20” as the function name. It probably does that for precisely this reason.

Seems my problem was the reverse; the definition did NOT have stdcall properly set; which is why i wasn't found. Setting that and everything worked. Thanks for the help.