1//===- DebugLocStream.cpp - DWARF debug_loc stream --------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "DebugLocStream.h"
11#include "DwarfDebug.h"
12#include "llvm/CodeGen/AsmPrinter.h"
13
14using namespace llvm;
15
16bool DebugLocStream::finalizeList(AsmPrinter &Asm) {
17  if (Lists.back().EntryOffset == Entries.size()) {
18    // Empty list.  Delete it.
19    Lists.pop_back();
20    return false;
21  }
22
23  // Real list.  Generate a label for it.
24  Lists.back().Label = Asm.createTempSymbol("debug_loc");
25  return true;
26}
27
28void DebugLocStream::finalizeEntry() {
29  if (Entries.back().ByteOffset != DWARFBytes.size())
30    return;
31
32  // The last entry was empty.  Delete it.
33  Comments.erase(Comments.begin() + Entries.back().CommentOffset,
34                 Comments.end());
35  Entries.pop_back();
36
37  assert(Lists.back().EntryOffset <= Entries.size() &&
38         "Popped off more entries than are in the list");
39}
40
41DebugLocStream::ListBuilder::~ListBuilder() {
42  if (!Locs.finalizeList(Asm))
43    return;
44  V.initializeDbgValue(&MI);
45  V.setDebugLocListIndex(ListIndex);
46}
47