More on FreeBSD/amd64

Gregory Wright gwright at comcast.net
Mon Apr 2 11:57:49 EDT 2007


Hi Ian,

On Apr 1, 2007, at 6:22 PM, Ian Lynagh wrote:

> On Sun, Apr 01, 2007 at 06:10:25PM -0400, Gregory Wright wrote:
>>
>>> Ah, remove the #if/#endif around the definition of "puts", its  
>>> export,
>>> and the GHC.Pack import in libraries/base/GHC/Handle.hs
>>>
>> No such luck.  I even copied "puts" into libraries/base/GHC/
>> ForeignPtr.hs
>> but I still get I cycle because I need withCString to define "puts":
>
> Oh, the 6.4.2 definition is different to the 6.6 definition.
>
> Does the 6.6 one work with 6.4.2?:
>
> puts :: String -> IO ()
> puts s = do write_rawBuffer 1 (unsafeCoerce# (packCString# s))
>                             0 (fromIntegral (length s))
>             return ()
>
> (packCString# come from GHC.Pack)
>


Still doesn't work.  If I include the definition of write_rawBuffer just
above puts (I can't import GHC.Handle because of the dependency loop)
and dangerously change CInt to Int in the signature (can't import
Foreign.C.Types for the same reason) I still get an error message
saying that "fromInteger" is out of scope.

This is what I have added to libraries/base/GHC/ForeignPtr.hs:

import GHC.List         ( null )
import GHC.Base
import GHC.IOBase
import GHC.List         ( length )
import GHC.Pack				-- this is new
import GHC.Ptr          ( Ptr(..) )
import GHC.Err
import GHC.Show

foreign import ccall unsafe "__hscore_PrelHandle_write"
    write_rawBuffer :: Int -> RawBuffer -> Int -> Int -> IO Int

puts :: String -> IO ()
puts s = do
         write_rawBuffer 1 (unsafeCoerce# (packCString# s))
                 0 (length s)
         return ()


I'm wondering if I should just give up on trying to print anything
out from this deep in the libraries and go back to looking at the
debugger trace.  My guess is still that a FreeBSD libc function
is getting called and somehow storing a 32 bit value in a 64 bit
location, with junk in the high order word.

As always, hints and firm whacks on the side of the head will be
appreciated.

Best Wishes,
Greg





More information about the Glasgow-haskell-users mailing list