[LLVMdev] Questions about exceptions

Talin viridia at gmail.com
Thu Feb 28 23:30:38 PST 2008


I'm at the stage where I'd like to try implementing exception handling 
for my little language.

First off, I had a lot of difficulty understanding the documentation on 
exception handling until I went and started looking at the source code 
for libstdc++, in particular the definitions of __cxa_eh_globals and the 
functions that use it. I did not realize, until reading that code, that 
the exception pointer is stored using thread-local data.

It seems to me that it ought to be possible to write a "pure" LLVM 
exception implementation that does not depend on the C++ libraries, 
however I'm not at all sure how to go about doing this.

Also, I wonder if thread local data is really the best way to go. If you 
have a language that has the ability to inspect a caller's stack frame 
(a capability which is needed anyway for generating a stack trace), you 
could pre-allocate space for the exception pointer in the stack frame 
containing the 'catch' block, and store it there as part of the process 
of walking up the stack. I guess you would use llvm.frameaddress to look 
at each stack frame in turn, although I'm unsure how you would 'mark' a 
stack frame to indicate whether or not it had a catch-handler block and 
where to store the exception. Can you even assume anything about the 
structure of a frame?

In any case, I'm looking for any hints or advice as to where to start on 
this. Or even advice on whether this is a good idea or not.

-- Talin




More information about the llvm-dev mailing list