[Mono-devel-list] RAPGO Proposal

Jonathan Pryor jonpryor at vt.edu
Tue Nov 30 07:48:15 EST 2004

> The other thing is that you can't catch C++ exceptions thrown in P/I 
> code by using a C-only approach.. Yes, I know that this is not supported 
> by mono, but somehow I thought adding this feature would be interesting. 
> Currently mono just gets terminated by the C runtime if a C++ exception 
> is thrown in native P/I code because no exception handler can be found..

In theory, you're possibly correct.  In practice, you're not. :-)

The problem is that on most platforms the C++ ABI isn't standardized.
Consequently, you can't link object code generated by different C++
compilers together.  Consequently, Mono could only handle C++ exceptions
generated by the same C++ compiler used to compile Mono.

On Linux, this isn't a particularly major issue (except when the C++ ABI
changes, such as in GCC 3.0, 3.1, 3.2...).  On other platforms which
have their own compiler in addition to GCC (SunOS, AIX, HP/UX, Windows,
all of which have their own vendor-supported C++ compilers), it is
highly unlikely that exceptions could be passed from unmanaged to
managed code.

Consider a Sun-generated C++ code which throws an exception being
handled by a GCC-compiled Mono runtime.  Mono would still die.  Ditto
for Windows SEH as used by MSVC and a GCC-compiled Mono runtime.

The only platforms where C++ and Mono exceptions could possibly work
portably is on platforms where the C++ ABI is standardized.  The only
such platform I'm aware of is IA64 (Itanic, er, Itanium), and Mono
doesn't have a JIT for that platform AFAIK.

Furthermore, if the platform *does* have a C++ ABI standard, then Mono
could just re-use the C++ exception structures, allowing C++ exceptions
to be properly handled by the Mono runtime.  A C++ compiler wouldn't be

 - Jon

More information about the Mono-devel-list mailing list