[LLVMdev] Exception Handling Tables Question
isanbard at gmail.com
Mon Sep 14 11:25:41 PDT 2009
On Mon, Sep 14, 2009 at 6:50 AM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Bill,
>> Right now we generate call sites for all of the code in a function, even
>> for code that cannot (or at least shouldn't) throw an exception.
>> (assume it's all been inlined), the EH handling table for "main" goes
>> from Leh_func_begin1 to Leh_func_end1, marking off each region whether it
>> can throw or not. From my reading of the Exception Tables documentation,
>> this is unnecessary – at least for C++. If a call throws and it doesn't
>> have an entry in the unwind table, then the "terminate()" function is
>> called. Is it fair to assume that there is a similar mechanism for other
> in Ada these extra table entries are not needed at all: whether you
> have them or not, an exception will continue to unwind. There is no
> calling of "terminate". In short: you only need a table entry for
> invoke calls, i.e. things you want to catch in this function.
> The reason to ask this is that
>> it could make the EH tables smaller and less cluttered if we elide those
>> areas which we know don't throw (the functions called are marked
>> 'nounwind', etc.).
> Sure, that's what the SawPotentiallyThrowing boolean is for. It is
> currently set for any call, but in fact needn't be set for 'nounwind'
> calls. When I wrote this stuff 'nounwind' information wasn't available
> at the codegen level, which is why this isn't done. In case you care,
> doing this would not hurt Ada :)
Yay! :-) I'm interested in getting the tables smaller. And it will
help debug when things go wrong. Thanks!
More information about the llvm-dev