mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
[DebugInfo] Sink DwarfDebug::addCurrentFnArgument down into DwarfFile.
Variable handling will be sunk into DwarfFile so that abstract variables and the like can be shared across multiple CUs (to handle cross-CU inlining, for example). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220453 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -70,6 +70,7 @@ void DwarfFile::emitUnits(const MCSymbol *ASectionSym) {
|
||||
Asm->OutStreamer.EmitLabel(TheU->getLabelEnd());
|
||||
}
|
||||
}
|
||||
|
||||
// Compute the size and offset for each DIE.
|
||||
void DwarfFile::computeSizeAndOffsets() {
|
||||
// Offset from the first CU in the debug info section is 0 initially.
|
||||
@ -155,4 +156,26 @@ void DwarfFile::emitStrings(const MCSection *StrSection,
|
||||
const MCSection *OffsetSection) {
|
||||
StrPool.emit(*Asm, StrSection, OffsetSection);
|
||||
}
|
||||
|
||||
// If Var is a current function argument then add it to CurrentFnArguments list.
|
||||
bool DwarfFile::addCurrentFnArgument(DbgVariable *Var, LexicalScope *Scope) {
|
||||
if (Scope->getParent())
|
||||
return false;
|
||||
DIVariable DV = Var->getVariable();
|
||||
if (DV.getTag() != dwarf::DW_TAG_arg_variable)
|
||||
return false;
|
||||
unsigned ArgNo = DV.getArgNumber();
|
||||
if (ArgNo == 0)
|
||||
return false;
|
||||
|
||||
auto &CurrentFnArguments = DD.getCurrentFnArguments();
|
||||
|
||||
// llvm::Function argument size is not good indicator of how many
|
||||
// arguments does the function have at source level.
|
||||
if (ArgNo > CurrentFnArguments.size())
|
||||
CurrentFnArguments.resize(ArgNo * 2);
|
||||
assert(!CurrentFnArguments[ArgNo - 1]);
|
||||
CurrentFnArguments[ArgNo - 1] = Var;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user