mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
d45ba8e94a
llvm-dwarfdump crashed for Unit header with DW_UT_partial type. ------------- llvm-dwarfdump: /tmp/llvm/include/llvm/ADT/Optional.h:197: T& llvm::optional_detail::OptionalStorage<T, true>::getValue() & [with T = long unsigned int]: Assertion `hasVal' failed. PLEASE submit a bug report to the technical support section of https://developer.amd.com/amd-aocc and include the crash backtrace. Stack dump: 0. Program arguments: llvm-dwarfdump -v /tmp/test/DebugInfo/X86/Output/dwarfdump-he ader.s.tmp.o #0 0x00007f37d5ad8838 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /tmp/llvm/lib/Support/Unix/Signals.inc:565:0 #1 0x00007f37d5ad88ef PrintStackTraceSignalHandler(void*) /tmp/llvm/lib/Support/Unix/Signals.inc:632:0 #2 0x00007f37d5ad65bd llvm::sys::RunSignalHandlers() /tmp/llvm/lib/Support/Signals.cpp:71:0 #3 0x00007f37d5ad81b9 SignalHandler(int) /tmp/llvm/lib/Support/Unix/Signals.inc:407:0 #4 0x00007f37d4c26040 (/lib/x86_64-linux-gnu/libc.so.6+0x3f040) #5 0x00007f37d4c25fb7 raise /build/glibc-S9d2JN/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0 #6 0x00007f37d4c27921 abort /build/glibc-S9d2JN/glibc-2.27/stdlib/abort.c:81:0 #7 0x00007f37d4c1748a __assert_fail_base /build/glibc-S9d2JN/glibc-2.27/assert/assert.c:89:0 #8 0x00007f37d4c17502 (/lib/x86_64-linux-gnu/libc.so.6+0x30502) #9 0x00007f37d7576b81 llvm::optional_detail::OptionalStorage<unsigned long, true>::getValue() & /tmp/llvm/include/llvm/ADT/Optional.h:198:0 #10 0x00007f37d75726ac llvm::Optional<unsigned long>::operator*() && /tmp/llvm/include/llvm/ADT/Optional.h:309:0 #11 0x00007f37d7582968 llvm::DWARFCompileUnit::dump(llvm::raw_ostream&, llvm::DIDumpOptions) /tmp/llvm/lib/DebugInfo/DWARF/DWARFCompileUnit.cpp:30:0 -------------- Patch by: @jini.susan Reviewed By: @probinson Differential Revision: https://reviews.llvm.org/D101255
43 lines
1.8 KiB
C++
43 lines
1.8 KiB
C++
//===-- DWARFCompileUnit.cpp ----------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h"
|
|
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h"
|
|
#include "llvm/DebugInfo/DWARF/DWARFDie.h"
|
|
#include "llvm/Support/Format.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
using namespace llvm;
|
|
|
|
void DWARFCompileUnit::dump(raw_ostream &OS, DIDumpOptions DumpOpts) {
|
|
int OffsetDumpWidth = 2 * dwarf::getDwarfOffsetByteSize(getFormat());
|
|
OS << format("0x%08" PRIx64, getOffset()) << ": Compile Unit:"
|
|
<< " length = " << format("0x%0*" PRIx64, OffsetDumpWidth, getLength())
|
|
<< ", format = " << dwarf::FormatString(getFormat())
|
|
<< ", version = " << format("0x%04x", getVersion());
|
|
if (getVersion() >= 5)
|
|
OS << ", unit_type = " << dwarf::UnitTypeString(getUnitType());
|
|
OS << ", abbr_offset = " << format("0x%04" PRIx64, getAbbrOffset());
|
|
if (!getAbbreviations())
|
|
OS << " (invalid)";
|
|
OS << ", addr_size = " << format("0x%02x", getAddressByteSize());
|
|
if (getVersion() >= 5 && (getUnitType() == dwarf::DW_UT_skeleton ||
|
|
getUnitType() == dwarf::DW_UT_split_compile))
|
|
OS << ", DWO_id = " << format("0x%016" PRIx64, *getDWOId());
|
|
OS << " (next unit at " << format("0x%08" PRIx64, getNextUnitOffset())
|
|
<< ")\n";
|
|
|
|
if (DWARFDie CUDie = getUnitDIE(false))
|
|
CUDie.dump(OS, 0, DumpOpts);
|
|
else
|
|
OS << "<compile unit can't be parsed!>\n\n";
|
|
}
|
|
|
|
// VTable anchor.
|
|
DWARFCompileUnit::~DWARFCompileUnit() = default;
|