On 14 Jul 2010, at 22:00, Alexander Hansen wrote:
> On 7/14/10 2:33 PM, Jean-François Mertens wrote:
>> B) With 32bit (thus ghc-6.8.3-2),
>>
>>> ../compiler/ghc-inplace -H16m -O -I/sw/include -L/sw/lib -optc-O2 -
>>> package-name rts -static -I../gmp/gmpbuild -I. -#include
>>> HCIncludes.h -dcmm-lint -hisuf p_hi -hcsuf p_hc -osuf p_o -prof -
>>> c Updates.cmm -o Updates.p_o
>>> /tmp/ghc29322_0/ghc29322_0.s:unknown:Undefined local symbol
>>> LDV_recordDead_FILL_SLOP_DYNAMIC
>>
> I didn't reproduce the error on 10.5.8/i386/Xcode 3.1.4. The build
> succeeded for me.
Am on identical setup.. [possible diffs in X11 (here X11-2.5.1) are
obviously irrelevant]
Before sending the previous msg, I did check for the most obvious
candidate
by re-running the same command without the '-I/sw/include' flag
(since it precedes all others) _ no succes: same result...
Thus, diffs in fink installations also can't explain the thing, at the
level
of this command (note the "-c" : no linking is involved, and the "local"
in the error msg must mean something from the compiler's point of
view..).
Seems thus there is some hard work to do ... I hope the maintainer can
help us..
First : to be sure, this happens during stage1 , i.e., ../compiler/ghc-
inplace -> stage1/ghc-inplace.
Alexander: do you really have there an identical command to the above
(if you still have a build-log)?
If yes, it would seem that identical commands on identical
installations _ since the fink installation
itsef plays apparently no role _ have different effects...; so the
only conclusion would be that my
stage1 compiler differs from yours (and may be wrong)...
[I know Apple's OS may seem like a randomising machine
("by useless complications" + iGimmicks, or others that have no place
in an OS..
_ I hate this _; but not at this level...!]
[I did't see anything obviously wrong by scanning higher up in the
build..]
Or is there some other possibility, that I overlooked ?
Next question is probably to Brendan...
I ran the same command adding " -v5 -keep-tmp-files" at the end.
The output seemed completely reasonable; in particular, the cmmcpp
temp file ends with
apparently the following defs for the 2 symbols stg_upd_frame and
stg_marked_upd_frame
defined in Updates.cmm :
> 54 INFO_TABLE_RET( stg_upd_frame, 38, bits32 unused1, bits32
> unused2, "ptr" bits32 unused3)
> 55 { bits32 updatee; updatee = bits32[Sp+SIZEOF_StgHeader+0]; Sp =
> Sp + (SIZEOF_StgHeader+4); ; ; bits32 info; info = bits32[updatee
> +0]; bits32 bd; ; foreign "C"
> LDV_recordDead_FILL_SLOP_DYNAMIC(updatee "ptr"); bits32[updatee
> +SIZEOF_StgHeader+0] = R1; prim %write_barrier() []; bd =
> ((((updatee) & ((1<<20)-1) & ~((1<<12)-1)) >> (12 -5)) | ((updatee)
> & ~((1<<20)-1))); if (bits32[bd+16] != 0 :: bits32) { bits32 __bd;
> bits32 mut_list; mut_list = bits32[(BaseReg - 8)+220] +
> ((%sx32(bits32[bd+16]))*4); __bd = bits32[mut_list]; if (bits32[__bd
> +4] >= bits32[__bd+0] + (1<<12)) { bits32 __new_bd; ("ptr" __new_bd)
> = foreign "C" allocBlock_lock() [R1]; bits32[__new_bd+8] = __bd;
> __bd = __new_bd; bits32[mut_list] = __bd; } bits32 free; free =
> bits32[__bd+4]; bits32[free] = updatee; bits32[__bd+4] = free +
> ((1)*4);; bits32[updatee+0] = stg_IND_OLDGEN_info;
> LDV_RECORD_CREATE(updatee); ; jump %ENTRY_CODE(bits32[Sp +
> ((0)*4)]); } else { bits32[updatee+0] = stg_IND_direct_info;
> LDV_RECORD_CREATE(updatee); ; jump %ENTRY_CODE(bits32[Sp +
> ((0)*4)]); }; ; }
> 56
> 57
> 58 INFO_TABLE_RET( stg_marked_upd_frame, 38, bits32 unused1, bits32
> unused2, "ptr" bits32 unused3)
> 59 { bits32 updatee; updatee = bits32[Sp+SIZEOF_StgHeader+0]; Sp =
> Sp + (SIZEOF_StgHeader+4); ; ; bits32 info; info = bits32[updatee
> +0]; bits32 bd; ; foreign "C"
> LDV_recordDead_FILL_SLOP_DYNAMIC(updatee "ptr"); bits32[updatee
> +SIZEOF_StgHeader+0] = R1; prim %write_barrier() []; bd =
> ((((updatee) & ((1<<20)-1) & ~((1<<12)-1)) >> (12 -5)) | ((updatee)
> & ~((1<<20)-1))); if (bits32[bd+16] != 0 :: bits32) { bits32 __bd;
> bits32 mut_list; mut_list = bits32[(BaseReg - 8)+220] +
> ((%sx32(bits32[bd+16]))*4); __bd = bits32[mut_list]; if (bits32[__bd
> +4] >= bits32[__bd+0] + (1<<12)) { bits32 __new_bd; ("ptr" __new_bd)
> = foreign "C" allocBlock_lock() [R1]; bits32[__new_bd+8] = __bd;
> __bd = __new_bd; bits32[mut_list] = __bd; } bits32 free; free =
> bits32[__bd+4]; bits32[free] = updatee; bits32[__bd+4] = free +
> ((1)*4);; bits32[updatee+0] = stg_IND_OLDGEN_info;
> LDV_RECORD_CREATE(updatee); ; jump %ENTRY_CODE(bits32[Sp +
> ((0)*4)]); } else { bits32[updatee+0] = stg_IND_direct_info;
> LDV_RECORD_CREATE(updatee); ; jump %ENTRY_CODE(bits32[Sp +
> ((0)*4)]); }; ; }
where in both places the "Undefined local symbol" from the error msg
seems declared as
> foreign "C" LDV_recordDead_FILL_SLOP_DYNAMIC(updatee "ptr")
i.e., in my very impressionistic readng, anything but local ..
[Later (say "Optimised Cmm"), this yields like
> call "ccall" LDV_recordDead_FILL_SLOP_DYNAMIC((_cj, PtrHint))
> [_unsafe_call_];
and then in asm ("Native code"):
> call LDV_recordDead_FILL_SLOP_DYNAMIC
]
...
What is the exact meaning of that error message ?
Any ideas ? Or further things to look for ?
JF
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Fink-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fink-users