[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