[llvm] r207022 - Separate out the DWARF address pool into its own type/files.
Robinson, Paul
Paul_Robinson at playstation.sony.com
Thu Apr 24 10:58:13 PDT 2014
No block comment at the top of AddressPool.cpp?
--paulr
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> bounces at cs.uiuc.edu] On Behalf Of David Blaikie
> Sent: Wednesday, April 23, 2014 2:05 PM
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm] r207022 - Separate out the DWARF address pool into its
> own type/files.
>
> Author: dblaikie
> Date: Wed Apr 23 16:04:59 2014
> New Revision: 207022
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207022&view=rev
> Log:
> Separate out the DWARF address pool into its own type/files.
>
> Added:
> llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.h
> Modified:
> llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>
> Added: llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.cpp?rev=207022&vie
> w=auto
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.cpp (added)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.cpp Wed Apr 23
> 16:04:59 2014
> @@ -0,0 +1,36 @@
> +
> +#include "AddressPool.h"
> +#include "llvm/CodeGen/AsmPrinter.h"
> +#include "llvm/MC/MCStreamer.h"
> +#include "llvm/Target/TargetLoweringObjectFile.h"
> +
> +using namespace llvm;
> +
> +class MCExpr;
> +
> +unsigned AddressPool::getIndex(const MCSymbol *Sym, bool TLS) {
> + auto IterBool =
> + Pool.insert(std::make_pair(Sym, AddressPoolEntry(Pool.size(),
> TLS)));
> + return IterBool.first->second.Number;
> +}
> +
> +// Emit addresses into the section given.
> +void AddressPool::emit(AsmPrinter &Asm, const MCSection *AddrSection) {
> + if (Pool.empty())
> + return;
> +
> + // Start the dwarf addr section.
> + Asm.OutStreamer.SwitchSection(AddrSection);
> +
> + // Order the address pool entries by ID
> + SmallVector<const MCExpr *, 64> Entries(Pool.size());
> +
> + for (const auto &I : Pool)
> + Entries[I.second.Number] =
> + I.second.TLS
> + ?
> Asm.getObjFileLowering().getDebugThreadLocalSymbol(I.first)
> + : MCSymbolRefExpr::Create(I.first, Asm.OutContext);
> +
> + for (const MCExpr *Entry : Entries)
> + Asm.OutStreamer.EmitValue(Entry,
> Asm.getDataLayout().getPointerSize());
> +}
>
> Added: llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.h
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.h?rev=207022&view=
> auto
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.h (added)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AddressPool.h Wed Apr 23 16:04:59
> 2014
> @@ -0,0 +1,39 @@
> +//===-- llvm/CodeGen/AddressPool.h - Dwarf Debug Framework -----*- C++
> -*--===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open
> Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------------------
> ----===//
> +
> +#ifndef CODEGEN_ASMPRINTER_ADDRESSPOOL_H__
> +#define CODEGEN_ASMPRINTER_ADDRESSPOOL_H__
> +
> +#include "llvm/ADT/DenseMap.h"
> +
> +namespace llvm {
> +class MCSection;
> +class MCSymbol;
> +class AsmPrinter;
> +// Collection of addresses for this unit and assorted labels.
> +// A Symbol->unsigned mapping of addresses used by indirect
> +// references.
> +class AddressPool {
> + struct AddressPoolEntry {
> + unsigned Number;
> + bool TLS;
> + AddressPoolEntry(unsigned Number, bool TLS) : Number(Number),
> TLS(TLS) {}
> + };
> + DenseMap<const MCSymbol *, AddressPoolEntry> Pool;
> +public:
> + /// \brief Returns the index into the address pool with the given
> + /// label/symbol.
> + unsigned getIndex(const MCSymbol *Sym, bool TLS = false);
> +
> + void emit(AsmPrinter &Asm, const MCSection *AddrSection);
> +
> + bool isEmpty() { return Pool.empty(); }
> +};
> +}
> +#endif
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt?rev=207022&r1=2
> 07021&r2=207022&view=diff
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/CMakeLists.txt Wed Apr 23 16:04:59
> 2014
> @@ -1,4 +1,5 @@
> add_llvm_library(LLVMAsmPrinter
> + AddressPool.cpp
> ARMException.cpp
> AsmPrinter.cpp
> AsmPrinterDwarf.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=207022&r1=2
> 07021&r2=207022&view=diff
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Apr 23 16:04:59
> 2014
> @@ -888,7 +888,7 @@ void DwarfDebug::finalizeModuleInfo() {
>
> // We don't keep track of which addresses are used in which CU
> so this
> // is a bit pessimistic under LTO.
> - if (!InfoHolder.getAddrPool()->empty())
> + if (!InfoHolder.getAddressPool().isEmpty())
> addSectionLabel(*Asm, *SkCU, SkCU->getUnitDie(),
> dwarf::DW_AT_GNU_addr_base,
> DwarfAddrSectionSym,
> DwarfAddrSectionSym);
> @@ -1019,7 +1019,8 @@ void DwarfDebug::endModule() {
> emitDebugAbbrevDWO();
> emitDebugLineDWO();
> // Emit DWO addresses.
> - InfoHolder.emitAddresses(Asm-
> >getObjFileLowering().getDwarfAddrSection());
> + InfoHolder.getAddressPool().emit(
> + *Asm, Asm->getObjFileLowering().getDwarfAddrSection());
> emitDebugLocDWO();
> } else
> // Emit info into a debug loc section.
> @@ -2204,7 +2205,7 @@ void DwarfDebug::emitDebugLocDWO() {
> // address we know we've emitted elsewhere (the start of the
> function?
> // The start of the CU or CU subrange that encloses this range?)
> Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
> - unsigned idx = InfoHolder.getAddrPoolIndex(Entry.getBeginSym());
> + unsigned idx =
> InfoHolder.getAddressPool().getIndex(Entry.getBeginSym());
> Asm->EmitULEB128(idx);
> Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(),
> 4);
>
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp?rev=207022&r1=20
> 7021&r2=207022&view=diff
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp Wed Apr 23 16:04:59
> 2014
> @@ -48,12 +48,6 @@ unsigned DwarfFile::getStringPoolIndex(S
> return Entry.second;
> }
>
> -unsigned DwarfFile::getAddrPoolIndex(const MCSymbol *Sym, bool TLS) {
> - std::pair<AddrPool::iterator, bool> P = AddressPool.insert(
> - std::make_pair(Sym, AddressPoolEntry(AddressPool.size(), TLS)));
> - return P.first->second.Number;
> -}
> -
> // Define a unique number for the abbreviation.
> //
> void DwarfFile::assignAbbrevNumber(DIEAbbrev &Abbrev) {
> @@ -218,26 +212,4 @@ void DwarfFile::emitStrings(const MCSect
> }
> }
> }
> -
> -// Emit addresses into the section given.
> -void DwarfFile::emitAddresses(const MCSection *AddrSection) {
> -
> - if (AddressPool.empty())
> - return;
> -
> - // Start the dwarf addr section.
> - Asm->OutStreamer.SwitchSection(AddrSection);
> -
> - // Order the address pool entries by ID
> - SmallVector<const MCExpr *, 64> Entries(AddressPool.size());
> -
> - for (const auto &I : AddressPool)
> - Entries[I.second.Number] =
> - I.second.TLS
> - ? Asm-
> >getObjFileLowering().getDebugThreadLocalSymbol(I.first)
> - : MCSymbolRefExpr::Create(I.first, Asm->OutContext);
> -
> - for (const MCExpr *Entry : Entries)
> - Asm->OutStreamer.EmitValue(Entry, Asm-
> >getDataLayout().getPointerSize());
> -}
> }
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h?rev=207022&r1=2070
> 21&r2=207022&view=diff
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.h Wed Apr 23 16:04:59
> 2014
> @@ -15,6 +15,7 @@
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/ADT/StringMap.h"
> #include "llvm/Support/Allocator.h"
> +#include "AddressPool.h"
>
> #include <vector>
> #include <string>
> @@ -51,17 +52,7 @@ class DwarfFile {
> unsigned NextStringPoolNumber;
> std::string StringPref;
>
> - struct AddressPoolEntry {
> - unsigned Number;
> - bool TLS;
> - AddressPoolEntry(unsigned Number, bool TLS) : Number(Number),
> TLS(TLS) {}
> - };
> - // Collection of addresses for this unit and assorted labels.
> - // A Symbol->unsigned mapping of addresses used by indirect
> - // references.
> - typedef DenseMap<const MCSymbol *, AddressPoolEntry> AddrPool;
> - AddrPool AddressPool;
> -
> + AddressPool AddrPool;
> public:
> DwarfFile(AsmPrinter *AP, const char *Pref, BumpPtrAllocator &DA);
>
> @@ -93,9 +84,6 @@ public:
> const MCSection *OffsetSection = nullptr,
> const MCSymbol *StrSecSym = nullptr);
>
> - /// \brief Emit all of the addresses to the section given.
> - void emitAddresses(const MCSection *AddrSection);
> -
> /// \brief Returns the entry into the start of the pool.
> MCSymbol *getStringPoolSym();
>
> @@ -110,12 +98,7 @@ public:
> /// \brief Returns the string pool.
> StrPool *getStringPool() { return &StringPool; }
>
> - /// \brief Returns the index into the address pool with the given
> - /// label/symbol.
> - unsigned getAddrPoolIndex(const MCSymbol *Sym, bool TLS = false);
> -
> - /// \brief Returns the address pool.
> - AddrPool *getAddrPool() { return &AddressPool; }
> + AddressPool &getAddressPool() { return AddrPool; }
> };
> }
> #endif
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=207022&r1=20
> 7021&r2=207022&view=diff
> ========================================================================
> ======
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Apr 23 16:04:59
> 2014
> @@ -290,7 +290,7 @@ void DwarfCompileUnit::addLabelAddress(D
> if (Label)
> DD->addArangeLabel(SymbolCU(this, Label));
>
> - unsigned idx = DU->getAddrPoolIndex(Label);
> + unsigned idx = DU->getAddressPool().getIndex(Label);
> DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
> Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
> }
> @@ -335,7 +335,8 @@ void DwarfUnit::addOpAddress(DIELoc *Die
> addLabel(Die, dwarf::DW_FORM_udata, Sym);
> } else {
> addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
> - addUInt(Die, dwarf::DW_FORM_GNU_addr_index, DU-
> >getAddrPoolIndex(Sym));
> + addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
> + DU->getAddressPool().getIndex(Sym));
> }
> }
>
> @@ -1668,7 +1669,7 @@ void DwarfCompileUnit::createGlobalVaria
> } else {
> addUInt(Loc, dwarf::DW_FORM_data1,
> dwarf::DW_OP_GNU_const_index);
> addUInt(Loc, dwarf::DW_FORM_udata,
> - DU->getAddrPoolIndex(Sym, /* TLS */ true));
> + DU->getAddressPool().getIndex(Sym, /* TLS */ true));
> }
> // 3) followed by a custom OP to make the debugger do a TLS
> lookup.
> addUInt(Loc, dwarf::DW_FORM_data1,
> dwarf::DW_OP_GNU_push_tls_address);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list