DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
: Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator),
- PrevLabel(NULL), GlobalCUIndexCount(0), GlobalRangeCount(0),
+ PrevLabel(NULL), GlobalRangeCount(0),
InfoHolder(A, "info_string", DIEValueAllocator),
SkeletonHolder(A, "skel_string", DIEValueAllocator) {
CompilationDir = DIUnit.getDirectory();
DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
- CompileUnit *NewCU = new CompileUnit(GlobalCUIndexCount++, Die, DIUnit, Asm,
- this, &InfoHolder);
+ CompileUnit *NewCU = new CompileUnit(InfoHolder.getUnits().size(), Die,
+ DIUnit, Asm, this, &InfoHolder);
+ InfoHolder.addUnit(NewCU);
+
FileIDCUMap[NewCU->getUniqueID()] = 0;
// Call this to emit a .file directive if it wasn't emitted for the source
if (!FirstCU)
FirstCU = NewCU;
- InfoHolder.addUnit(NewCU);
-
CUMap.insert(std::make_pair(DIUnit, NewCU));
CUDieMap.insert(std::make_pair(Die, NewCU));
return NewCU;
}
} else {
DIE *UnitDie = new DIE(dwarf::DW_TAG_type_unit);
- TypeUnit *NewTU = new TypeUnit(GlobalCUIndexCount++, UnitDie, Language, Asm,
- this, &InfoHolder);
+ TypeUnit *NewTU = new TypeUnit(InfoHolder.getUnits().size(), UnitDie,
+ Language, Asm, this, &InfoHolder);
+ InfoHolder.addUnit(NewTU);
+
NewTU->addUInt(UnitDie, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
Language);
// Remove the References vector and add the type hash.
I->second.first = Signature;
I->second.second = NULL;
-
- InfoHolder.addUnit(NewTU);
}
// Populate all the signatures.
; Check that we generate a hash for wombat and the value, but not for the
; anonymous type contained within.
+; CHECK-LABEL: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x685bcc220141e9d7)
+; CHECK: DW_TAG_structure_type
+; CHECK-NEXT: debug_str{{.*}}"wombat"
; CHECK: DW_TAG_type_unit
; CHECK: DW_TAG_structure_type
; The signature for the outer 'wombat' type - this can be FileChecked once the
; CHECK-NOT: DW_AT_GNU_odr_signature
; CHECK: DW_TAG_member
; CHECK-NEXT: debug_str{{.*}}"a"
-; CHECK-LABEL: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x685bcc220141e9d7)
-; CHECK: DW_TAG_structure_type
-; CHECK-NEXT: debug_str{{.*}}"wombat"
; Use the unit size as a rough hash/identifier for the unit we're dealing with
; it happens to be unambiguous at the moment, but it's hardly ideal.
; CHECK-NEXT: unit_size = 0x0000002f
; CHECK-NEXT: Offset Name
; CHECK-NEXT: "walrus"
-; CHECK-NEXT: unit_size = 0x0000003f
-; CHECK-NEXT: Offset Name
-; CHECK-NEXT: "int"
; CHECK-NEXT: unit_size = 0x00000036
; CHECK-NEXT: Offset Name
; CHECK-NEXT: "wombat"
+; CHECK-NEXT: unit_size = 0x0000003f
+; CHECK-NEXT: Offset Name
+; CHECK-NEXT: "int"
%struct.bar = type { i8 }
%"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 }