parent
8ce24133fd
commit
2606f4d6d2
|
@ -644,7 +644,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||||
|
|
||||||
// Define variable debug information entry.
|
// Define variable debug information entry.
|
||||||
DIE *VariableDie = new DIE(Tag);
|
DIE *VariableDie = new DIE(Tag);
|
||||||
CompileUnit *TheCU = getCompileUnit(DV->getVariable());
|
CompileUnit *VariableCU = getCompileUnit(DV->getVariable());
|
||||||
DIE *AbsDIE = NULL;
|
DIE *AbsDIE = NULL;
|
||||||
DenseMap<const DbgVariable *, const DbgVariable *>::iterator
|
DenseMap<const DbgVariable *, const DbgVariable *>::iterator
|
||||||
V2AVI = VarToAbstractVarMap.find(DV);
|
V2AVI = VarToAbstractVarMap.find(DV);
|
||||||
|
@ -652,20 +652,23 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||||
AbsDIE = V2AVI->second->getDIE();
|
AbsDIE = V2AVI->second->getDIE();
|
||||||
|
|
||||||
if (AbsDIE)
|
if (AbsDIE)
|
||||||
TheCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
|
VariableCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
|
||||||
dwarf::DW_FORM_ref4, AbsDIE);
|
dwarf::DW_FORM_ref4, AbsDIE);
|
||||||
else {
|
else {
|
||||||
TheCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name);
|
VariableCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
|
||||||
TheCU->addSourceLine(VariableDie, DV->getVariable());
|
Name);
|
||||||
|
VariableCU->addSourceLine(VariableDie, DV->getVariable());
|
||||||
|
|
||||||
// Add variable type.
|
// Add variable type.
|
||||||
TheCU->addType(VariableDie, DV->getType());
|
VariableCU->addType(VariableDie, DV->getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
|
if (Tag == dwarf::DW_TAG_formal_parameter && DV->getType().isArtificial())
|
||||||
TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
|
VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
|
||||||
|
dwarf::DW_FORM_flag, 1);
|
||||||
else if (DIVariable(DV->getVariable()).isArtificial())
|
else if (DIVariable(DV->getVariable()).isArtificial())
|
||||||
TheCU->addUInt(VariableDie, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
|
VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
|
||||||
|
dwarf::DW_FORM_flag, 1);
|
||||||
|
|
||||||
if (Scope->isAbstractScope()) {
|
if (Scope->isAbstractScope()) {
|
||||||
DV->setDIE(VariableDie);
|
DV->setDIE(VariableDie);
|
||||||
|
@ -676,7 +679,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||||
|
|
||||||
unsigned Offset = DV->getDotDebugLocOffset();
|
unsigned Offset = DV->getDotDebugLocOffset();
|
||||||
if (Offset != ~0U) {
|
if (Offset != ~0U) {
|
||||||
TheCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
|
VariableCU->addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
|
||||||
Asm->GetTempSymbol("debug_loc", Offset));
|
Asm->GetTempSymbol("debug_loc", Offset));
|
||||||
DV->setDIE(VariableDie);
|
DV->setDIE(VariableDie);
|
||||||
UseDotDebugLocEntry.insert(VariableDie);
|
UseDotDebugLocEntry.insert(VariableDie);
|
||||||
|
@ -696,25 +699,26 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||||
const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
|
const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
|
||||||
if (DVInsn->getOperand(1).isImm() &&
|
if (DVInsn->getOperand(1).isImm() &&
|
||||||
TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
|
TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
|
||||||
TheCU->addFrameVariableAddress(DV, VariableDie,
|
VariableCU->addFrameVariableAddress(DV, VariableDie,
|
||||||
DVInsn->getOperand(1).getImm());
|
DVInsn->getOperand(1).getImm());
|
||||||
updated = true;
|
updated = true;
|
||||||
} else
|
} else
|
||||||
updated = TheCU->addRegisterAddress(VariableDie, RegOp);
|
updated = VariableCU->addRegisterAddress(VariableDie, RegOp);
|
||||||
}
|
}
|
||||||
else if (DVInsn->getOperand(0).isImm())
|
else if (DVInsn->getOperand(0).isImm())
|
||||||
updated = TheCU->addConstantValue(VariableDie, DVInsn->getOperand(0));
|
updated = VariableCU->addConstantValue(VariableDie,
|
||||||
|
DVInsn->getOperand(0));
|
||||||
else if (DVInsn->getOperand(0).isFPImm())
|
else if (DVInsn->getOperand(0).isFPImm())
|
||||||
updated =
|
updated =
|
||||||
TheCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
|
VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
|
||||||
} else {
|
} else {
|
||||||
MachineLocation Location = Asm->getDebugValueLocation(DVInsn);
|
MachineLocation Location = Asm->getDebugValueLocation(DVInsn);
|
||||||
if (Location.getReg()) {
|
if (Location.getReg()) {
|
||||||
if (DV->getVariable().hasComplexAddress())
|
if (DV->getVariable().hasComplexAddress())
|
||||||
TheCU->addComplexAddress(DV, VariableDie, dwarf::DW_AT_location,
|
VariableCU->addComplexAddress(DV, VariableDie, dwarf::DW_AT_location,
|
||||||
Location);
|
Location);
|
||||||
else
|
else
|
||||||
TheCU->addAddress(VariableDie, dwarf::DW_AT_location, Location);
|
VariableCU->addAddress(VariableDie, dwarf::DW_AT_location, Location);
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -731,7 +735,7 @@ DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, DbgScope *Scope) {
|
||||||
// .. else use frame index, if available.
|
// .. else use frame index, if available.
|
||||||
int FI = 0;
|
int FI = 0;
|
||||||
if (findVariableFrameIndex(DV, &FI))
|
if (findVariableFrameIndex(DV, &FI))
|
||||||
TheCU->addFrameVariableAddress(DV, VariableDie, FI);
|
VariableCU->addFrameVariableAddress(DV, VariableDie, FI);
|
||||||
|
|
||||||
DV->setDIE(VariableDie);
|
DV->setDIE(VariableDie);
|
||||||
return VariableDie;
|
return VariableDie;
|
||||||
|
|
Loading…
Reference in New Issue