Win64 exception handling
Johan Engelen via digitalmars-d-ldc
digitalmars-d-ldc at puremagic.com
Mon Mar 23 15:55:17 PDT 2015
Hi all,
I have been trying to work on exception handling on Windows x64
(with LLVM 3.6), but for a long time now, I am stuck on something
perhaps very simple.
My test case is this program:
int main() {
try {
throw new Exception("johan");
} catch (Exception jow) {
}
return 0;
}
This crashes, and Visual Studio's debugger tells me it's because
of an unhandled exception. As far as I understand it, we call
RtlRaiseException() from _d_throw_exception() and that should
call the personality function _d_eh_personality(). However,
_d_eh_personality() is never entered. Instead,
RtlRaiseException() returns and the program crashes. I am stuck
on how to continue from here. I have tried many different things,
but I cannot get the OS to call _d_eh_personality().
One thing that strikes me is that the exception code
STATUS_LDC_D_EXCEPTION is passed to RtlRaiseException(), but is
not used anywhere else in our source.
Does LLVM not correctly register _d_eh_personality() with the OS?
Or is there some filtering done on the exception code?
I'd appreciate any help.
-Johan
More information about the digitalmars-d-ldc
mailing list