mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-04 01:11:44 +00:00
Remove intermediate accelerator table for names.
(similar changes coming for the other accelerator tables) llvm-svn: 207049
This commit is contained in:
parent
1d124691ed
commit
0ea0080644
@ -15,7 +15,6 @@
|
|||||||
#include "DwarfDebug.h"
|
#include "DwarfDebug.h"
|
||||||
#include "DIE.h"
|
#include "DIE.h"
|
||||||
#include "DIEHash.h"
|
#include "DIEHash.h"
|
||||||
#include "DwarfAccelTable.h"
|
|
||||||
#include "DwarfUnit.h"
|
#include "DwarfUnit.h"
|
||||||
#include "llvm/ADT/STLExtras.h"
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
@ -169,7 +168,9 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
|
|||||||
: Asm(A), MMI(Asm->MMI), FirstCU(0), PrevLabel(NULL), GlobalRangeCount(0),
|
: Asm(A), MMI(Asm->MMI), FirstCU(0), PrevLabel(NULL), GlobalRangeCount(0),
|
||||||
InfoHolder(A, "info_string", DIEValueAllocator),
|
InfoHolder(A, "info_string", DIEValueAllocator),
|
||||||
UsedNonDefaultText(false),
|
UsedNonDefaultText(false),
|
||||||
SkeletonHolder(A, "skel_string", DIEValueAllocator) {
|
SkeletonHolder(A, "skel_string", DIEValueAllocator),
|
||||||
|
AccelNames(DwarfAccelTable::Atom(dwarf::DW_ATOM_die_offset,
|
||||||
|
dwarf::DW_FORM_data4)) {
|
||||||
|
|
||||||
DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
|
DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
|
||||||
DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
|
DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = DwarfLineSectionSym = 0;
|
||||||
@ -260,15 +261,15 @@ static bool SectionSort(const MCSection *A, const MCSection *B) {
|
|||||||
// TODO: Determine whether or not we should add names for programs
|
// TODO: Determine whether or not we should add names for programs
|
||||||
// that do not have a DW_AT_name or DW_AT_linkage_name field - this
|
// that do not have a DW_AT_name or DW_AT_linkage_name field - this
|
||||||
// is only slightly different than the lookup of non-standard ObjC names.
|
// is only slightly different than the lookup of non-standard ObjC names.
|
||||||
static void addSubprogramNames(DwarfUnit &TheU, DISubprogram SP, DIE *Die) {
|
void DwarfDebug::addSubprogramNames(DwarfUnit &TheU, DISubprogram SP, DIE *Die) {
|
||||||
if (!SP.isDefinition())
|
if (!SP.isDefinition())
|
||||||
return;
|
return;
|
||||||
TheU.addAccelName(SP.getName(), Die);
|
addAccelName(SP.getName(), Die);
|
||||||
|
|
||||||
// If the linkage name is different than the name, go ahead and output
|
// If the linkage name is different than the name, go ahead and output
|
||||||
// that as well into the name table.
|
// that as well into the name table.
|
||||||
if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
|
if (SP.getLinkageName() != "" && SP.getName() != SP.getLinkageName())
|
||||||
TheU.addAccelName(SP.getLinkageName(), Die);
|
addAccelName(SP.getLinkageName(), Die);
|
||||||
|
|
||||||
// If this is an Objective-C selector name add it to the ObjC accelerator
|
// If this is an Objective-C selector name add it to the ObjC accelerator
|
||||||
// too.
|
// too.
|
||||||
@ -279,7 +280,7 @@ static void addSubprogramNames(DwarfUnit &TheU, DISubprogram SP, DIE *Die) {
|
|||||||
if (Category != "")
|
if (Category != "")
|
||||||
TheU.addAccelObjC(Category, Die);
|
TheU.addAccelObjC(Category, Die);
|
||||||
// Also add the base method name to the name table.
|
// Also add the base method name to the name table.
|
||||||
TheU.addAccelName(getObjCMethodName(SP.getName()), Die);
|
addAccelName(getObjCMethodName(SP.getName()), Die);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2566,3 +2567,14 @@ void DwarfDebug::attachLowHighPC(DwarfCompileUnit &Unit, DIE *D,
|
|||||||
else
|
else
|
||||||
Unit.addLabelDelta(D, dwarf::DW_AT_high_pc, End, Begin);
|
Unit.addLabelDelta(D, dwarf::DW_AT_high_pc, End, Begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Accelerator table mutators - add each name along with its companion
|
||||||
|
// DIE to the proper table while ensuring that the name that we're going
|
||||||
|
// to reference is in the string table. We do this since the names we
|
||||||
|
// add may not only be identical to the names in the DIE.
|
||||||
|
void DwarfDebug::addAccelName(StringRef Name, const DIE *Die) {
|
||||||
|
if (!useDwarfAccelTables())
|
||||||
|
return;
|
||||||
|
InfoHolder.getStringPoolEntry(Name);
|
||||||
|
AccelNames.AddName(Name, Die);
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "DIE.h"
|
#include "DIE.h"
|
||||||
#include "DebugLocEntry.h"
|
#include "DebugLocEntry.h"
|
||||||
#include "DebugLocList.h"
|
#include "DebugLocList.h"
|
||||||
|
#include "DwarfAccelTable.h"
|
||||||
#include "llvm/ADT/DenseMap.h"
|
#include "llvm/ADT/DenseMap.h"
|
||||||
#include "llvm/ADT/MapVector.h"
|
#include "llvm/ADT/MapVector.h"
|
||||||
#include "llvm/ADT/SmallPtrSet.h"
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
@ -323,6 +324,8 @@ class DwarfDebug : public AsmPrinterHandler {
|
|||||||
|
|
||||||
AddressPool AddrPool;
|
AddressPool AddrPool;
|
||||||
|
|
||||||
|
DwarfAccelTable AccelNames;
|
||||||
|
|
||||||
MCDwarfDwoLineTable *getDwoLineTable(const DwarfCompileUnit &);
|
MCDwarfDwoLineTable *getDwoLineTable(const DwarfCompileUnit &);
|
||||||
|
|
||||||
void addScopeVariable(LexicalScope *LS, DbgVariable *Var);
|
void addScopeVariable(LexicalScope *LS, DbgVariable *Var);
|
||||||
@ -634,7 +637,11 @@ public:
|
|||||||
/// or another context nested inside a subprogram.
|
/// or another context nested inside a subprogram.
|
||||||
bool isSubprogramContext(const MDNode *Context);
|
bool isSubprogramContext(const MDNode *Context);
|
||||||
|
|
||||||
|
void addSubprogramNames(DwarfUnit &TheU, DISubprogram SP, DIE *Die);
|
||||||
|
|
||||||
AddressPool &getAddressPool() { return AddrPool; }
|
AddressPool &getAddressPool() { return AddrPool; }
|
||||||
|
|
||||||
|
void addAccelName(StringRef Name, const DIE *Die);
|
||||||
};
|
};
|
||||||
} // End of namespace llvm
|
} // End of namespace llvm
|
||||||
|
|
||||||
|
@ -1065,18 +1065,6 @@ void DwarfUnit::addType(DIE *Entity, DIType Ty, dwarf::Attribute Attribute) {
|
|||||||
addDIEEntry(Entity, Attribute, Entry);
|
addDIEEntry(Entity, Attribute, Entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accelerator table mutators - add each name along with its companion
|
|
||||||
// DIE to the proper table while ensuring that the name that we're going
|
|
||||||
// to reference is in the string table. We do this since the names we
|
|
||||||
// add may not only be identical to the names in the DIE.
|
|
||||||
void DwarfUnit::addAccelName(StringRef Name, const DIE *Die) {
|
|
||||||
if (!DD->useDwarfAccelTables())
|
|
||||||
return;
|
|
||||||
DU->getStringPoolEntry(Name);
|
|
||||||
std::vector<const DIE *> &DIEs = AccelNames[Name];
|
|
||||||
DIEs.push_back(Die);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DwarfUnit::addAccelObjC(StringRef Name, const DIE *Die) {
|
void DwarfUnit::addAccelObjC(StringRef Name, const DIE *Die) {
|
||||||
if (!DD->useDwarfAccelTables())
|
if (!DD->useDwarfAccelTables())
|
||||||
return;
|
return;
|
||||||
@ -1727,12 +1715,12 @@ void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
|
|||||||
|
|
||||||
if (addToAccelTable) {
|
if (addToAccelTable) {
|
||||||
DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
|
DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
|
||||||
addAccelName(GV.getName(), AddrDIE);
|
DD->addAccelName(GV.getName(), AddrDIE);
|
||||||
|
|
||||||
// If the linkage name is different than the name, go ahead and output
|
// If the linkage name is different than the name, go ahead and output
|
||||||
// that as well into the name table.
|
// that as well into the name table.
|
||||||
if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
|
if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
|
||||||
addAccelName(GV.getLinkageName(), AddrDIE);
|
DD->addAccelName(GV.getLinkageName(), AddrDIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GV.isLocalToUnit())
|
if (!GV.isLocalToUnit())
|
||||||
|
@ -275,9 +275,6 @@ public:
|
|||||||
///
|
///
|
||||||
void addGlobalName(StringRef Name, DIE *Die, DIScope Context);
|
void addGlobalName(StringRef Name, DIE *Die, DIScope Context);
|
||||||
|
|
||||||
/// addAccelName - Add a new name to the name accelerator table.
|
|
||||||
void addAccelName(StringRef Name, const DIE *Die);
|
|
||||||
|
|
||||||
/// addAccelObjC - Add a new name to the ObjC accelerator table.
|
/// addAccelObjC - Add a new name to the ObjC accelerator table.
|
||||||
void addAccelObjC(StringRef Name, const DIE *Die);
|
void addAccelObjC(StringRef Name, const DIE *Die);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user