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