ok I think you suggest using the function to flush before execution the code. I'll try it. I really appreciate it! rgds joe
--- On Sat, 5/9/09, Zoltan Herczeg <[email protected]> wrote: > From: Zoltan Herczeg <[email protected]> > Subject: Re: [webkit-dev] random seg fault on MIPS platform > To: [email protected] > Cc: [email protected] > Date: Saturday, May 9, 2009, 2:11 AM > Hi, > > I don't know anything about MIPS architecture (only > x86, ARM and PowerPC), > but we have experienced similar things on ARM, until we > have found the > gcc's __clear_cache(void* begin, void* end) function. > It calls a kernel > utility, which flushes out the data cache (some mrc > instructions can only > executed on kernel level). > > 1) The program always fails without gdb, because the > instructions are not > flushed out to the SDRAM. Instruction cache always loads > the instructions > directly form the SDRAM. > 2) With gdb, it is sometimes work, sometimes not. GDB > itself allocates a > big amount of memory, so the cache is partly flushed out > when it stops at > a breakpoint. Note that, the disassembly shows the content > of the data > cache, not the instruction cache. > > Zoltan > > > Hi, > >>50% of time when I use gdb then arith functions > works. it may fail at > >> 1st, or 3rd try, and 100% fail w/o gdb. I just use > jsc to do sth like > >> 5%2, 5*3, etc. > > > > It is with in call of ctiTrampoline(code, > registerFile, callFrame, > > jexception, pptr, globalData), jit code executed and > may be in last line > > of op_mod() when it tried to convert result, gdb > simply shows segment > > fault, or PC stops at an non-coded area, w/o gdb it > says invalid > > instruction. It may be in JITcell,h in > > ALWAYS_INLINE double JSValuePtr::toNumber(ExecState* > exec) const > > { > > return JSImmediate::isImmediate(asValue()) ? > > JSImmediate::toDouble(asValue()) : > asCell()->toNumber(exec); > > } > > due to exec pointer wrong. > > > > if I continue to use same arithmatic function the > generated jit code won't > > call op_mod() unless it is the 1st time, I think it is > because jit code is > > already there. If another thread handles the real > operation and not sync'd > > then it may be the case. Note I use BCM chip with two > CPUs - BCM > > customized SMP and BCM Linux. > > > > when it works, before and after ctiTrampoline() the > stack is balanced and > > registers are ok. where is the jit stack and how to > check its balance? > > > > when it fails, stacks shows we are nearby jit code - > the code w/o calling > > OP_mod() CPP function as it fails at 3rd try. But PC > points to a data > > structure: > > any comments? thanks a lot!! > > rgds > > joe > > > > ////////////// > > (gdb) c > > Continuing. > > > > Program received signal SIGILL, Illegal instruction. > > 0x2aacd000 in ?? () > > (gdb) where > > #0 0x2aacd000 in ?? () > > warning: GDB can't find the start of the function > at 0x2aacd000. > > ... > > #1 0x2aacd000 in ?? () > > warning: GDB can't find the start of the function > at 0x2aaccfff. > > Backtrace stopped: previous frame identical to this > frame (corrupt stack?) > > (gdb) backtrace > > #0 0x2aacd000 in ?? () > > #1 0x2aacd000 in ?? () > > Backtrace stopped: previous frame identical to this > frame (corrupt stack?) > > (gdb) p/x $sp > > $1 = 0x7fa439d8 > > (gdb) p/x $pc > > $2 = 0x2aacd000 > > (gdb) p/x $t9 > > $3 = 0x2aac9588 > > (gdb) x/10i $t9 = jit code, no actual call to op_mod() > cpp function > > 0x2aac9588: sw ra,-40(s5) > > 0x2aac958c: lui s7,0x0 > > 0x2aac9590: ori s7,s7,0xa > > 0x2aac9594: sw s7,0(s5) > > 0x2aac9598: lui s7,0x0 > > 0x2aac959c: ori s7,s7,0xa > > 0x2aac95a0: sw s7,8(s5) > > 0x2aac95a4: lui v0,0x0 > > 0x2aac95a8: ori v0,v0,0xa > > 0x2aac95ac: sw v0,32(s5) > > (gdb) > > 0x2aac95b0: lui v0,0xffff > > 0x2aac95b4: ori v0,v0,0xffff > > 0x2aac95b8: sw v0,32(s5) > > 0x2aac95bc: lw at,-40(s5) > > 0x2aac95c0: nop > > 0x2aac95c4: addiu sp,sp,-4 > > 0x2aac95c8: sw at,0(sp) > > 0x2aac95cc: lw ra,0(sp) > > 0x2aac95d0: addiu sp,sp,4 > > 0x2aac95d4: jr ra > > 0x2aac95d8: nop > > (gdb) p/x $ra //$ra = tobe returned addr after > ctiTrampoline(), correct > > $4 = 0x676d64 > > (gdb) x/10i $pc //sth not patched well?? > > 0x2aacd000: 0x4941444a > > 0x2aacd004: jalx 0x21a5a881 > > 0x2aacd008: j 0x2984c8b4 > > 0x2aacd00c: andi at,s3,0x3134 > > 0x2aacd010: 0x6d202c30 > > 0x2aacd014: 0x7a69735f > > 0x2aacd018: 0x66373d65 > > 0x2aacd01c: xori s3,t1,0x3461 > > 0x2aacd020: ori t0,t1,0x3864 > > 0x2aacd024: addi t4,at,10544 > > (gdb) > > 0x2aacd028: jalx 0x25b185d9 > > 0x2aacd02c: j 0x28c0f594 > > 0x2aacd030: andi s0,at,0x3030 > > 0x2aacd034: 0x720a0a38 > > 0x2aacd038: 0x64496765 > > 0x2aacd03c: j 0x28e0c4f4 > > 0x2aacd040: nop > > 0x2aacd044: nop > > 0x2aacd048: nop > > 0x2aacd04c: nop > > > > 0x2aacd028: jalx 0x25b185d9 > > 0x2aacd02c: j 0x28c0f594 > > 0x2aacd030: andi s0,at,0x3030 > > 0x2aacd034: 0x720a0a38 > > 0x2aacd038: 0x64496765 > > 0x2aacd03c: j 0x28e0c4f4 > > 0x2aacd040: nop > > > > > > > > > > > > _______________________________________________ > > webkit-dev mailing list > > [email protected] > > > http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev > > _______________________________________________ webkit-dev mailing list [email protected] http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

