mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 22:24:28 +00:00
Recommit, with fixes:
Add some support for dealing with an object pointer on arguments. Part of rdar://9797999 which now supports adding the object pointer attribute to the subprogram as it should. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163754 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -330,6 +330,9 @@ DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
|
||||
SPCU->addType(Arg, ATy);
|
||||
if (ATy.isArtificial())
|
||||
SPCU->addFlag(Arg, dwarf::DW_AT_artificial);
|
||||
if (ATy.isObjectPointer())
|
||||
SPCU->addDIEEntry(SPDie, dwarf::DW_AT_object_pointer, dwarf::DW_FORM_ref4,
|
||||
Arg);
|
||||
SPDie->addChild(Arg);
|
||||
}
|
||||
DIE *SPDeclDie = SPDie;
|
||||
@ -496,14 +499,17 @@ DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
|
||||
return NULL;
|
||||
|
||||
SmallVector<DIE *, 8> Children;
|
||||
DIE *ObjectPointer = NULL;
|
||||
|
||||
// Collect arguments for current function.
|
||||
if (LScopes.isCurrentFunctionScope(Scope))
|
||||
for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
|
||||
if (DbgVariable *ArgDV = CurrentFnArguments[i])
|
||||
if (DIE *Arg =
|
||||
TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope()))
|
||||
TheCU->constructVariableDIE(ArgDV, Scope->isAbstractScope())) {
|
||||
Children.push_back(Arg);
|
||||
if (ArgDV->isObjectPointer()) ObjectPointer = Arg;
|
||||
}
|
||||
|
||||
// Collect lexical scope children first.
|
||||
const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
|
||||
@ -544,6 +550,10 @@ DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
|
||||
E = Children.end(); I != E; ++I)
|
||||
ScopeDIE->addChild(*I);
|
||||
|
||||
if (DS.isSubprogram() && ObjectPointer != NULL)
|
||||
TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_object_pointer,
|
||||
dwarf::DW_FORM_ref4, ObjectPointer);
|
||||
|
||||
if (DS.isSubprogram())
|
||||
TheCU->addPubTypes(DISubprogram(DS));
|
||||
|
||||
|
Reference in New Issue
Block a user