Add in some methods for use by the JIT. LoadLibraryPermanently brings the
authorReid Spencer <rspencer@reidspencer.com>
Mon, 29 Nov 2004 13:27:56 +0000 (13:27 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 29 Nov 2004 13:27:56 +0000 (13:27 +0000)
library into the address space permanently. SearchForAddressOfSymbol looks
in all previously permanently loaded libraries and any currently open
libraries for a symbol, instead of just one library like GetAddressOfSymbol

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18354 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/System/DynamicLibrary.h

index d8535284eb98d2053ee9f6b97561be0b3132e211..6f1ebb599110d888658f8c7843de182f4c9a11ea 100644 (file)
@@ -56,6 +56,31 @@ namespace sys {
       /// @brief Closes the DynamicLibrary
       ~DynamicLibrary();
 
+    /// @}
+    /// @name Functions
+    /// @{
+    public:
+      /// This function allows a library to be loaded without instantiating a
+      /// DynamicLibrary object. Consequently, it is marked as being permanent
+      /// and will only be unloaded when the program terminates.
+      /// @throws std::string on error.
+      /// @brief Open a dynamic library permanently.
+      static void LoadLibraryPermanently(const char* filename);
+
+      /// This function will search through all previously loaded dynamic
+      /// libraries for the symbol \p symbolName. If it is found, the addressof
+      /// that symbol is returned. If not, null is returned. Note that this will
+      /// search permanently loaded libraries (LoadLibraryPermanently) as well
+      /// as ephemerally loaded libraries (constructors).
+      /// @throws std::string on error.
+      /// @brief Search through libraries for address of a symbol
+      static void* SearchForAddressOfSymbol(const char* symbolName);
+
+      /// @brief Convenience function for C++ophiles.
+      static void* SearchForAddressOfSymbol(const std::string& symbolName) {
+        return SearchForAddressOfSymbol(symbolName.c_str());
+      }
+
     /// @}
     /// @name Accessors
     /// @{