Line data Source code
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 :
14 : using namespace llvm;
15 :
16 48813 : bool DebugLocStream::finalizeList(AsmPrinter &Asm) {
17 97626 : if (Lists.back().EntryOffset == Entries.size()) {
18 : // Empty list. Delete it.
19 : Lists.pop_back();
20 1641 : return false;
21 : }
22 :
23 : // Real list. Generate a label for it.
24 47172 : Lists.back().Label = Asm.createTempSymbol("debug_loc");
25 47172 : return true;
26 : }
27 :
28 85416 : void DebugLocStream::finalizeEntry() {
29 170832 : if (Entries.back().ByteOffset != DWARFBytes.size())
30 : return;
31 :
32 : // The last entry was empty. Delete it.
33 38 : 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 :
41 47172 : DebugLocStream::ListBuilder::~ListBuilder() {
42 48813 : if (!Locs.finalizeList(Asm))
43 1641 : return;
44 47172 : V.initializeDbgValue(&MI);
45 47172 : V.setDebugLocListIndex(ListIndex);
46 48813 : }
|