1 //===- DebugLocStream.cpp - DWARF debug_loc stream --------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "DebugLocStream.h"
10 #include "DwarfDebug.h"
11 #include "llvm/CodeGen/AsmPrinter.h"
15 bool DebugLocStream::finalizeList(AsmPrinter
&Asm
) {
16 if (Lists
.back().EntryOffset
== Entries
.size()) {
17 // Empty list. Delete it.
22 // Real list. Generate a label for it.
23 Lists
.back().Label
= Asm
.createTempSymbol("debug_loc");
27 void DebugLocStream::finalizeEntry() {
28 if (Entries
.back().ByteOffset
!= DWARFBytes
.size())
31 // The last entry was empty. Delete it.
32 Comments
.erase(Comments
.begin() + Entries
.back().CommentOffset
,
36 assert(Lists
.back().EntryOffset
<= Entries
.size() &&
37 "Popped off more entries than are in the list");
40 DebugLocStream::ListBuilder::~ListBuilder() {
41 if (!Locs
.finalizeList(Asm
))
43 V
.initializeDbgValue(&MI
);
44 V
.setDebugLocListIndex(ListIndex
);