From: Ulf M. <ulf...@gm...> - 2012-12-01 16:41:58
|
On Sat, Dec 1, 2012 at 4:33 PM, NightStrike <nig...@gm...> wrote: > On Sat, Dec 1, 2012 at 3:37 AM, Ulf Magnusson <ulf...@gm...> wrote: >> Hi, >> >> If I've understood things correctly, MinGW-w64 uses the SJLJ >> (longjmp-based) exceptions implementation for both win32 and win64, >> because DW2 (speedy, table-based) can't pass exceptions through >> foreign stack frames (e.g., throwing an exception from within a >> callback and catching it at the point of setting the callback won't >> work). I also believe MinGW uses DW2, because speedy exceptions was >> considered worth the breakage. Two questions: >> >> 1. Other than being broken for passing exceptions through foreign >> stack frames, is there something inherent about win64 that makes DW2 >> difficult to implement for it? >> >> 2. How long do you think it'll be before MinGW-w64 has zero-cost >> exceptions on win32/win64? From some discussion in #mingw@freenode it >> sounded like the proper solution would be to implement the same >> zero-cost exception model cl uses (not really familiar with it), but >> it was implied that it might be patent encumbered on win32. > > It's called SEH, and it's done for 64-bit. > Do you mean that only cl uses SEH for zero-cost exceptions on win64, or that MinGW-w64 does as well? I'm also a bit confused by the terminology. Looking at e.g. http://www.microsoft.com/msj/0197/exception/exception.aspx, it seems SEH is an OS-level mechanism for handling low-level exceptions (divide-by-zero and the like). How does this relate to C++ exceptions and zero-cost (table-based) exception models? When you say that SEH is done for 64-bit, do you mean that a zero-cost exception model layered on top of SEH is used on win64? Is SEH used by cl on win32 as well to implement C++ exceptions, only it isn't zero-cost there? /Ulf |