Add functionality to load dynamic libraries temporarily
authorMichael Holman <michael.holman@microsoft.com>
Mon, 3 Oct 2022 23:19:47 +0000 (16:19 -0700)
committerStella Stamenova <stilis@microsoft.com>
Mon, 3 Oct 2022 23:20:22 +0000 (16:20 -0700)
commit513f89dc8d894df7d72460943012c3488f2aeec7
tree3d907004e33179b703b43228674fe55b0e9b4755
parentd033ece0c985d3f89c261d030ff2ff1d9c58bbc6
Add functionality to load dynamic libraries temporarily

Previously, it was possible to load dynamic libraries which would be unloaded on llvm_shutdown(), but recently ManagedStatic removal changed this so that loaded libraries really can't ever be unloaded. This functionality was very useful, and so to add it back in a more explicit way, I've added new getLibrary() and closeLibrary() methods to allow callers to use the very convenient platform independent abstraction that LLVM has for dynamic libraries.

As a specific use case, the onnx-mlir project was using this functionality with an API that allows instancing LLVM so you can compile a shared library, and then load that library, and eventually close the instance (and library) and compile something else. This change to llvm_shutdown causes libraries to leak and also locks the libraries for the entire duration of the program which prevents reusing library names.

Reviewed By: lhames

Differential Revision: https://reviews.llvm.org/D134763
llvm/include/llvm/Support/DynamicLibrary.h
llvm/lib/Support/DynamicLibrary.cpp