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