diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DebugLocStream.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DebugLocStream.cpp | 45 | 
1 files changed, 45 insertions, 0 deletions
| diff --git a/llvm/lib/CodeGen/AsmPrinter/DebugLocStream.cpp b/llvm/lib/CodeGen/AsmPrinter/DebugLocStream.cpp new file mode 100644 index 000000000000..f483d532ff07 --- /dev/null +++ b/llvm/lib/CodeGen/AsmPrinter/DebugLocStream.cpp @@ -0,0 +1,45 @@ +//===- DebugLocStream.cpp - DWARF debug_loc stream --------------*- C++ -*-===// +// +// 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 "DebugLocStream.h" +#include "DwarfDebug.h" +#include "llvm/CodeGen/AsmPrinter.h" + +using namespace llvm; + +bool DebugLocStream::finalizeList(AsmPrinter &Asm) { +  if (Lists.back().EntryOffset == Entries.size()) { +    // Empty list.  Delete it. +    Lists.pop_back(); +    return false; +  } + +  // Real list.  Generate a label for it. +  Lists.back().Label = Asm.createTempSymbol("debug_loc"); +  return true; +} + +void DebugLocStream::finalizeEntry() { +  if (Entries.back().ByteOffset != DWARFBytes.size()) +    return; + +  // The last entry was empty.  Delete it. +  Comments.erase(Comments.begin() + Entries.back().CommentOffset, +                 Comments.end()); +  Entries.pop_back(); + +  assert(Lists.back().EntryOffset <= Entries.size() && +         "Popped off more entries than are in the list"); +} + +DebugLocStream::ListBuilder::~ListBuilder() { +  if (!Locs.finalizeList(Asm)) +    return; +  V.initializeDbgValue(&MI); +  V.setDebugLocListIndex(ListIndex); +} | 
