David Eichmann pushed to branch wip/davide/windows-dlls at Glasgow Haskell Compiler / GHC Commits: bc9920f8 by David Eichmann at 2026-06-29T16:59:50+01:00 WIP export-all-symbols from hadrian - - - - - 9 changed files: - hadrian/src/Settings/Packages.hs - libraries/Win32 - libraries/base/src/Control/Concurrent.hs - libraries/bytestring - libraries/ghc-internal/cbits/inputReady.c - libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs - libraries/ghc-internal/src/GHC/Internal/Float.hs - libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs - libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs Changes: ===================================== hadrian/src/Settings/Packages.hs ===================================== @@ -322,6 +322,7 @@ rtsPackageArgs = package rts ? do , Threaded `wayUnit` way ? arg "-DTHREADED_RTS" , notM targetSupportsSMP ? arg "-optc-DNOSMP" , isWinHost ? arg "-optl-Wl,--disable-runtime-pseudo-reloc" + <> arg "-optl-Wl,--export-all-symbols" -- See Note [AutoApply.cmm for vectors] in genapply/Main.hs -- ===================================== libraries/Win32 ===================================== @@ -1 +1 @@ -Subproject commit 7d0772bb265a6c59eb14c441cf65c778895528df +Subproject commit 174dd3223e26137e1d398c445734fd4ea3a1d1dc ===================================== libraries/base/src/Control/Concurrent.hs ===================================== @@ -132,6 +132,12 @@ import Control.Concurrent.Chan import Control.Concurrent.QSem import Control.Concurrent.QSemN + +-- Needed for windows dynamic builds +-- TODO we may need to disable inlining of ccalls by default +{-# NOINLINE waitFd #-} + + {- $conc_intro The concurrency extension for Haskell is described in the paper ===================================== libraries/bytestring ===================================== @@ -1 +1 @@ -Subproject commit d984ad00644c0157bad04900434b9d36f23633c5 +Subproject commit a7b567d017d21134350894e69ecfa157e36f6ec0 ===================================== libraries/ghc-internal/cbits/inputReady.c ===================================== @@ -150,6 +150,7 @@ compute_WaitForSingleObject_timeout(bool infinite, Time remaining) * 1 => Input ready, 0 => not ready, -1 => error * On error, sets `errno`. */ +__attribute__((dllexport)) int fdReady(int fd, bool write, int64_t msecs, bool isSock) { ===================================== libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs ===================================== @@ -622,8 +622,11 @@ foreign import ccall unsafe "integer_gmp_mpn_xor_n" -> IO () -- mp_bitcnt_t mpn_popcount (const mp_limb_t *s1p, mp_size_t n) +{-# NOINLINE c_mpn_popcount #-} +c_mpn_popcount :: ByteArray# -> GmpSize# -> Word# +c_mpn_popcount a b = _c_mpn_popcount a b foreign import ccall unsafe "gmp.h __gmpn_popcount" - c_mpn_popcount :: ByteArray# -> GmpSize# -> Word# + _c_mpn_popcount :: ByteArray# -> GmpSize# -> Word# -- double integer_gmp_mpn_get_d (const mp_limb_t sp[], const mp_size_t sn) foreign import ccall unsafe "integer_gmp_mpn_get_d" ===================================== libraries/ghc-internal/src/GHC/Internal/Float.hs ===================================== @@ -1632,17 +1632,47 @@ atanhDouble (D# x) = D# (atanhDouble# x) powerDouble :: Double -> Double -> Double powerDouble (D# x) (D# y) = D# (x **## y) -foreign import ccall unsafe "isFloatNaN" isFloatNaN :: Float -> Int -foreign import ccall unsafe "isFloatInfinite" isFloatInfinite :: Float -> Int -foreign import ccall unsafe "isFloatDenormalized" isFloatDenormalized :: Float -> Int -foreign import ccall unsafe "isFloatNegativeZero" isFloatNegativeZero :: Float -> Int -foreign import ccall unsafe "isFloatFinite" isFloatFinite :: Float -> Int - -foreign import ccall unsafe "isDoubleNaN" isDoubleNaN :: Double -> Int -foreign import ccall unsafe "isDoubleInfinite" isDoubleInfinite :: Double -> Int -foreign import ccall unsafe "isDoubleDenormalized" isDoubleDenormalized :: Double -> Int -foreign import ccall unsafe "isDoubleNegativeZero" isDoubleNegativeZero :: Double -> Int -foreign import ccall unsafe "isDoubleFinite" isDoubleFinite :: Double -> Int +{-# NOINLINE isFloatInfinite #-} +isFloatInfinite :: Float -> Int +isFloatInfinite x = cIsFloatInfinite x +foreign import ccall unsafe "isFloatInfinite" cIsFloatInfinite :: Float -> Int +{-# NOINLINE isFloatNaN #-} +isFloatNaN :: Float -> Int +isFloatNaN = _isFloatNaN +foreign import ccall unsafe "isFloatNaN" _isFloatNaN :: Float -> Int +{-# NOINLINE isFloatDenormalized #-} +isFloatDenormalized :: Float -> Int +isFloatDenormalized = _isFloatDenormalized +foreign import ccall unsafe "isFloatDenormalized" _isFloatDenormalized :: Float -> Int +{-# NOINLINE isFloatNegativeZero #-} +isFloatNegativeZero :: Float -> Int +isFloatNegativeZero = _isFloatNegativeZero +foreign import ccall unsafe "isFloatNegativeZero" _isFloatNegativeZero :: Float -> Int +{-# NOINLINE isFloatFinite #-} +isFloatFinite :: Float -> Int +isFloatFinite = _isFloatFinite +foreign import ccall unsafe "isFloatFinite" _isFloatFinite :: Float -> Int + +{-# NOINLINE isDoubleInfinite #-} +isDoubleInfinite :: Double -> Int +isDoubleInfinite x = cIsDoubleInfinite x +foreign import ccall unsafe "isDoubleInfinite" cIsDoubleInfinite :: Double -> Int +{-# NOINLINE isDoubleNaN #-} +isDoubleNaN :: Double -> Int +isDoubleNaN = _isDoubleNaN +foreign import ccall unsafe "isDoubleNaN" _isDoubleNaN :: Double -> Int +{-# NOINLINE isDoubleDenormalized #-} +isDoubleDenormalized :: Double -> Int +isDoubleDenormalized = _isDoubleDenormalized +foreign import ccall unsafe "isDoubleDenormalized" _isDoubleDenormalized :: Double -> Int +{-# NOINLINE isDoubleNegativeZero #-} +isDoubleNegativeZero :: Double -> Int +isDoubleNegativeZero = _isDoubleNegativeZero +foreign import ccall unsafe "isDoubleNegativeZero" _isDoubleNegativeZero :: Double -> Int +{-# NOINLINE isDoubleFinite #-} +isDoubleFinite :: Double -> Int +isDoubleFinite = _isDoubleFinite +foreign import ccall unsafe "isDoubleFinite" _isDoubleFinite :: Double -> Int ------------------------------------------------------------------------ -- Coercion rules ===================================== libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs ===================================== @@ -357,5 +357,8 @@ float2Integer (F# x) = foreign import ccall unsafe "rintDouble" c_rintDouble :: Double -> Double +{-# NOINLINE c_rintFloat #-} +c_rintFloat :: Float -> Float +c_rintFloat = _c_rintFloat foreign import ccall unsafe "rintFloat" - c_rintFloat :: Float -> Float + _c_rintFloat :: Float -> Float ===================================== libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs ===================================== @@ -109,6 +109,14 @@ import GHC.Internal.Num import GHC.Internal.Base ( String, otherwise, return, ($) ) import GHC.Internal.Types ( Bool(..) ) + + +-- Needed for windows dynamic builds +-- TODO we may need to disable inlining of ccalls by default +{-# NOINLINE getErrno #-} + + + -- "errno" type -- ------------ View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bc9920f881987f035c0b5270c59859b7... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/bc9920f881987f035c0b5270c59859b7... You're receiving this email because of your account on gitlab.haskell.org.