
On Fri, 26 Sep 2003, Rafael Martinez Torres wrote:
I enabled the flags -g
Sorry , the previous mail was incomplete. "send" button fired. GhcRtsHcOpts= -g -optc-DDEBUG GhcRtsCcOpts= -g This is my session with gdb , ghc-6.0.1 and mips-sgi-irix65. I thinks this has nothing to do with the gmp library, but with StgPrimFloat.c , line 250 DEbugging with gdb on a multithread RTS seems not easy . When the program crash - I ask - is there any thread other than evaluator one present at RTS ? I don't understand very much on RTS internals, but, I guess a simple "Hello World" thread may not deal with "decodeFloat operations" May be the compiler gcc-3.0 is faulty for big binaries, due to MULTIGOT linker, as gcc-2.95 was , and pointers are out of control. I will try gcc-3.2 then .. Cheers. bash-2.05a$ !gdb gdb ghc/compiler/stage1/ghc-6.0.1 (gdb) set args "-B./" -"hello.hs" (gdb) break main Breakpoint 1 at 0x1155242c: file Main.c, line 56. (gdb) run Starting program: /scratch/users/eden/6.0.1/ghc-6.0.1-mips/ghc/compiler/stage1/ghc-6.0.1 "-B./" "hello.hs" Breakpoint 1, main (argc=3, argv=0x7fff2e84) at Main.c:56 56 startupHaskell(argc,argv,__stginit_Main); (gdb) n 108 status = rts_mainLazyIO((HaskellObj)mainIO_closure, NULL); (gdb) s rts_mainLazyIO (p=0x116b3620, ret=0x0) at SchedAPI.h:54 54 createIOThread(nat stack_size, StgClosure *closure) { (gdb) n 59 t = createThread(stack_size); .. .. .. 428 scheduleThread(tso); (gdb) n 429 return waitThread(tso, ret); (gdb) n waitThread (tso=0x41c0000, ret=0x116b3620) at Schedule.c:2276 2276 { (gdb) n 2280 m = stgMallocBytes(sizeof(StgMainThread), "waitThread"); (gdb) n 2281 m->tso = tso; (gdb) n .. .. .. (gdb) n 2291 main_threads = m; (gdb) n 2297 stat = waitThread_(m); (gdb) n 0x1153c0e8 in waitThread () Current language: auto; currently asm (gdb) s Single stepping until exit from function waitThread, which has no line number information. 0x1153b164 in updateStablePtrTable () (gdb) n Single stepping until exit from function updateStablePtrTable, which has no line number information. Program received signal SIGSEGV, Segmentation fault. __decodeFloat (man=0x7fff2d00, exp=0x7fff2d10, flt=66.6666641) at StgPrimFloat.c:250 250 if (sign < 0) Current language: auto; currently c (gdb) quit The program is running. Exit anyway? (y or n) y