11a82d4c0SDimitry Andric //===- DebugLocStream.cpp - DWARF debug_loc stream --------------*- C++ -*-===// 21a82d4c0SDimitry Andric // 3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61a82d4c0SDimitry Andric // 71a82d4c0SDimitry Andric //===----------------------------------------------------------------------===// 81a82d4c0SDimitry Andric 91a82d4c0SDimitry Andric #include "DebugLocStream.h" 101a82d4c0SDimitry Andric #include "DwarfDebug.h" 111a82d4c0SDimitry Andric #include "llvm/CodeGen/AsmPrinter.h" 121a82d4c0SDimitry Andric 131a82d4c0SDimitry Andric using namespace llvm; 141a82d4c0SDimitry Andric finalizeList(AsmPrinter & Asm)151a82d4c0SDimitry Andricbool DebugLocStream::finalizeList(AsmPrinter &Asm) { 161a82d4c0SDimitry Andric if (Lists.back().EntryOffset == Entries.size()) { 171a82d4c0SDimitry Andric // Empty list. Delete it. 181a82d4c0SDimitry Andric Lists.pop_back(); 191a82d4c0SDimitry Andric return false; 201a82d4c0SDimitry Andric } 211a82d4c0SDimitry Andric 221a82d4c0SDimitry Andric // Real list. Generate a label for it. 231a82d4c0SDimitry Andric Lists.back().Label = Asm.createTempSymbol("debug_loc"); 241a82d4c0SDimitry Andric return true; 251a82d4c0SDimitry Andric } 261a82d4c0SDimitry Andric finalizeEntry()271a82d4c0SDimitry Andricvoid DebugLocStream::finalizeEntry() { 281a82d4c0SDimitry Andric if (Entries.back().ByteOffset != DWARFBytes.size()) 291a82d4c0SDimitry Andric return; 301a82d4c0SDimitry Andric 311a82d4c0SDimitry Andric // The last entry was empty. Delete it. 321a82d4c0SDimitry Andric Comments.erase(Comments.begin() + Entries.back().CommentOffset, 331a82d4c0SDimitry Andric Comments.end()); 341a82d4c0SDimitry Andric Entries.pop_back(); 351a82d4c0SDimitry Andric 361a82d4c0SDimitry Andric assert(Lists.back().EntryOffset <= Entries.size() && 371a82d4c0SDimitry Andric "Popped off more entries than are in the list"); 381a82d4c0SDimitry Andric } 391a82d4c0SDimitry Andric ~ListBuilder()401a82d4c0SDimitry AndricDebugLocStream::ListBuilder::~ListBuilder() { 411a82d4c0SDimitry Andric if (!Locs.finalizeList(Asm)) 421a82d4c0SDimitry Andric return; 43b1c73532SDimitry Andric V.emplace<Loc::Multi>(ListIndex, TagOffset); 441a82d4c0SDimitry Andric } 45