forked from OSchip/llvm-project
[DWARF5] Start emitting DW_AT_dwo_name when -gdwarf-5 is specified.
This commit is contained in:
parent
7d0e8930ed
commit
6ef01588f4
|
@ -1,7 +1,11 @@
|
|||
// REQUIRES: x86-registered-target
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -split-dwarf-file foo.dwo -split-dwarf-output %t -emit-obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck %s
|
||||
// RUN: llvm-dwarfdump -debug-info %t | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=4 -split-dwarf-file foo.dwo -split-dwarf-output %t -emit-obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=DWARFv4 %s
|
||||
// RUN: llvm-dwarfdump -debug-info %t | FileCheck --check-prefix=DWARFv4 %s
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux -debug-info-kind=limited -dwarf-version=5 -split-dwarf-file foo.dwo -split-dwarf-output %t -emit-obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=DWARFv5 %s
|
||||
// RUN: llvm-dwarfdump -debug-info %t | FileCheck --check-prefix=DWARFv5 %s
|
||||
|
||||
int f() { return 0; }
|
||||
|
||||
// CHECK: DW_AT_GNU_dwo_name ("foo.dwo")
|
||||
// DWARFv4: DW_AT_GNU_dwo_name ("foo.dwo")
|
||||
// DWARFv5: DW_AT_dwo_name ("foo.dwo")
|
||||
|
|
|
@ -13,11 +13,31 @@
|
|||
// RUN: -o %t.native.o -split-dwarf-file %t.file.dwo \
|
||||
// RUN: -split-dwarf-output %t.output.dwo -x ir %t.o
|
||||
|
||||
// RUN: llvm-dwarfdump %t.native.o | FileCheck --check-prefix=O %s
|
||||
// RUN: llvm-dwarfdump %t.output.dwo | FileCheck --check-prefix=DWO %s
|
||||
// RUN: llvm-dwarfdump %t.native.o | FileCheck --check-prefix=DWARFv4-O %s
|
||||
// RUN: llvm-dwarfdump %t.output.dwo | FileCheck --check-prefix=DWARFv4-DWO %s
|
||||
|
||||
// O: DW_AT_GNU_dwo_name ("{{.*}}.file.dwo")
|
||||
// O-NOT: DW_TAG_subprogram
|
||||
// DWO: DW_TAG_subprogram
|
||||
// DWARFv4-O: DW_AT_GNU_dwo_name ("{{.*}}.file.dwo")
|
||||
// DWARFv4-O-NOT: DW_TAG_subprogram
|
||||
// DWARFv4-DWO: DW_TAG_subprogram
|
||||
|
||||
// RUN: %clang_cc1 -debug-info-kind=limited -dwarf-version=5 -triple x86_64-unknown-linux-gnu \
|
||||
// RUN: -flto=thin -emit-llvm-bc \
|
||||
// RUN: -o %t.o %s
|
||||
|
||||
// RUN: llvm-lto2 run -thinlto-distributed-indexes %t.o \
|
||||
// RUN: -o %t2.index \
|
||||
// RUN: -r=%t.o,main,px
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu \
|
||||
// RUN: -emit-obj -fthinlto-index=%t.o.thinlto.bc \
|
||||
// RUN: -o %t.native.o -dwarf-version=5 -split-dwarf-file %t.file.dwo \
|
||||
// RUN: -split-dwarf-output %t.output.dwo -x ir %t.o
|
||||
|
||||
// RUN: llvm-dwarfdump %t.native.o | FileCheck --check-prefix=DWARFv5-O %s
|
||||
// RUN: llvm-dwarfdump %t.output.dwo | FileCheck --check-prefix=DWARFv5-DWO %s
|
||||
|
||||
// DWARFv5-O: DW_AT_dwo_name ("{{.*}}.file.dwo")
|
||||
// DWARFv5-O-NOT: DW_TAG_subprogram
|
||||
// DWARFv5-DWO: DW_TAG_subprogram
|
||||
|
||||
int main() {}
|
||||
|
|
|
@ -856,10 +856,13 @@ void DwarfDebug::finishUnitAttributes(const DICompileUnit *DIUnit,
|
|||
// This CU is either a clang module DWO or a skeleton CU.
|
||||
NewCU.addUInt(Die, dwarf::DW_AT_GNU_dwo_id, dwarf::DW_FORM_data8,
|
||||
DIUnit->getDWOId());
|
||||
if (!DIUnit->getSplitDebugFilename().empty())
|
||||
if (!DIUnit->getSplitDebugFilename().empty()) {
|
||||
// This is a prefabricated skeleton CU.
|
||||
NewCU.addString(Die, dwarf::DW_AT_GNU_dwo_name,
|
||||
DIUnit->getSplitDebugFilename());
|
||||
dwarf::Attribute attrDWOName = getDwarfVersion() >= 5
|
||||
? dwarf::DW_AT_dwo_name
|
||||
: dwarf::DW_AT_GNU_dwo_name;
|
||||
NewCU.addString(Die, attrDWOName, DIUnit->getSplitDebugFilename());
|
||||
}
|
||||
}
|
||||
}
|
||||
// Create new DwarfCompileUnit for the given metadata node with tag
|
||||
|
@ -1101,10 +1104,13 @@ void DwarfDebug::finalizeModuleInfo() {
|
|||
bool HasSplitUnit = SkCU && !TheCU.getUnitDie().children().empty();
|
||||
|
||||
if (HasSplitUnit) {
|
||||
dwarf::Attribute attrDWOName = getDwarfVersion() >= 5
|
||||
? dwarf::DW_AT_dwo_name
|
||||
: dwarf::DW_AT_GNU_dwo_name;
|
||||
finishUnitAttributes(TheCU.getCUNode(), TheCU);
|
||||
TheCU.addString(TheCU.getUnitDie(), dwarf::DW_AT_GNU_dwo_name,
|
||||
TheCU.addString(TheCU.getUnitDie(), attrDWOName,
|
||||
Asm->TM.Options.MCOptions.SplitDwarfFile);
|
||||
SkCU->addString(SkCU->getUnitDie(), dwarf::DW_AT_GNU_dwo_name,
|
||||
SkCU->addString(SkCU->getUnitDie(), attrDWOName,
|
||||
Asm->TM.Options.MCOptions.SplitDwarfFile);
|
||||
// Emit a unique identifier for this CU.
|
||||
uint64_t ID =
|
||||
|
|
|
@ -554,7 +554,9 @@ bool DWARFUnit::parseDWO() {
|
|||
DWARFDie UnitDie = getUnitDIE();
|
||||
if (!UnitDie)
|
||||
return false;
|
||||
auto DWOFileName = dwarf::toString(UnitDie.find(DW_AT_GNU_dwo_name));
|
||||
auto DWOFileName = getVersion() >= 5
|
||||
? dwarf::toString(UnitDie.find(DW_AT_dwo_name))
|
||||
: dwarf::toString(UnitDie.find(DW_AT_GNU_dwo_name));
|
||||
if (!DWOFileName)
|
||||
return false;
|
||||
auto CompilationDir = dwarf::toString(UnitDie.find(DW_AT_comp_dir));
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
; DWARF5-NOT: Compile Unit
|
||||
; DWARF5: DW_TAG_skeleton_unit
|
||||
; DWARF5-NOT: DW_TAG_{{.*}}
|
||||
; DWARF5: DW_AT_GNU_dwo_name{{.*}}test.dwo
|
||||
; DWARF5: DW_AT_dwo_name{{.*}}test.dwo
|
||||
; DWARF5: DW_AT_addr_base{{.*}}0x00000008
|
||||
; DWARF5: DW_AT_low_pc [DW_FORM_addrx] (indexed (00000000) address = 0x0000000000000000 ".text")
|
||||
; DWARF5: .debug_addr contents:
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
; SPLIT-NOT: {{DW_TAG|contents:}}
|
||||
; SPLIT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008)
|
||||
; SPLIT: DW_AT_comp_dir [DW_FORM_strx1] (indexed (00000000) string = "/home/test")
|
||||
; SPLIT: DW_AT_GNU_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "foo.dwo")
|
||||
; SPLIT: DW_AT_dwo_name [DW_FORM_strx1] (indexed (00000001) string = "foo.dwo")
|
||||
|
||||
; Check for the split CU in .debug_info.dwo.
|
||||
; SPLIT: .debug_info.dwo contents:
|
||||
|
|
Loading…
Reference in New Issue