> > Date: Thu, 1 Mar 2001 12:44:39 -0500 (EST)
> > From: Peter Dufault <[EMAIL PROTECTED]>
> > 
> > This is a stupid question, basically it's how to debug something.
> > 
> > I have four cooperating p-threaded processes.  One of them keeps getting
> > a SIGSEGV with the address 0x752f422f.  I'm not sure if that address is
> > always the same, but with a given compile it is.  The thing that's a pain
> > is it is random.  The four processes can run for a long time, or through
> > several tests to completion, and then the
> > nasty process gets that SIGSEGV.  The thread that receives the SIGSEGV
> > is random, the stack of the SEGV'd thread is trash, the rest of the
> > threads in the offending process still have intact stacks.  Arg!
> 
> Sounds like maybe a buffer overrun or something might be trashing a return
> pointer.  Not sure what the exact cause is, but if that address is not an
> actual address, I'd suspect that a return pointer is getting trashed.
> 
> Any strings "/B/u" in your program?  That would be stored as 0x752f422f.
> 
> If you're using assembly with using %ebp for stack frame (yay!), then make
> certain %esp isn't getting corrupted.

Very good, I read those high bits off-by-one and stupidly didn't recognize
the ascii:

> (gdb) x/s $esp-8 
> 0x826b400 <dtablecount+6528>:    "/wd0/B/usr-src/lib/libc_r/uthread/uthread_dup2.c"
> (gdb) 

I guess it is the "thread_fd_lock_debug/_thread_fd_unlock_debug"
calls with __FILE__ that push this on the stack.  I'll build a
debuggable libc_r and see I see.

Peter

--
Peter Dufault ([EMAIL PROTECTED])   Realtime development, Machine control,
HD Associates, Inc.               Fail-Safe systems, Agency approval

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to