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)
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.