This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: G++ guru's please comment - Re: FW: pthread_create problem in Cygwin 1.1.8-2]


On Mon, Apr 09, 2001 at 02:34:04PM +1000, Robert Collins wrote:
>
>> -----Original Message-----
>> From: Christopher Faylor [mailto:cgf@redhat.com]
>> On Mon, Apr 09, 2001 at 11:31:57AM +1000, Robert Collins wrote:
>> >> -----Original Message-----
>> 
>> I wouldn't expect the stack pointer to be screwed up.  I'd expect that
>> the *stack* is screwed up.  I don't believe that the ecx 
>> register should
>> be preserved across function calls so I don't know why this 
>> would mater.
>
>Doh! Ask me how many years since I wrote assembly.... please :]
>
>Well, the exception occurs on the last line here (Intel format cause I'm
>reading intel doco).
>
>call   0x404c98 <sched_yield>
>mov    %eax,DWORD PTR [%ebp-100]
>add    %eax,4
>mov    %edx,DWORD PTR [%eax]
>mov    %ecx,DWORD PTR [%edx]
>mov    DWORD PTR [%eax],%ecx
>
>As you can see, no stack references :[. And the crash doesn't occur if
>the thread doesn't lose the processor.

I'm confused by this snippet of assembly.  It looks like gcc is using
the result of sched_yield to index into a table.  But, %eax should be
either 0 or 1 in this case.  So, maybe you're right.  This is a gcc
problem.  And, it may be fixed by configuring gcc with --enable-threads.

This is one of those situations where it looks like gcc can't be
released until a version of cygwin is released with the requisite
functionality.

cgf
>Now the registers should be saved when context switch's occur, so I
>don't believe the corruption occurs during that section of code, but
>rather:
>
>first thread setsup the try{}, returning an exception handler context.
>yields.
>main runs, starts second thread
>second thread is started, it sets up it's try{}, and recieves the _sames
>context_, yields.
>first thread completes, exits the try{}, trashing the exception handler
>context.
>
>I'm not going to look into this any alonger. IMO it's the
>__get_eh_context function in g++ which I know nothing about, and don't
>have a debug version built. I hopped on this initially to see if it was
>a pthreads issue... 
>
>If it does turn out to be cygwin threads, rather than a non-reentrant
>library function, I'm happy to look at it again.
> 
>> 
>> Yep.  Probably.  Somebody should try that.
>
>Chuckle.
> 
>> cgf
>> 
>
>Rob.
>
>--
>Want to unsubscribe from this list?
>Check out: http://cygwin.com/ml/#unsubscribe-simple

-- 
cgf@cygnus.com                        Red Hat, Inc.
http://sources.redhat.com/            http://www.redhat.com/

--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]