This is the mail archive of the cygwin 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]
Other format: [Raw text]

stdcall lib functions with exception throwing callbacks vs Dwarf2 EH


Hi, 
I've been trying to get DW2 EH exception handling working
on windows targets with general success, but have hit a snag.
If a C library function that takes a callback arg is compiled
using stdcall convention, C++ exception thrown by the callback
result in abort.
If the C libarary function uses normal (cdelc) calling convention
than exceptions thrown by callback are handled.
Example:
==============================================
/* callback.c library functions */
/* compile this with c */
void
caller_c (void (*callback)(void))
{
 callback();
}
void __attribute__((stdcall))
caller_s (void (*callback)(void))
{
 callback();
}
==============================================
/* main.cc */
#include <stdio.h>
extern "C"
{
 typedef void (*foo)(void);
 extern void caller_c (foo); 
 extern void __attribute__ ((__stdcall__)) caller_s (foo); 
}
void callback (void) 
{
 printf ("Hello from callback\n");
 fflush (stdout); 
 throw 1;
}
int main ()
{
 try {
 printf ("Testing cdecl\n");
 caller_c (callback);
 }
 catch (int) {
 printf ("Caught cdecl\n"); 
 }
 try {
 printf ("\nTesting stdcall\n");
 caller_s (callback);
 }
 catch (int) {
 printf ("Caught stdcall\n");
 }
return 0;
}
==================================================
Compiling with sjlj enabled compiler:
gcc -c -o callback.o callback.c
g++-sjlj -o main-sjlj.exe main.cc callback.o
Both throws are caught.
However, if using DW2 EH enabled compiler
g++-dw2 -omain-dw2.exe main.cc callback.o
I get this:
> Testing cdecl
> Hello from callback
> Caught cdecl
> Testing stdcall
> Hello from callback
>
> abnormal program termination.
This is significant for windows targets, since the
OS win32 api uses stdcall almost exclusively.
Before I pull any more hair out trying, does any one have any hints on
how to use an MD_FALLBACK_FRAME_STATE_FOR to workaround, or is this a
blocker for the use of DW2 EH on windows targets.
Danny
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/

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

AltStyle によって変換されたページ (->オリジナル) /