diff options
author | Florian Hahn <flo@fhahn.com> | 2019-03-19 20:37:06 +0000 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2019-03-19 20:37:06 +0000 |
commit | 1663c9466f37ae123dad66dc863791d14bdf09dc (patch) | |
tree | 503f303898c03454610c0de751e53a2a5c6de1a9 /llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | 282555ad826818b10e85defbc56e2eb51782c941 (diff) | |
download | llvm-1663c9466f37ae123dad66dc863791d14bdf09dc.zip llvm-1663c9466f37ae123dad66dc863791d14bdf09dc.tar.gz llvm-1663c9466f37ae123dad66dc863791d14bdf09dc.tar.bz2 |
[DwarfDebug] Skip entries to big for 16 bit size field in Dwarf < 5.
Nothing prevents entries from being bigger than the 16 bit size field in
Dwarf < 5. For entries that are too big, just emit an empty entry
instead of crashing.
This fixes PR41038.
Reviewers: probinson, aprantl, davide
Reviewed By: probinson
Differential Revision: https://reviews.llvm.org/D59518
llvm-svn: 356514
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 3e60f15..0e0a5b2 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -2037,8 +2037,14 @@ void DwarfDebug::emitDebugLocEntryLocation(const DebugLocStream::Entry &Entry, Asm->OutStreamer->AddComment("Loc expr size"); if (getDwarfVersion() >= 5) Asm->EmitULEB128(DebugLocs.getBytes(Entry).size()); - else + else if (DebugLocs.getBytes(Entry).size() <= std::numeric_limits<uint16_t>::max()) Asm->emitInt16(DebugLocs.getBytes(Entry).size()); + else { + // The entry is too big to fit into 16 bit, drop it as there is nothing we + // can do. + Asm->emitInt16(0); + return; + } // Emit the entry. APByteStreamer Streamer(*Asm); emitDebugLocEntry(Streamer, Entry, CU); |