3165e3c2f4
GHC unix lib uses `ccall` ffi which ignores include indirection. It directly links against available symbols during compile. Although, directly linking to `libandroid-posix-semaphore` should work too, but that depends upon library load order during runtime, i.e if `libc` is loaded before (very unlikely, unless LD_PRELOAD is set) `libandroid-posix-semaphore`, it would use sem_{open,close,unlink} from it, which isn't implemented. So, to be sure that it always links against `libandroid-posix-semaphore` symbols, I have patched it to use `capi` ffi which considers include indirections. Signed-off-by: Aditya Alok <dev.aditya.alok@gmail.com>
26 lines
983 B
Diff
26 lines
983 B
Diff
--- ghc-8.10.7/libraries/unix/System/Posix/Semaphore.hsc 2020-04-19 14:47:09.000000000 +0530
|
|
+++ ghc-8.10.7-patch/libraries/unix/System/Posix/Semaphore.hsc 2022-04-11 12:43:10.193206043 +0530
|
|
@@ -3,6 +3,7 @@
|
|
#else
|
|
{-# LANGUAGE Trustworthy #-}
|
|
#endif
|
|
+{-# LANGUAGE CApiFFI #-}
|
|
-----------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : System.Posix.Semaphore
|
|
@@ -114,11 +115,11 @@
|
|
cint <- peek ptr
|
|
return $ fromEnum cint
|
|
|
|
-foreign import ccall safe "sem_open"
|
|
+foreign import capi safe "semaphore.h sem_open"
|
|
sem_open :: CString -> CInt -> CMode -> CUInt -> IO (Ptr ())
|
|
-foreign import ccall safe "sem_close"
|
|
+foreign import capi safe "semaphore.h sem_close"
|
|
sem_close :: Ptr () -> IO CInt
|
|
-foreign import ccall safe "sem_unlink"
|
|
+foreign import capi safe "semaphore.h sem_unlink"
|
|
sem_unlink :: CString -> IO CInt
|
|
|
|
foreign import ccall safe "sem_wait"
|