brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 700e24a Raw
45 lines · cpp
1//===- DebugLocStream.cpp - DWARF debug_loc stream --------------*- C++ -*-===//2//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "DebugLocStream.h"10#include "DwarfDebug.h"11#include "llvm/CodeGen/AsmPrinter.h"12 13using namespace llvm;14 15bool DebugLocStream::finalizeList(AsmPrinter &Asm) {16  if (Lists.back().EntryOffset == Entries.size()) {17    // Empty list.  Delete it.18    Lists.pop_back();19    return false;20  }21 22  // Real list.  Generate a label for it.23  Lists.back().Label = Asm.createTempSymbol("debug_loc");24  return true;25}26 27void DebugLocStream::finalizeEntry() {28  if (Entries.back().ByteOffset != DWARFBytes.size())29    return;30 31  // The last entry was empty.  Delete it.32  Comments.erase(Comments.begin() + Entries.back().CommentOffset,33                 Comments.end());34  Entries.pop_back();35 36  assert(Lists.back().EntryOffset <= Entries.size() &&37         "Popped off more entries than are in the list");38}39 40DebugLocStream::ListBuilder::~ListBuilder() {41  if (!Locs.finalizeList(Asm))42    return;43  V.emplace<Loc::Multi>(ListIndex, TagOffset);44}45