Hi, On 2018-03-04 21:00:06 -0800, Andres Freund wrote: > > Looking at llvm_get_function(), the function that raises that error, I > > see that there are a few different paths here. I don't have > > HAVE_DECL_LLVMORCGETSYMBOLADDRESSIN defined, and I don't have LLVM < > > 5, so I should be getting the symbol address with > > LLVMOrcGetSymbolAddress(llvm_opt0_orc, &addr, mangled) or > > LLVMOrcGetSymbolAddress(llvm_opt3_orc, &addr, mangled), but clearly > > those are returning NULL. > > Yep. I wonder if this is some symbol naming issue or such, because > emitting and relocating the object worked without an error.
Thanks to Thomas helping get access to an OSX machine I was able to discover what the issue is. OSX prepends, for reason unbeknownst to me, a leading underscore to all function names. That lead to two issues: First JITed functions do not have that underscore (making us look up a non-existing symbol, because llvm_get_function applied mangling). Secondly, llvm_resolve_symbol failed looking up symbol names, because for $reason dlsym() etc do *not* have the names prefixed by the underscore. Easily enough fixed. After that I discovered another problem, the bitcode files for core pg / contrib modules weren't installed. That turned out to be a make version issue, I'd used define install_llvm_module = # body but older make only like define install_llvm_module # body Writing up a patch that I can actually push. Thanks both to Thomas and Peter for pointing me towards this issue! Greetings, Andres Freund