mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
ba248af49e
DWARF standard claims that each compilation/type unit header in .debug_info/.debug_types section must be followed by corresponding compile/type unit DIE, possibly with its children. Two situations are possible: * compile/type unit DIE is missing because DWARF producer failed to emit it. * DWARF parser failed to parse unit DIE correctly, for instance if it contains some unsupported attributes (see r237721, for instance). In either of these cases, the library, and the tools that use it (llvm-dwarfdump, llvm-symbolizer) should not crash. Insert appropriate checks to protect against this. llvm-svn: 237733
34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
//===-- DWARFCompileUnit.cpp ----------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h"
|
|
#include "llvm/Support/Format.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
using namespace llvm;
|
|
|
|
void DWARFCompileUnit::dump(raw_ostream &OS) {
|
|
OS << format("0x%08x", getOffset()) << ": Compile Unit:"
|
|
<< " length = " << format("0x%08x", getLength())
|
|
<< " version = " << format("0x%04x", getVersion())
|
|
<< " abbr_offset = " << format("0x%04x", getAbbreviations()->getOffset())
|
|
<< " addr_size = " << format("0x%02x", getAddressByteSize())
|
|
<< " (next unit at " << format("0x%08x", getNextUnitOffset())
|
|
<< ")\n";
|
|
|
|
if (const DWARFDebugInfoEntryMinimal *CU = getUnitDIE(false))
|
|
CU->dump(OS, this, -1U);
|
|
else
|
|
OS << "<compile unit can't be parsed!>\n\n";
|
|
}
|
|
|
|
// VTable anchor.
|
|
DWARFCompileUnit::~DWARFCompileUnit() {
|
|
}
|