[ Steve added, for the symbol list question ] On Tue, Apr 09, 2024 at 09:44:43PM +0300, Ilias Tsitsimpis wrote: > On Tue, Apr 09, 2024 at 08:53PM, Adrian Bunk wrote: > > On Tue, Apr 09, 2024 at 07:23:29PM +0300, Ilias Tsitsimpis wrote: > > > I believe it's not. haskell-hourglass used to work on arm{el,hf} just > > > before the time64 transition. > > > > before this transition x32 was the only 32bit architecture with 64bit > > time_t. > > Aha! Didn't know that, thanks for flagging this. I am surprised that we > hadn't noticed this earlier (as we see now, GHC is completely broken).
I wouldn't call it "completely broken". I'm too lazy to get exact numbers, but the arm{el,hf} situation is more like 1000 packages built (a large part with tests) and 10 failed. >... > > > We need a way to identify every package that is broken. > > > > $ nm -D /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHStime-1.12.2-ghc9.4.7.so | > > grep gettimeofday > > U gettimeofday@GLIBC_2.4 > > ... > > > > $ nm -D > > /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHSdirectory-1.3.7.1-ghc9.4.7.so | > > grep utimensat > > ... > > U utimensat@GLIBC_2.6 > > > > $ nm -D /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHStime-1.12.2-ghc9.4.7.so | > > grep localtime > > U __localtime64_r@GLIBC_2.34 > > Thank you! Can we maybe run this against all Haskell libraries and > identify the ones that are currently broken? Maybe we have such a script > already for the time64 transition. Steve, do you have a list of all bad symbols for the time_t transition? With this list it should be possible to just install all currently installable Haskell packages on a porterbox and do something like $ for s in gettimeofday utimensat localtime localtime_r; do for f in /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/*.so /usr/lib/haskell-packages/ghc/lib/arm-linux-ghc-9.4.7/*.so; do nm -D $f | grep $s@ && echo $f; done; done U gettimeofday@GLIBC_2.4 /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHStime-1.12.2-ghc9.4.7.so U utimensat@GLIBC_2.6 /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHSdirectory-1.3.7.1-ghc9.4.7.so U utimensat@GLIBC_2.6 /usr/lib/ghc/lib/arm-linux-ghc-9.4.7/libHSunix-2.7.3-ghc9.4.7.so $ That last one is likely libraries/unix/System/Posix/Files/Common.hsc:foreign import ccall unsafe "utimensat" > > But the last one is the broken localtime_r one, is anything going wrong > > with the ccall from TimeZone.hs to cbits there? > > > > get_current_timezone_seconds() returning long is wrong, > > and might contribute to that bug: > > > > foreign import ccall unsafe "HsTime.h get_current_timezone_seconds" > > get_current_timezone_seconds :: > > CTime -> Ptr CInt -> Ptr CString -> IO CLong > > ... > > getTimeZoneCTime ctime = > > ... > > secs <- get_current_timezone_seconds ctime pdst pcname > > > > I don't know Haskell, but is this declaring ctime as CLong, > > and then passing it instead of a CTime? > > I believe it returns the timezone in seconds (i.e., 3600 for +1 hour > timezone), so CLong should be large enough to hold this value. My guess > right now is that it fails due to the bogus CTime value that we pass, we > need to test this. Yes, I suspect that this function with CTime -> Ptr CInt -> Ptr CString -> IO CLong gets called as CLong -> Ptr CInt -> Ptr CString -> IO CLong but I'm surprised if Haskell does not catch something like that at compile time. > Ilias cu Adrian