[Haskell-cafe] GHC API question

Chris Smith cdsmith at gmail.com
Sun Aug 28 18:57:58 CEST 2011

On Sun, 2011-08-28 at 17:47 +0100, Thomas Schilling wrote:
> I don't think you can link GHCi with binaries compiled in profiling
> mode.  You'll have to build an executable.

Okay... sorry to be obtuse, but what exactly does this mean?  I'm not
using GHCi at all: I *am* in an executable built with profiling info.

I'm doing this:

        dflags <- GHC.getSessionDynFlags
        let dflags' = dflags {
            GHC.ghcMode = GHC.CompManager,
            GHC.ghcLink = GHC.LinkInMemory,
            GHC.hscTarget = GHC.HscAsm,
            GHC.optLevel = 2,
            GHC.safeHaskell = GHC.Sf_Safe,
            GHC.packageFlags = [GHC.TrustPackage "gloss" ],
            GHC.log_action = addErrorTo codeErrors
        GHC.setSessionDynFlags dflags'
        target <- GHC.guessTarget filename Nothing
        GHC.setTargets [target]
        r      <- fmap GHC.succeeded (GHC.load GHC.LoadAllTargets)

and then if r is true:

        mods <- GHC.getModuleGraph
        let mainMod = GHC.ms_mod (head mods)
        Just mi <- GHC.getModuleInfo mainMod
        let tyThings = GHC.modInfoTyThings mi
        let var = chooseTopLevel varname tyThings
        session <- GHC.getSession
        v       <- GHC.liftIO $ GHC.getHValue session (GHC.varName var)
        return (unsafeCoerce# v)

Here, I know that chooseTopLevel is working, but the getHValue part only
works without profiling.  So is this still hopeless, or do I just need
to find the right additional flags to add to dflags'?

Chris Smith

More information about the Haskell-Cafe mailing list