mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[Debug-Info] handle DW_CC_pass_by_value/DW_CC_pass_by_reference under strict DWARF.
Summary: When -strict-dwarf=true is specified, the calling convention info DW_CC_pass_by_value or DW_CC_pass_by_reference can only be generated at DWARF5. Reviewed By: shchenz, dblaikie Differential Revision: https://reviews.llvm.org/D103300
This commit is contained in:
parent
0768752613
commit
914b5eeb20
@ -939,14 +939,17 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const DICompositeType *CTy) {
|
||||
addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
|
||||
|
||||
// Add the type's non-standard calling convention.
|
||||
uint8_t CC = 0;
|
||||
if (CTy->isTypePassByValue())
|
||||
CC = dwarf::DW_CC_pass_by_value;
|
||||
else if (CTy->isTypePassByReference())
|
||||
CC = dwarf::DW_CC_pass_by_reference;
|
||||
if (CC)
|
||||
addUInt(Buffer, dwarf::DW_AT_calling_convention, dwarf::DW_FORM_data1,
|
||||
CC);
|
||||
// DW_CC_pass_by_value/DW_CC_pass_by_reference are introduced in DWARF 5.
|
||||
if (!Asm->TM.Options.DebugStrictDwarf || DD->getDwarfVersion() >= 5) {
|
||||
uint8_t CC = 0;
|
||||
if (CTy->isTypePassByValue())
|
||||
CC = dwarf::DW_CC_pass_by_value;
|
||||
else if (CTy->isTypePassByReference())
|
||||
CC = dwarf::DW_CC_pass_by_reference;
|
||||
if (CC)
|
||||
addUInt(Buffer, dwarf::DW_AT_calling_convention, dwarf::DW_FORM_data1,
|
||||
CC);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -1,4 +1,6 @@
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck %s
|
||||
; RUN: %llc_dwarf -O0 -filetype=obj < %s -strict-dwarf=true | llvm-dwarfdump -debug-info - \
|
||||
; RUN: | FileCheck %s --check-prefix=STRICT --implicit-check-not DW_AT_calling_convention
|
||||
;
|
||||
; // S is not trivially copyable.
|
||||
; struct S {
|
||||
@ -20,6 +22,12 @@
|
||||
; CHECK: DW_TAG_structure_type
|
||||
; CHECK-NEXT: DW_AT_calling_convention (DW_CC_pass_by_value)
|
||||
; CHECK-NEXT: DW_AT_name ("T")
|
||||
;
|
||||
; STRICT: DW_TAG_structure_type
|
||||
; STRICT-NEXT: DW_AT_name ("S")
|
||||
;
|
||||
; STRICT: DW_TAG_structure_type
|
||||
; STRICT-NEXT: DW_AT_name ("T")
|
||||
|
||||
%struct.S = type { i8 }
|
||||
%struct.T = type { i8 }
|
||||
|
Loading…
Reference in New Issue
Block a user