This is the mail archive of the cygwin-developers@sourceware.cygnus.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: longjmp problem



Hello,

Mumit Khan wrote:
> 
> Vadim Egorov <egorovv@1c.ru> writes:
> >
> > After digging around this problem I think that it concerns win32 SEH
> > mechanics. Following code shows the mutations of SEH frame
> > list while signals caused by exceptions are processed.
> 
> I suspect the same, but you're much further along than I am. I believe
> we have to start mucking with SEH to get things to work correctly, and
> the best source of information I've found so far is Pietrek's '97 article
> MSJ "A Crash Course on the Depths of Win32 Structured Exception Handling"
> that describes the except_handler crap in somewhat gory detail.
> 
> > before longjmp is enough but in general case when other seh frames
> > can be involved the task is more complicated.
> > I think SEH unwinding should be performed in longjump based on
> > target esp value.
> 
> And it gets worse when you're dealing with C++ exceptions on x86-win32,
> which currently uses setjmp/longjmp.

There are some considerations concerning this problem.

First, is the way of stack unwinding. We can simply reinstall last 
registered SEH frame that is on stack dismissing frames that was 
registered later. The appropriate frame can be stored in jmp_buf as 
MS do but I don't think it's a good idea to increase jmp_buf size.

For better interoperability with alien code that may use SEH it is 
necessary to call each of these handlers for unwinding so that they
could perform cleanup.

It seems possible to do it in MS like way described by Petrek but
it will impose some performance overhead on longjmp and on C++
exception handling accordingly.

But the problem with signal state still remains - it doesn't get
unblocked. If longjmp will perform more or less SEH frame unwinding
the same SEH technique can be here - to install additional exception
handler while signal handler is being called which would restore
signal state if unwinding occurred - but it doesn't look like the best
solution.


Vadim.


-- 
*********************************************
Vadim Egorov, 1C      *       Вадим Егоров,1C
egorovv@1c.ru         *         egorovv@1c.ru
*********************************************


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