blob: 7e8ed7104af3419a4ab0c1b9f5f854202ccc8d4f [file] [log] [blame]
Duncan P. N. Exon Smith3a73d9e2015-06-21 16:54:56 +00001//===- 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}