Debugger: just skip .debug_frame/.eh_frame section contains a 0-length CIE
Some executables (or shared objects) may have .debug_frame or .eh_frame section which contains the CIE(/FDE) length is 0. The DWARF spec doesn't describe this case explicitly, but doesn't prohibit it. LSB says to treat this a terminator of the CIE. https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html Previous code failed to load the entire debug info of the executable. New code just skip these section (don't read anymore) after the Debugger (kit) encounter a 0-length CIE. Fixes #18438. Change-Id: I382d0ec409d40570b5bccd384d38fa3c29ae2e7f Reviewed-on: https://review.haiku-os.org/c/haiku/+/6538 Reviewed-by: Rene Gollent <rene@gollent.com> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
This commit is contained in:
parent
496e411397
commit
f0e9ed4488
@ -1156,6 +1156,11 @@ DwarfFile::_ParseFrameSection(ElfSection* section, uint8 addressSize,
|
||||
return B_BAD_DATA;
|
||||
off_t lengthOffset = dataReader.Offset();
|
||||
|
||||
// If the length is 0, it means a terminator of the CIE.
|
||||
// Then just skip this .debug_frame/.eh_frame section.
|
||||
if (length == 0)
|
||||
return B_OK;
|
||||
|
||||
// CIE ID/CIE pointer
|
||||
uint64 cieID = dwarf64
|
||||
? dataReader.Read<uint64>(0) : dataReader.Read<uint32>(0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user