On 04 March 2005 17:32, Kurt Roeckx wrote: > I have no idea what ghc has too do with gcc,
A bit of background: GHC uses gcc as a backend compiler. GHC generates C code that is compiled using gcc (we also have a native code generator for some platforms; but not for x86_64 yet). > or what the problem exactly is. The problem is that gcc generates incorrect code for C code that uses global register variables. You won't have noticed this, because most programs don't use global register variables. GHC uses global register variables to speed up the generated code. > We have very little problems with gcc for the debian > amd64 port. Our default compiler is still 3.3. This builds > almost everything without problems, however we build a few > mozilla packages with gcc-3.4. > > All I can tell is that ghc6 seems to be working on debian amd64. > It can build itself and things like that. That build of ghc6 is what we call "unregisterised": it doesn't make use of register variables to speed up the generated code. IOW, it generates plain ANSI C code, which gcc compiles fine. > Can someone please give a test case (and show what to do) to see > what is wrong? Ok, here's a really simple example: $ cat bug.c register void * R1 __asm__("%r13"); extern void g(void); static void f(void) { R1 = g; goto *R1; } $ gcc -S -O bug.c $ And take a look at the generated assembly for the function f: f: .LFB2: movl $g, %eax jmp *%rax Note that the assignment to the global variable R1 has been lost. It works fine on x86 though: change the register variable to %esi and try it. > Out current default compiler in debian is: > gcc version 3.3.5 (Debian 1:3.3.5-8) > > The gcc 3.4 version is: > gcc version 3.4.4 20050203 (prerelease) (Debian 3.4.3-9) > > And ghc6 is at version 6.2.2-3. I'm going to try with different versions of gcc. I've just submitted this bug report to the gcc guys. Cheers, Simon