mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-29 22:52:18 +00:00
Move the addition of the dwo_id as late as possible after everything
has been finalized except for sizes and offsets. Update test accordingly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188199 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d275ff5d4c
commit
f962c02b80
@ -888,15 +888,6 @@ void DwarfDebug::beginModule() {
|
||||
// available.
|
||||
for (unsigned i = 0, e = ImportedEntities.getNumElements(); i != e; ++i)
|
||||
constructImportedEntityDIE(CU, ImportedEntities.getElement(i));
|
||||
// If we're splitting the dwarf out now that we've got the entire
|
||||
// CU then construct a skeleton CU based upon it.
|
||||
if (useSplitDwarf()) {
|
||||
// This should be a unique identifier when we want to build .dwp files.
|
||||
CU->addUInt(CU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
|
||||
dwarf::DW_FORM_data8, 0);
|
||||
// Now construct the skeleton CU associated.
|
||||
constructSkeletonCU(CUNode);
|
||||
}
|
||||
}
|
||||
|
||||
// Tell MMI that we have debug info.
|
||||
@ -1005,14 +996,6 @@ void DwarfDebug::finalizeModuleInfo() {
|
||||
// Attach DW_AT_inline attribute with inlined subprogram DIEs.
|
||||
computeInlinedDIEs();
|
||||
|
||||
// Emit DW_AT_containing_type attribute to connect types with their
|
||||
// vtable holding type.
|
||||
for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
|
||||
CUE = CUMap.end(); CUI != CUE; ++CUI) {
|
||||
CompileUnit *TheCU = CUI->second;
|
||||
TheCU->constructContainingTypeDIEs();
|
||||
}
|
||||
|
||||
// Split out type units and conditionally add an ODR tag to the split
|
||||
// out type.
|
||||
// FIXME: Do type splitting.
|
||||
@ -1029,7 +1012,30 @@ void DwarfDebug::finalizeModuleInfo() {
|
||||
Hash.computeDIEODRSignature(Die));
|
||||
}
|
||||
|
||||
// Compute DIE offsets and sizes.
|
||||
// Handle anything that needs to be done on a per-cu basis.
|
||||
for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
|
||||
CUE = CUMap.end();
|
||||
CUI != CUE; ++CUI) {
|
||||
CompileUnit *TheCU = CUI->second;
|
||||
// Emit DW_AT_containing_type attribute to connect types with their
|
||||
// vtable holding type.
|
||||
TheCU->constructContainingTypeDIEs();
|
||||
|
||||
// If we're splitting the dwarf out now that we've got the entire
|
||||
// CU then construct a skeleton CU based upon it.
|
||||
if (useSplitDwarf()) {
|
||||
// This should be a unique identifier when we want to build .dwp files.
|
||||
TheCU->addUInt(TheCU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
|
||||
dwarf::DW_FORM_data8, 0);
|
||||
// Now construct the skeleton CU associated.
|
||||
CompileUnit *SkCU = constructSkeletonCU(CUI->first);
|
||||
// This should be a unique identifier when we want to build .dwp files.
|
||||
SkCU->addUInt(SkCU->getCUDie(), dwarf::DW_AT_GNU_dwo_id,
|
||||
dwarf::DW_FORM_data8, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Compute DIE offsets and sizes.
|
||||
InfoHolder.computeSizeAndOffsets();
|
||||
if (useSplitDwarf())
|
||||
SkeletonHolder.computeSizeAndOffsets();
|
||||
@ -2686,9 +2692,6 @@ CompileUnit *DwarfDebug::constructSkeletonCU(const MDNode *N) {
|
||||
NewCU->addLocalString(Die, dwarf::DW_AT_GNU_dwo_name,
|
||||
DIUnit.getSplitDebugFilename());
|
||||
|
||||
// This should be a unique identifier when we want to build .dwp files.
|
||||
NewCU->addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8, 0);
|
||||
|
||||
// Relocate to the beginning of the addr_base section, else 0 for the
|
||||
// beginning of the one for this compile unit.
|
||||
if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
|
||||
|
@ -23,20 +23,20 @@
|
||||
; CHECK: Abbrev table for offset: 0x00000000
|
||||
; CHECK: [1] DW_TAG_compile_unit DW_CHILDREN_no
|
||||
; CHECK: DW_AT_GNU_dwo_name DW_FORM_strp
|
||||
; CHECK: DW_AT_GNU_dwo_id DW_FORM_data8
|
||||
; CHECK: DW_AT_GNU_addr_base DW_FORM_sec_offset
|
||||
; CHECK: DW_AT_low_pc DW_FORM_addr
|
||||
; CHECK: DW_AT_stmt_list DW_FORM_sec_offset
|
||||
; CHECK: DW_AT_comp_dir DW_FORM_strp
|
||||
; CHECK: DW_AT_GNU_dwo_id DW_FORM_data8
|
||||
|
||||
; CHECK: .debug_info contents:
|
||||
; CHECK: DW_TAG_compile_unit
|
||||
; CHECK: DW_AT_GNU_dwo_name [DW_FORM_strp] ( .debug_str[0x00000000] = "baz.dwo")
|
||||
; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x0000000000000000)
|
||||
; CHECK: DW_AT_GNU_addr_base [DW_FORM_sec_offset] (0x00000000)
|
||||
; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
|
||||
; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
|
||||
; CHECK: DW_AT_comp_dir [DW_FORM_strp] ( .debug_str[0x00000008] = "/usr/local/google/home/echristo/tmp")
|
||||
; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x0000000000000000)
|
||||
|
||||
; CHECK: .debug_str contents:
|
||||
; CHECK: 0x00000000: "baz.dwo"
|
||||
|
Loading…
x
Reference in New Issue
Block a user