<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
RTHooks__CheckLoadTracedRef is I'm sure innocent. It gets called before any pointer deref, I guess. The problem is the pointer is sometimes null, sometimes not. And why that is is what we need to figure out.<BR>
 <BR>
 - Jay<BR><BR> <BR>> From: jay.krell@cornell.edu<BR>> To: m3devel@elegosoft.com<BR>> Date: Thu, 19 Mar 2009 07:47:47 +0000<BR>> Subject: [M3devel] formsedit crash during startup sometimes?<BR>> <BR>> <BR>> Formsedit on SOLgnu also crashes, sometimes, during startup.<BR>> It doesn't seem to crash in a debugger, but you can load up the core dump after a crash. It looks very similar as on PPC_DARWIN.<BR>> <BR>> <BR>> In both cases, it is dereferencing the value 4, just after calling RTHooks__CheckLoadTracedRef? Relevant? Coincidence?<BR>> <BR>> <BR>> -bash-3.00$ uname -a<BR>> SunOS unknown 5.10 Generic_118833-17 sun4u sparc SUNW,Sun-Blade-100<BR>> -bash-3.00$ rm core<BR>> -bash-3.00$ ./formsedit<BR>> Segmentation Fault (core dumped)<BR>> -bash-3.00$ dbx ./formsedit ./core<BR>> ...<BR>> t@2 (l@2) terminated by signal KILL (Killed)<BR>> 0xfe3c03d0: ___nanosleep+0x0008: bcc,a,pt %icc,___nanosleep+0x18 ! 0xfe3c03e0<BR>> (dbx) lwps<BR>> l@1 LWP suspended in lwp_yield()<BR>> >l@2 LWP suspended in ___nanosleep()<BR>> l@3 LWP suspended in __lwp_park()<BR>> l@4 LWP suspended in ___nanosleep()<BR>> l@11 LWP suspended in __lwp_park()<BR>> l@12 LWP suspended in __lwp_park()<BR>> l@13 LWP suspended in __lwp_park()<BR>> o l@27 signal SIGSEGV in ScrollerVBTClass__PaintViewWithShadows()<BR>> l@28 LWP suspended in __lwp_park()<BR>> (dbx) lwp l@27<BR>> t@27 (l@27) stopped in ScrollerVBTClass__PaintViewWithShadows at 0xff1b945c<BR>> 0xff1b945c: ScrollerVBTClass__PaintViewWithShadows+0x0340: ld [%g1], %g1<BR>> (dbx) dis $pc - 0x10<BR>> dbx: warning: unknown language, 'c' assumed<BR>> 0xff1b941c: ScrollerVBTClass__PaintViewWithShadows+0x0300: inc -4, %g1<BR>> 0xff1b9420: ScrollerVBTClass__PaintViewWithShadows+0x0304: ld [%g1], %g1<BR>> 0xff1b9424: ScrollerVBTClass__PaintViewWithShadows+0x0308: sll %g1, 22, %g1<BR>> 0xff1b9428: ScrollerVBTClass__PaintViewWithShadows+0x030c: srl %g1, 31, %g1<BR>> 0xff1b942c: ScrollerVBTClass__PaintViewWithShadows+0x0310: btog 1, %g1<BR>> 0xff1b9430: ScrollerVBTClass__PaintViewWithShadows+0x0314: and %g1, 255, %g1<BR>> 0xff1b9434: ScrollerVBTClass__PaintViewWithShadows+0x0318: cmp %g1, 0<BR>> 0xff1b9438: ScrollerVBTClass__PaintViewWithShadows+0x031c: bne,pt %icc,ScrollerVBTClass__Pain<BR>> tViewWithShadows+0x334 ! 0xff1b9450<BR>> 0xff1b943c: ScrollerVBTClass__PaintViewWithShadows+0x0320: nop<BR>> 0xff1b9440: ScrollerVBTClass__PaintViewWithShadows+0x0324: ld [%fp - 24], %g1<BR>> (dbx) dis<BR>> 0xff1b9444: ScrollerVBTClass__PaintViewWithShadows+0x0328: mov %g1, %o0<BR>> 0xff1b9448: ScrollerVBTClass__PaintViewWithShadows+0x032c: call RTHooks__CheckLoadTracedRef<BR>> [PLT] ! 0xff2a9518<BR>> 0xff1b944c: ScrollerVBTClass__PaintViewWithShadows+0x0330: nop<BR>> 0xff1b9450: ScrollerVBTClass__PaintViewWithShadows+0x0334: ld [%fp + 68], %g3<BR>> 0xff1b9454: ScrollerVBTClass__PaintViewWithShadows+0x0338: ld [%fp - 24], %g1<BR>> 0xff1b9458: ScrollerVBTClass__PaintViewWithShadows+0x033c: inc 4, %g1<BR>> 0xff1b945c: ScrollerVBTClass__PaintViewWithShadows+0x0340: ld [%g1], %g1<BR>> 0xff1b9460: ScrollerVBTClass__PaintViewWithShadows+0x0344: st %g1, [%fp - 180]<BR>> 0xff1b9464: ScrollerVBTClass__PaintViewWithShadows+0x0348: add %fp, -40, %g1<BR>> 0xff1b9468: ScrollerVBTClass__PaintViewWithShadows+0x034c: add %fp, -180, %g2<BR>> (dbx) print $g1<BR>> $g1 = 4ULL<BR>> (dbx)<BR>> <BR>> I believe it is on the last line of the function, the PaintTint call (due to what PPC_DARWIN showed).<BR>> <BR>> <BR>> PROCEDURE PaintViewWithShadows (v: T) =<BR>> VAR<BR>> dom : Rect.T;<BR>> stripe: Rect.T;<BR>> r : Rect.T;<BR>> f : Rect.Partition;<BR>> BEGIN<BR>> dom := VBT.Domain(v);<BR>> stripe := ComputeStripe(v, dom);<BR>> (* Paint the scroll. We are careful not to draw the area of the<BR>> trough that will be covered by the stripe. This helps reduce<BR>> the flicker. *)<BR>> r := Rect.Inset(dom, v.shadowPixels);<BR>> ShadowPaint.Border(v, Region.Full, v.shadow, Shadow.Style.Lowered,<BR>> r, dom);<BR>> Rect.Factor(r, stripe, f, 0, 0);<BR>> FOR i := FIRST(f) TO LAST(f) DO<BR>> IF i # 2 AND NOT Rect.IsEmpty(f[i]) THEN<BR>> VBT.PaintTint(v, f[i], v.troughColor);<BR>> END;<BR>> END;<BR>> (* Paint the stripe. *)<BR>> r := Rect.Inset(stripe, v.shadowPixels);<BR>> ShadowPaint.Border(v, Region.Full, v.shadow, Shadow.Style.Raised,<BR>> r, stripe);<BR>> VBT.PaintTint(v, r, v.shadow.bg);<BR>> END PaintViewWithShadows;<BR>> <BR>> <BR>> I'm somewhat just showing people how to get started debugging it, in case folks are as afraid of command line debuggers as I used to be.<BR>> <BR>> <BR>> - Jay<BR></body>
</html>