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:
KENZ 2023-06-10 07:20:46 +09:00 committed by Rene Gollent
parent 496e411397
commit f0e9ed4488

View File

@ -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);