mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
Construct subprogram DIEs using DebugInfo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61772 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -3214,6 +3214,45 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ConstructSubprograms - Create DIEs for each of the externally visible
|
||||||
|
/// subprograms.
|
||||||
|
void ConstructSubprograms() {
|
||||||
|
|
||||||
|
std::string SPName = "llvm.dbg.subprograms";
|
||||||
|
std::vector<GlobalVariable*> Result;
|
||||||
|
getGlobalVariablesUsing(*M, SPName, Result);
|
||||||
|
for (std::vector<GlobalVariable *>::iterator RI = Result.begin(),
|
||||||
|
RE = Result.end(); RI != RE; ++RI) {
|
||||||
|
|
||||||
|
DISubprogram *SP = new DISubprogram(*RI);
|
||||||
|
CompileUnit *Unit = FindCompileUnit(SP->getCompileUnit());
|
||||||
|
|
||||||
|
// Check for pre-existence.
|
||||||
|
DIE *&Slot = Unit->getDieMapSlotFor(SP->getGV());
|
||||||
|
if (Slot) continue;
|
||||||
|
|
||||||
|
DIE *SubprogramDie = new DIE(DW_TAG_subprogram);
|
||||||
|
AddString(SubprogramDie, DW_AT_name, DW_FORM_string, SP->getName());
|
||||||
|
const std::string &LinkageName = SP->getLinkageName();
|
||||||
|
if (!LinkageName.empty())
|
||||||
|
AddString(SubprogramDie, DW_AT_MIPS_linkage_name, DW_FORM_string,
|
||||||
|
LinkageName);
|
||||||
|
DIType SPTy = SP->getType();
|
||||||
|
AddType(Unit, SubprogramDie, SPTy);
|
||||||
|
if (!SP->isLocalToUnit())
|
||||||
|
AddUInt(SubprogramDie, DW_AT_external, DW_FORM_flag, 1);
|
||||||
|
AddUInt(SubprogramDie, DW_AT_prototyped, DW_FORM_flag, 1);
|
||||||
|
|
||||||
|
AddSourceLine(SubprogramDie, SP);
|
||||||
|
//Add to map.
|
||||||
|
Slot = SubprogramDie;
|
||||||
|
//Add to context owner.
|
||||||
|
Unit->getDie()->AddChild(SubprogramDie);
|
||||||
|
//Expose as global.
|
||||||
|
Unit->AddGlobal(SP->getName(), SubprogramDie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// ConstructSubprogramDIEs - Create DIEs for each of the externally visible
|
/// ConstructSubprogramDIEs - Create DIEs for each of the externally visible
|
||||||
/// subprograms.
|
/// subprograms.
|
||||||
void ConstructSubprogramDIEs() {
|
void ConstructSubprogramDIEs() {
|
||||||
|
Reference in New Issue
Block a user