[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