[lld] r252790 - Add support for processing .eh_frame.

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 8 13:20:51 PST 2016


>> +    uint32_t ID = read32<E>(D.data() + 4);
>> +    if (ID == 0) {
>> +      // CIE
>> +      Cie<ELFT> C(S, Index);
>> +
>> +      StringRef Personality;
>> +      if (HasReloc) {
>> +        uint32_t SymIndex = RelI->getSymbol(Config->Mips64EL);
>> +        SymbolBody &Body =
>> *S->getFile()->getSymbolBody(SymIndex)->repl();
>> +        Personality = Body.getName();
>> +      }
>> +
>> +      std::pair<StringRef, StringRef> CieInfo(Entry, Personality);
>
>
> So, here, CIEs are uniquified by their contents and some symbol names. What
> is the actual rule? I want to know what it is intended to do for what.
>

One symbol name: the personality function. The information about a
frame is split into a fde and a cie. The cie contains information that
can be shared by multiple fdes. We can unify cie by content, as long
as we are careful to include which personality function that CIE uses.

See https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html
for the format.

Cheers,
Rafael


More information about the llvm-commits mailing list