llvm-hs 5.1.2 → 5.1.3
raw patch · 7 files changed
+88/−1 lines, 7 filesdep ~pretty-showPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: pretty-show
API changes (from Hackage documentation)
+ LLVM.Internal.FFI.DynamicLibrary: loadLibraryPermanently :: CString -> IO LLVMBool
+ LLVM.Internal.FFI.RTDyldMemoryManager: getSymbolAddressInProcess :: CString -> IO Word64
+ LLVM.Internal.Linking: getSymbolAddressInProcess :: MangledSymbol -> IO WordPtr
+ LLVM.Internal.Linking: loadLibraryPermanently :: Maybe FilePath -> IO Bool
+ LLVM.Linking: getSymbolAddressInProcess :: MangledSymbol -> IO WordPtr
+ LLVM.Linking: loadLibraryPermanently :: Maybe FilePath -> IO Bool
Files
- CHANGELOG.md +4/−0
- llvm-hs.cabal +6/−1
- src/LLVM/Internal/FFI/DynamicLibrary.hs +14/−0
- src/LLVM/Internal/FFI/RTDyldMemoryManager.cpp +14/−0
- src/LLVM/Internal/FFI/RTDyldMemoryManager.hs +13/−0
- src/LLVM/Internal/Linking.hs +30/−0
- src/LLVM/Linking.hs +7/−0
CHANGELOG.md view
@@ -1,3 +1,7 @@+## 5.1.3 (2018-01-06)++* Add bindings to `loadLibraryPermamently` and `getSymbolAddressInProcess`.+ ## 5.1.2 (2017-12-19) * Reupload of 5.1.1 since [Hackage broke](https://github.com/haskell/hackage-server/issues/643) during the original upload.
llvm-hs.cabal view
@@ -1,5 +1,5 @@ name: llvm-hs-version: 5.1.2+version: 5.1.3 license: BSD3 license-file: LICENSE author: Anthony Cowley, Stephen Diehl, Moritz Kiefer <moritz.kiefer@purelyfunctional.org>, Benjamin S. Scarlet@@ -156,6 +156,7 @@ LLVM.Internal.FFI.Constant LLVM.Internal.FFI.Context LLVM.Internal.FFI.DataLayout+ LLVM.Internal.FFI.DynamicLibrary LLVM.Internal.FFI.ExecutionEngine LLVM.Internal.FFI.Function LLVM.Internal.FFI.GlobalAlias@@ -177,6 +178,7 @@ LLVM.Internal.FFI.PassManager LLVM.Internal.FFI.PtrHierarchy LLVM.Internal.FFI.RawOStream+ LLVM.Internal.FFI.RTDyldMemoryManager LLVM.Internal.FFI.ShortByteString LLVM.Internal.FFI.SMDiagnostic LLVM.Internal.FFI.Target@@ -185,6 +187,8 @@ LLVM.Internal.FFI.Type LLVM.Internal.FFI.User LLVM.Internal.FFI.Value+ LLVM.Internal.Linking+ LLVM.Linking LLVM.Module LLVM.OrcJIT LLVM.PassManager@@ -221,6 +225,7 @@ src/LLVM/Internal/FFI/OrcJITC.cpp src/LLVM/Internal/FFI/RawOStreamC.cpp src/LLVM/Internal/FFI/PassManagerC.cpp+ src/LLVM/Internal/FFI/RTDyldMemoryManager.cpp src/LLVM/Internal/FFI/SMDiagnosticC.cpp src/LLVM/Internal/FFI/TargetC.cpp src/LLVM/Internal/FFI/TypeC.cpp
+ src/LLVM/Internal/FFI/DynamicLibrary.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE ForeignFunctionInterface #-}++-- | FFI functions for handling the DynamicLibrary class+module LLVM.Internal.FFI.DynamicLibrary where++import LLVM.Prelude++import Foreign.C++import LLVM.Internal.FFI.LLVMCTypes++-- | <https://llvm.org/doxygen/Support_8h.html#a6fc1331c1a6d2cc6f0fda94f4a4636f9>+foreign import ccall safe "LLVMLoadLibraryPermanently" loadLibraryPermanently ::+ CString -> IO LLVMBool
+ src/LLVM/Internal/FFI/RTDyldMemoryManager.cpp view
@@ -0,0 +1,14 @@+#define __STDC_LIMIT_MACROS++#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"++using namespace llvm;++extern "C" {++uint64_t LLVM_Hs_GetSymbolAddressInProcess(const char *name) {+ std::string nameStr(name);+ return RTDyldMemoryManager::getSymbolAddressInProcess(nameStr);+}++}
+ src/LLVM/Internal/FFI/RTDyldMemoryManager.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE ForeignFunctionInterface #-}++-- | FFI functions for handling the RTDyldMemoryManager class+module LLVM.Internal.FFI.RTDyldMemoryManager where++import LLVM.Prelude++import Data.Word+import Foreign.C.String++-- | <https://llvm.org/doxygen/classllvm_1_1RTDyldMemoryManager.html#a5fee247bdc0c5af393b66bfd73a0a347>+foreign import ccall safe "LLVM_Hs_GetSymbolAddressInProcess" getSymbolAddressInProcess ::+ CString -> IO Word64
+ src/LLVM/Internal/Linking.hs view
@@ -0,0 +1,30 @@+module LLVM.Internal.Linking+ ( loadLibraryPermanently+ , getSymbolAddressInProcess+ )where++import LLVM.Prelude++import qualified Data.ByteString as BS+import Foreign.C.String+import Foreign.Ptr+import LLVM.Internal.Coding+import qualified LLVM.Internal.FFI.DynamicLibrary as DL+import qualified LLVM.Internal.FFI.RTDyldMemoryManager as Dyld+import LLVM.Internal.OrcJIT++-- | Get the address of the given symbol in+-- the current process' address space.+getSymbolAddressInProcess+ :: MangledSymbol -> IO WordPtr+getSymbolAddressInProcess (MangledSymbol sym)+ = fromIntegral <$> BS.useAsCString sym Dyld.getSymbolAddressInProcess++-- | Loads the given dynamic library permanently. If 'Nothing'+-- is given, this will make the symbols from the current+-- process available.+loadLibraryPermanently+ :: Maybe FilePath+ -> IO Bool+loadLibraryPermanently (Just fp) = decodeM =<< withCString fp DL.loadLibraryPermanently+loadLibraryPermanently Nothing = decodeM =<< DL.loadLibraryPermanently nullPtr
+ src/LLVM/Linking.hs view
@@ -0,0 +1,7 @@+-- | Utility functions for resolving external symbols+module LLVM.Linking+ ( loadLibraryPermanently+ , getSymbolAddressInProcess+ ) where++import LLVM.Internal.Linking