[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