[llvm] r207022 - Separate out the DWARF address pool into its own type/files.

David Blaikie dblaikie at gmail.com
Thu Apr 24 23:29:56 PDT 2014


On Thu, Apr 24, 2014 at 10:58 AM, Robinson, Paul
<Paul_Robinson at playstation.sony.com> wrote:
> No block comment at the top of AddressPool.cpp?

Thanks for the catch - added in r207198

> --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