[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