[LLVMdev] symbols for exception handling

Reed Kotler rkotler at mips.com
Sun Nov 4 10:05:14 PST 2012


Hi Joerg,

Interesting idea.The landing pad reference is correct but all the other 
ones are off by one but the same idea applies.

For the exception handling table I get lucky because all the label 
addresses that are off by one, except for eh_func begin, end up being 
subtracted from one another and the extra '1' cancels out.

However, I'm not sure what the ramifications are in the dwarf tables.

I'm just going by the original email discussions on this mips16 c++ 
handling from gcc that I found. This whole topic was discussed at 
length. If I follow the abi convention established there, then 
everything else will work.. gdb, exception library, etc.

http://gcc.gnu.org/ml/gcc-patches/2008-08/msg00623.html
http://gcc.gnu.org/ml/gcc-patches/2008-11/msg01273.html

In any case, I need to make changes to mcstreamer and that is a class 
that is dervied from in several places.

I can't put "if inMips16()" in mcstreamer. How would you suggest I 
handle the data abstraction so that I can change mcstreamer for my use 
and minimally effect others without polluting the namespace of 
mcstreamer with "mips16"?

I have a patch I will submit today for review, though I'm not at all 
wedded to this idea, it's just something that is not unreasonable and I 
was able to get to work and solve my problem in a few hours.

I just had to introduce the notion of EmitDebugSymbol to mcstreamer.
Everything was very clean; the only issues was having to add 
EmitDDebugLabel as a synonym for EmitLabel in all the derived classes 
except for the assembler emitter, though I will need to make fixes later 
to at least the elf emitter to accommodate the direct object emitter.

That part about having to touch those other derived classes seemed wrong 
to me but I didn't think of a better solution.

reed


On 11/04/2012 02:16 AM, Joerg Sonnenberger wrote:
> On Fri, Nov 02, 2012 at 07:53:41PM -0700, reed kotler wrote:
>> Basically, labels that are not landing pad symbols that are inserted
>> for exception handling
>> and dwarf purposes, must declared :
>>
>> $mysym = .
>>
>> as opposed to:
>>
>> $mysym:
>
> Can't you use $mysym +/- 1 in the landing pad reference to work this
> idiosyncracy?
>
> Joerg
>




More information about the llvm-dev mailing list