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