[llvm-dev] JIT interaction with linkonce_odr global variables
Haoran Xu via llvm-dev
llvm-dev at lists.llvm.org
Fri Aug 7 02:51:31 PDT 2020
I recently hit an issue when JIT'ing my generated IR using
llvm::orc::LLJIT. My IR contains the following definition of a global
> $_ZZ23TestStaticVarInFunctionbE1x = comdat any
> @_ZZ23TestStaticVarInFunctionbE1x = linkonce_odr dso_local global i32 123,
> comdat, align 4
And in my host process, there exists the same symbol. I would expect LLJIT
to resolve the global variable above to the address inside the host
process, since it has linkage 'linkonce_odr'. However, it turns out that
LLJIT resolved it as if it were a conventional global variable definition
and gave it its own address (I have added 'GetForCurrentProcess' generator
for symbol resolution of course).
I can workaround this issue by making the symbol a declaration (drop the
initializer, comdat and make the linkage external), but I'm wondering if it
is expected behavior that LLJIT does not respect linkonce_odr specifier,
since the documentation says LLJIT's symbol resolution should work as if I
were running a normal linker.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev