
Georg Sauthoff wrote:
Ok, I tried[1] that and like I guessed, now I get again the infamous 'Prologue junk?' error' again:
../../ghc/compiler/ghc-inplace -H16m -O -O2 -static -I. -#include Prelude.h -#include Rts.h -#include RtsFlags.h -#include RtsUtils.h -#include StgRun.h -#include Schedule.h -#include Printer.h -#include Sanity.h -#include STM.h -#include Storage.h -#include SchedAPI.h -#include Timer.h -#include Itimer.h -#include ProfHeap.h -#include LdvProfile.h -#include Profiling.h -#include Apply.h -fvia-C -dcmm-lint -c Apply.cmm -o Apply.o Prologue junk?: .globl stg_ap_0_ret .type stg_ap_0_ret, @function stg_ap_0_ret: pushl %ebp movl %esp, %ebp
make[2]: *** [Apply.o] Error 255 make[1]: *** [all] Error 1 make[1]: Leaving directory `/var/tmp/gsauthof/src/nothread/ghc-6.4.2/ghc' make: *** [build] Error 1
This error I don't understand. Doesn't the mangler expects the pushl/movl instructions? Isn't this a 'normal' sequence if the functions pushes local variables to the stack?
Ok, if I diff a raw_s file from linux against one from solaris x86, the pushl/movl sequences are deleted (and the '#NO_APP' command is replaced by '/NO_APP').
You shouldn't see the %ebp instructions, because gcc should be invoked with -fomit-frame-pointer. Is it possible that somehow part of your build thinks it is unregisterised? Try running GHC with -v, see whether the -fomit-frame-pointer flag is being passed to gcc. If not, try to find out why - it should be added by code in ghc/compiler/main/DriverFlags.hs. Cheers, Simon