brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · f1edc6c Raw
66 lines · c
1//===- llvm/CodeGen/AddressPool.h - Dwarf Debug Framework -------*- 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#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H10#define LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H11 12#include "llvm/ADT/DenseMap.h"13 14namespace llvm {15 16class AsmPrinter;17class MCSection;18class MCSymbol;19 20// Collection of addresses for this unit and assorted labels.21// A Symbol->unsigned mapping of addresses used by indirect22// references.23class AddressPool {24  struct AddressPoolEntry {25    unsigned Number;26    bool TLS;27 28    AddressPoolEntry(unsigned Number, bool TLS) : Number(Number), TLS(TLS) {}29  };30  DenseMap<const MCSymbol *, AddressPoolEntry> Pool;31 32  /// Record whether the AddressPool has been queried for an address index since33  /// the last "resetUsedFlag" call. Used to implement type unit fallback - a34  /// type that references addresses cannot be placed in a type unit when using35  /// fission.36  bool HasBeenUsed = false;37 38public:39  AddressPool() = default;40 41  /// Returns the index into the address pool with the given42  /// label/symbol.43  unsigned getIndex(const MCSymbol *Sym, bool TLS = false);44 45  void emit(AsmPrinter &Asm, MCSection *AddrSection);46 47  bool isEmpty() { return Pool.empty(); }48 49  bool hasBeenUsed() const { return HasBeenUsed; }50 51  void resetUsedFlag(bool HasBeenUsed = false) { this->HasBeenUsed = HasBeenUsed; }52 53  MCSymbol *getLabel() { return AddressTableBaseSym; }54  void setLabel(MCSymbol *Sym) { AddressTableBaseSym = Sym; }55 56private:57  MCSymbol *emitHeader(AsmPrinter &Asm, MCSection *Section);58 59  /// Symbol designates the start of the contribution to the address table.60  MCSymbol *AddressTableBaseSym = nullptr;61};62 63} // end namespace llvm64 65#endif // LLVM_LIB_CODEGEN_ASMPRINTER_ADDRESSPOOL_H66