
#7753: Profiling report broken with foreign exported functions -------------------------+-------------------------------------------------- Reporter: akio | Owner: Type: bug | Status: new Priority: normal | Component: Profiling Version: 7.6.2 | Keywords: Os: Linux | Architecture: Unknown/Multiple Failure: None/Unknown | Blockedby: Blocking: | Related: -------------------------+-------------------------------------------------- Save the following Haskell source as wrapper.hs: {{{ import Foreign.Ptr import Control.Monad main = do fptr <- wrap wrapped replicateM 100 $ (return$!) =<< dyn fptr 4 wrapped :: Double -> IO Double wrapped x = return $ f 10000 x f :: Int -> Double -> Double f 0 u = u f n u = (u / fromIntegral n) * f (n-1) u foreign import ccall "wrapper" wrap :: (Double -> IO Double) -> IO (FunPtr (Double -> IO Double)) foreign import ccall "dynamic" dyn :: FunPtr (Double -> IO Double) -> Double -> IO Double }}} Then compile and run it with: {{{ $ ghc -O2 wrapper.hs -fprof-auto -prof $ ./wrapper +RTS -p }}} It generates wrapper.prof (attached). The file contains the following lines: {{{ CAF GHC.IO.Encoding.Iconv 58 0 0.0 0.2 0.0 0.2 wrapped Main 80 100 0.0 1.1 0.0 0.0 f Main 81 1000100 100.0 0.0 0.0 0.0 }}} I see two problems here, (1) the inherited column is 0 for 'wrapped' and 'f' but this is incorrect, and (2) 'wrapped' and 'f' belongs to the wrong cost center, 'GHC.IO.Encoding.Iconv'. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7753 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler