mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Use dwarf::Tag rather than unsigned for DIE::Tag to make debugging easier.
Nice to be able to just print out the Tag and have the debugger print dwarf::DW_TAG_subprogram or whatever, rather than an int. It's a bit finicky (for example DIDescriptor::getTag still returns unsigned) because some places still handle real dwarf tags + our fake tags (one day we'll remove the fake tags, hopefully). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206098 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ac871732b5
commit
9c9ef05445
@ -132,8 +132,13 @@ protected:
|
||||
///
|
||||
SmallVector<DIEValue *, 12> Values;
|
||||
|
||||
protected:
|
||||
DIE()
|
||||
: Offset(0), Size(0), Abbrev((dwarf::Tag)0, dwarf::DW_CHILDREN_no),
|
||||
Parent(0) {}
|
||||
|
||||
public:
|
||||
explicit DIE(unsigned Tag)
|
||||
explicit DIE(dwarf::Tag Tag)
|
||||
: Offset(0), Size(0), Abbrev((dwarf::Tag)Tag, dwarf::DW_CHILDREN_no),
|
||||
Parent(0) {}
|
||||
~DIE();
|
||||
@ -464,7 +469,7 @@ public:
|
||||
class DIELoc : public DIEValue, public DIE {
|
||||
mutable unsigned Size; // Size in bytes excluding size header.
|
||||
public:
|
||||
DIELoc() : DIEValue(isLoc), DIE(0), Size(0) {}
|
||||
DIELoc() : DIEValue(isLoc), Size(0) {}
|
||||
|
||||
/// ComputeSize - Calculate the size of the location expression.
|
||||
///
|
||||
@ -507,7 +512,7 @@ public:
|
||||
class DIEBlock : public DIEValue, public DIE {
|
||||
mutable unsigned Size; // Size in bytes excluding size header.
|
||||
public:
|
||||
DIEBlock() : DIEValue(isBlock), DIE(0), Size(0) {}
|
||||
DIEBlock() : DIEValue(isBlock), Size(0) {}
|
||||
|
||||
/// ComputeSize - Calculate the size of the location expression.
|
||||
///
|
||||
|
@ -791,8 +791,7 @@ void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU,
|
||||
assert(Module.Verify() &&
|
||||
"Use one of the MDNode * overloads to handle invalid metadata");
|
||||
assert(Context && "Should always have a context for an imported_module");
|
||||
DIE *IMDie = new DIE(Module.getTag());
|
||||
TheCU->insertDIE(Module, IMDie);
|
||||
DIE *IMDie = TheCU->createAndAddDIE(Module.getTag(), *Context, Module);
|
||||
DIE *EntityDie;
|
||||
DIDescriptor Entity = resolve(Module.getEntity());
|
||||
if (Entity.isNameSpace())
|
||||
@ -810,7 +809,6 @@ void DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit *TheCU,
|
||||
StringRef Name = Module.getName();
|
||||
if (!Name.empty())
|
||||
TheCU->addString(IMDie, dwarf::DW_AT_name, Name);
|
||||
Context->addChild(IMDie);
|
||||
}
|
||||
|
||||
// Emit all Dwarf sections that should come prior to the content. Create
|
||||
|
@ -90,7 +90,7 @@ public:
|
||||
int getFrameIndex() const { return FrameIndex; }
|
||||
void setFrameIndex(int FI) { FrameIndex = FI; }
|
||||
// Translate tag to proper Dwarf tag.
|
||||
uint16_t getTag() const {
|
||||
dwarf::Tag getTag() const {
|
||||
if (Var.getTag() == dwarf::DW_TAG_arg_variable)
|
||||
return dwarf::DW_TAG_formal_parameter;
|
||||
|
||||
|
@ -384,7 +384,9 @@ void DwarfUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute,
|
||||
/// Create a DIE with the given Tag, add the DIE to its parent, and
|
||||
/// call insertDIE if MD is not null.
|
||||
DIE *DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
|
||||
DIE *Die = new DIE(Tag);
|
||||
assert(Tag != dwarf::DW_TAG_auto_variable &&
|
||||
Tag != dwarf::DW_TAG_arg_variable);
|
||||
DIE *Die = new DIE((dwarf::Tag)Tag);
|
||||
Parent.addChild(Die);
|
||||
if (N)
|
||||
insertDIE(N, Die);
|
||||
|
Loading…
Reference in New Issue
Block a user