[lldb-dev] Inconsistencies in CIE pointer in FDEs in .debug_frame

Martin Storsjö via lldb-dev lldb-dev at lists.llvm.org
Mon Nov 25 02:03:52 PST 2019


On Mon, 25 Nov 2019, Martin Storsjö via lldb-dev wrote:

> But now I tested this a bit more with ELF setups, and realized that it 
> somehow does seem to do the right thing. It might have something to do with 
> how ELF linkers handle this kind of section that isn't loaded at runtime (and 
> thus perhaps doesn't really have a virtual address assigned).
>
> So that pretty much clears the question regarding inconsistency, and raises 
> more questions about how this really works in ELF and MCDwarf.


> So, if I make the call to EmitSymbolValue() set the IsSectionRelative 
> parameter to true, I get the correct, expected relocations for this section:
>
> RELOCATION RECORDS FOR [.debug_frame]:
> 00000018 IMAGE_REL_I386_SECREL .debug_frame
> 0000001c IMAGE_REL_I386_DIR32 .text
>
> This matches what GCC produces in similar cases as well.
>
> But with this in place, ELF targets misbehave severely; there's no relocation 
> produced at all for the .debug_frame symbol, and the second relocation gets 
> written at the wrong offset.

Ok, it turns out that there's already a flag that indicates exactly this, 
asmInfo->needsDwarfSectionOffsetDirective(), which just seems to not be 
used here where it should, which seems to encapsulate whether a certain 
type of relocation needs to be used (like in COFF) or if different section 
types like in ELF seems to handle it automatically with just one kind of 
relocation. I had seen it before but didn't really understand its role 
until I saw how ELF behaved.

So this is clearly a closed case, and I'll be sending a patch for MCDwarf 
soon.

// Martin


More information about the lldb-dev mailing list