Kevin GLYNN writes:
>
> I have written a small application which uses Mutable Arrays to fixpoint
> boolean equations. It builds and runs, but slowly! In an attempt to see
> what is going on I am trying to build a profiled version. I have built
> all modules with -O2 -prof -auto-all -fvia-C (via-C doesn't seem to
> solve the problem). However, this refuses to link because of undefined
> symbols, here is a bit of output from the build ....
>
...
> Undefined first referenced
> symbol in file
> CC_STRobddZdSTRobddZdinitZurobddZdAUTO_struct fixpoint.o
> CC_STRobddZdSTRobddZdinitZurobddZdAUTOZdDUPD_struct fixpoint.o
> CC_STRobddZdSTRobddZdinitZurobddZdAUTO fixpoint.o
> CC_STRobddZdSTRobddZdinitZurobddZdAUTOZdDUPD fixpoint.o
> ld: fatal: Symbol referencing errors. No output written to ht
> gmake: *** [ht] Error 1
>
Hi,
you don't say what version you're using, but I'm guessing it's 3.01.
There'a a couple of patches that should fix the problem of
cross-module scc inlinings for 3.01 - appended at the end.
Pls let us know if this doesn't fix things.
--Sigbjorn
*** ghc/compiler/profiling/CostCentre.lhs 1998/02/26 13:47:07 1.19
--- ghc/compiler/profiling/CostCentre.lhs 1998/03/12 12:23:33
***************
*** 425,429 ****
---------------
! do_dupd sty ADupdCC str = if (friendly_sty sty) then str ++ "/DUPD" else str
do_dupd _ _ str = str
\end{code}
--- 425,429 ----
---------------
! do_dupd sty ADupdCC str = if (debugStyle sty) then str ++ "/DUPD" else str
do_dupd _ _ str = str
\end{code}
*** ghc/compiler/profiling/CostCentre.lhs 1998/02/09 12:53:44 1.18
--- ghc/compiler/profiling/CostCentre.lhs 1998/02/26 13:29:01
***************
*** 386,394 ****
module_kind = do_caf is_caf (moduleString mod_name ++ '/':
basic_kind)
! grp_str = if (_NULL_ grp_name) then mod_name else grp_name
! full_kind = do_caf is_caf
! (moduleString mod_name ++
! ('/' : _UNPK_ grp_str) ++
! ('/' : basic_kind))
in
if (friendly_sty sty) then
--- 386,401 ----
module_kind = do_caf is_caf (moduleString mod_name ++ '/':
basic_kind)
! grp_str = []
! {- TODO: re-instate this once interface file lexer
! handles groups.
! grp_str =
! if (_NULL_ grp_name) then
! []
! else
! '/' : (_UNPK_ grp_name)
! -}
! full_kind = do_caf is_caf
! (moduleString mod_name ++
! grp_str ++ ('/' : basic_kind))
in
if (friendly_sty sty) then
***************
*** 407,412 ****
do_kind (UserCC name) = _UNPK_ name
! do_kind (AutoCC id) = do_id id ++ (if (friendly_sty sty) then "/AUTO" else
"")
! do_kind (DictCC id) = do_id id ++ (if (friendly_sty sty) then "/DICT" else
"")
{-
--- 414,419 ----
do_kind (UserCC name) = _UNPK_ name
! do_kind (AutoCC id) = do_id id ++ (if (debugStyle sty) then "/AUTO" else "")
! do_kind (DictCC id) = do_id id ++ (if (debugStyle sty) then "/DICT" else "")
{-