Partially revert patch from 2014-03-04.

* exception.h (exception::handler_installed): Declare.
	(exception::exception): Install vectored exception handler on x86_64.
	(exception::~exception): Remove for x86_64.
	* exceptions.cc (exception::handler_installed): Define.
This commit is contained in:
Corinna Vinschen 2014-03-18 13:51:30 +00:00
parent e86fa3ae83
commit 5fd0dc293d
3 changed files with 17 additions and 17 deletions

View File

@ -1,3 +1,11 @@
2014-03-18 Corinna Vinschen <corinna@vinschen.de>
Partially revert patch from 2014-03-04.
* exception.h (exception::handler_installed): Declare.
(exception::exception): Install vectored exception handler on x86_64.
(exception::~exception): Remove for x86_64.
* exceptions.cc (exception::handler_installed): Define.
2014-03-17 Christopher Faylor <me.cygwin2014@cgf.cx>
* sigproc.h (no_thread_exit_protect): New class.

View File

@ -109,6 +109,7 @@ extern exception_list *_except_list asm ("%fs:0");
class exception
{
#ifdef __x86_64__
static bool handler_installed;
static int handle (LPEXCEPTION_POINTERS);
#else
exception_list el;
@ -119,16 +120,11 @@ public:
exception () __attribute__ ((always_inline))
{
#ifdef __x86_64__
/* Manually install SEH handler. */
asm (".l_startframe: \n\
.seh_handler __C_specific_handler, @except \n\
.seh_handlerdata \n\
.long 1 \n\
.rva .l_startframe, \
.l_endframe, \
_ZN9exception6handleEP19_EXCEPTION_POINTERS, \
.l_endframe \n\
.text \n");
if (!handler_installed)
{
handler_installed = true;
AddVectoredExceptionHandler (1, handle);
}
#else
save = _except_list;
el.handler = handle;
@ -136,13 +132,7 @@ public:
_except_list = &el;
#endif /* __x86_64__ */
};
#ifdef __x86_64__
~exception () __attribute__ ((always_inline)) {
asm (" nop \n\
.l_endframe: \n\
nop \n");
}
#else
#ifndef __x86_64__
~exception () __attribute__ ((always_inline)) { _except_list = save; }
#endif /* !__x86_64__ */
};

View File

@ -553,6 +553,8 @@ rtl_unwind (exception_list *frame, PEXCEPTION_RECORD e)
#define CYG_EXC_CONTINUE_EXECUTION EXCEPTION_CONTINUE_EXECUTION
#define CYG_EXC_CONTINUE_SEARCH EXCEPTION_CONTINUE_SEARCH
bool exception::handler_installed NO_COPY;
int
exception::handle (LPEXCEPTION_POINTERS ep)
#else