[LLVMdev] EH and call conversion integration

Žiga Osolin ziga.osolin at gimb.org
Sat Nov 18 04:36:28 PST 2006


Hello!

I am currently trying to make EH (exception handling) possible to be 
integrated in C++. This means that C++ code can throw exceptions and 
llvm code can catch such exception and llvm can throw exceptions that 
C++ can catch (or pass through). There are quite some difficulties with 
approach:

* I must write ABI specific backends for EH. Since we support Visual 
Studio and GCC, two different backends should be written. I am not sure, 
however, that EH is the same on all platforms ... so drivers for EH 
should probably be platform and ABI specific ...
* I do not know how to write code in such way, that C++ compiler nad 
llvm will be able to have the same type information for the same types 
(or to enable casts, e.g. if you throw type X extends Y and Y is known 
to C++, how will this be handled).

Further, there is also a problem with calling conversions with C++. C++ 
compilers can emit different return type conversions for struct or class 
types (as well as I am aware GCC uses pass-by-pointer, which is usually 
not used for structs with only 2 integers etc) and also different push 
strategies (this especially applies for member funcion call, where this 
pointer is passed through ECX register or as first argument).

I think with all these problems (and more are likely to arise), I don't 
know if it still makes sense to apply such fixes, they are too 
target/ABI specific. This leaves me with option to try the build tho 
whole engine (which is 300+k lines) with llvm-gcc. If I understand 
right, all such problems should disappear. So, if I compile, for example 
for x86 statically or with JIT, will the code be compatible (always!) at 
the end?
The problem in the engine is that the basecode will be generated 
statically for each platform while all scripts (that should be compiled) 
will be JIT-ed. I would still need to make special care so that scripts 
will actually compile to the same thing (since they are not C++) but 
will the llvm be compatible on all targets for JIT and anything else?

I am also asking how stables are llvm and llvm-gcc under cygwin (since 
our engine is windows based)? Do you think that we can compile such 
thing without really big problems (and hacks)?

Regards,
Žiga




More information about the llvm-dev mailing list