-
Notifications
You must be signed in to change notification settings - Fork 10.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests to verify behavior of .cfi_sections .debug_frame intrinsic.
There was some lacking test coverage for checking when the .cfi_sections .debug_frame intrinsic is emitted. On x86_64, with -fno-exceptions there is no .cfi_sections .debug_frame intrinsic emitted because there is an unwind table attribute. On AArch64, with -fno-exceptions, there is no unwind table attribute, so the .cfi_sections .debug_frame intrinsic is emitted correctly. Alternatively, with -fexceptions, both AArch64 and x86_64 emit an unwind table and therefore do not emit a .cfi_sections .debug_frame intrinsic All this work was done in addition to https://reviews.llvm.org/D139663 patch. Differential Revision: https://reviews.llvm.org/D147747
- Loading branch information
1 parent
1533478
commit fe8eab4
Showing
5 changed files
with
194 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// This test is added to provide test coverage for the uwtable attribute. It | ||
// aims to make sure that for an X86_64 output compiled with -fexceptions or | ||
// -fno-exceptions, a uwtable attribute is emitted. However, for an AArch64 | ||
// output with -fexceptions a uwtable attribute is emitted, but with | ||
// -fno-exceptions a uwtable attribute is not emitted. | ||
|
||
// RUN: %clang -g -fexceptions --target=x86_64-apple-darwin %s -S -emit-llvm -o - | FileCheck %s --check-prefix=X86_64_UWTABLE_EXCEPTIONS | ||
// X86_64_UWTABLE_EXCEPTIONS: attributes #0 = { {{.*}} uwtable | ||
// X86_64_UWTABLE_EXCEPTIONS: !{{[0-9]+}} = !{i32 7, !"uwtable", i32 2} | ||
|
||
// RUN: %clang -g -fno-exceptions --target=x86_64-apple-darwin %s -S -emit-llvm -o - | FileCheck %s --check-prefix=X86_64_UWTABLE | ||
// X86_64_UWTABLE: attributes #0 = { {{.*}} uwtable | ||
// X86_64_UWTABLE: !{{[0-9]+}} = !{i32 7, !"uwtable", i32 2} | ||
|
||
// RUN: %clang -g -fexceptions --target=arm64-apple-darwin %s -S -emit-llvm -o - | FileCheck %s --check-prefix=ARM64_UWTABLE_EXCEPTIONS | ||
// ARM64_UWTABLE_EXCEPTIONS: attributes #0 = { {{.*}} uwtable | ||
// ARM64_UWTABLE_EXCEPTIONS: !{{[0-9]+}} = !{i32 7, !"uwtable", i32 1} | ||
|
||
// RUN: %clang -g -fno-exceptions --target=arm64-apple-darwin %s -S -emit-llvm -o - | FileCheck %s --check-prefix=ARM64_UWTABLE | ||
// ARM64_UWTABLE-NOT: attributes #0 = { {{.*}} uwtable | ||
// ARM64_UWTABLE-NOT: !{{[0-9]+}} = !{i32 7, !"uwtable", i32 2} | ||
// ARM64_UWTABLE: attributes #0 = | ||
|
||
int main() { | ||
return 1; | ||
} |
43 changes: 43 additions & 0 deletions
43
llvm/test/DebugInfo/AArch64/test-fexceptions-debug-frame.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
; This test is added to provide test coverage for the | ||
; .cfi_sections .debug_frame intrinsic. It aims to make sure that for a AArch64 | ||
; output compiled with -fexceptions, no .cfi_sections .debug_frame is emitted. | ||
|
||
; RUN: llc --filetype=asm %s -o - | FileCheck %s | ||
; CHECK-NOT: .cfi_sections .debug_frame | ||
; CHECK: .cfi_startproc | ||
|
||
|
||
; ModuleID = 'test.cpp' | ||
source_filename = "test.cpp" | ||
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" | ||
target triple = "arm64-apple-macosx13.0.0" | ||
|
||
; Function Attrs: noinline norecurse nounwind optnone ssp uwtable(sync) | ||
define i32 @main() #0 !dbg !10 { | ||
%1 = alloca i32, align 4 | ||
store i32 0, ptr %1, align 4 | ||
ret i32 1, !dbg !15 | ||
} | ||
|
||
attributes #0 = { noinline norecurse nounwind optnone ssp uwtable(sync)} | ||
|
||
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6} | ||
!llvm.dbg.cu = !{!7} | ||
!llvm.ident = !{!9} | ||
|
||
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 14, i32 0]} | ||
!1 = !{i32 7, !"Dwarf Version", i32 4} | ||
!2 = !{i32 2, !"Debug Info Version", i32 3} | ||
!3 = !{i32 1, !"wchar_size", i32 4} | ||
!4 = !{i32 8, !"PIC Level", i32 2} | ||
!5 = !{i32 7, !"uwtable", i32 1} | ||
!6 = !{i32 7, !"frame-pointer", i32 1} | ||
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !8, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app", sdk: "MacOSX.sdk") | ||
!8 = !DIFile(filename: "test.cpp", directory: "/Users/shubham/Development") | ||
!9 = !{!"clang"} | ||
!10 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 1, type: !11, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !14) | ||
!11 = !DISubroutineType(types: !12) | ||
!12 = !{!13} | ||
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
!14 = !{} | ||
!15 = !DILocation(line: 2, column: 5, scope: !10) |
40 changes: 40 additions & 0 deletions
40
llvm/test/DebugInfo/AArch64/test-fno-exceptions-debug-frame.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
; This test is added to provide test coverage for the | ||
; .cfi_sections .debug_frame intrinsic. It aims to make sure that for a AArch64 | ||
; output compiled with -fno-exceptions, a .cfi_sections .debug_frame is emitted. | ||
|
||
; RUN: llc --filetype=asm %s -o - | FileCheck %s | ||
; CHECK: .cfi_sections .debug_frame | ||
|
||
; ModuleID = 'test.cpp' | ||
source_filename = "test.cpp" | ||
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" | ||
target triple = "arm64-apple-macosx13.0.0" | ||
|
||
; Function Attrs: noinline norecurse nounwind optnone ssp | ||
define i32 @main() #0 !dbg !9 { | ||
%1 = alloca i32, align 4 | ||
store i32 0, ptr %1, align 4 | ||
ret i32 1, !dbg !14 | ||
} | ||
|
||
attributes #0 = { noinline norecurse nounwind optnone ssp } | ||
|
||
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5} | ||
!llvm.dbg.cu = !{!6} | ||
!llvm.ident = !{!8} | ||
|
||
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 14, i32 0]} | ||
!1 = !{i32 7, !"Dwarf Version", i32 4} | ||
!2 = !{i32 2, !"Debug Info Version", i32 3} | ||
!3 = !{i32 1, !"wchar_size", i32 4} | ||
!4 = !{i32 8, !"PIC Level", i32 2} | ||
!5 = !{i32 7, !"frame-pointer", i32 1} | ||
!6 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !7, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app", sdk: "MacOSX.sdk") | ||
!7 = !DIFile(filename: "test.cpp", directory: "/Users/shubham/Development") | ||
!8 = !{!"clang"} | ||
!9 = distinct !DISubprogram(name: "main", scope: !7, file: !7, line: 1, type: !10, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !6, retainedNodes: !13) | ||
!10 = !DISubroutineType(types: !11) | ||
!11 = !{!12} | ||
!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
!13 = !{} | ||
!14 = !DILocation(line: 2, column: 5, scope: !9) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
; This test is added to provide test coverage for the | ||
; .cfi_sections .debug_frame intrinsic. It aims to make sure that for an X86_64 | ||
; output compiled with -fexceptions, no .cfi_sections .debug_frame is emitted. | ||
|
||
; RUN: llc --filetype=asm %s -o - | FileCheck %s | ||
; CHECK-NOT: .cfi_sections .debug_frame | ||
; CHECK: .cfi_startproc | ||
|
||
; ModuleID = 'test.cpp' | ||
source_filename = "test.cpp" | ||
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-apple-macosx13.0.0" | ||
|
||
; Function Attrs: noinline norecurse nounwind optnone ssp uwtable | ||
define i32 @main() #0 !dbg !10 { | ||
%1 = alloca i32, align 4 | ||
store i32 0, ptr %1, align 4 | ||
ret i32 1, !dbg !15 | ||
} | ||
|
||
attributes #0 = { noinline norecurse nounwind optnone ssp uwtable } | ||
|
||
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6} | ||
!llvm.dbg.cu = !{!7} | ||
!llvm.ident = !{!9} | ||
|
||
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 14, i32 0]} | ||
!1 = !{i32 7, !"Dwarf Version", i32 4} | ||
!2 = !{i32 2, !"Debug Info Version", i32 3} | ||
!3 = !{i32 1, !"wchar_size", i32 4} | ||
!4 = !{i32 8, !"PIC Level", i32 2} | ||
!5 = !{i32 7, !"uwtable", i32 2} | ||
!6 = !{i32 7, !"frame-pointer", i32 2} | ||
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !8, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app", sdk: "MacOSX.sdk") | ||
!8 = !DIFile(filename: "test.cpp", directory: "/Users/shubham/Development") | ||
!9 = !{!"clang"} | ||
!10 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 1, type: !11, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !14) | ||
!11 = !DISubroutineType(types: !12) | ||
!12 = !{!13} | ||
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
!14 = !{} | ||
!15 = !DILocation(line: 2, column: 5, scope: !10) |
43 changes: 43 additions & 0 deletions
43
llvm/test/DebugInfo/X86/test-fno-exceptions-debug-frame.ll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
; This test is added to provide test coverage for the | ||
; .cfi_sections .debug_frame intrinsic. It aims to make sure that for an X86_64 | ||
; output compiled with -fno-exceptions, no .cfi_sections .debug_frame is | ||
; emitted. | ||
|
||
; RUN: llc --filetype=asm %s -o - | FileCheck %s | ||
; CHECK-NOT: .cfi_sections .debug_frame | ||
; CHECK: .cfi_startproc | ||
|
||
; ModuleID = 'test.cpp' | ||
source_filename = "test.cpp" | ||
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-apple-macosx13.0.0" | ||
|
||
; Function Attrs: noinline norecurse nounwind optnone ssp uwtable | ||
define i32 @main() #0 !dbg !10 { | ||
%1 = alloca i32, align 4 | ||
store i32 0, ptr %1, align 4 | ||
ret i32 1, !dbg !15 | ||
} | ||
|
||
attributes #0 = { noinline norecurse nounwind optnone ssp uwtable } | ||
|
||
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6} | ||
!llvm.dbg.cu = !{!7} | ||
!llvm.ident = !{!9} | ||
|
||
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 14, i32 0]} | ||
!1 = !{i32 7, !"Dwarf Version", i32 4} | ||
!2 = !{i32 2, !"Debug Info Version", i32 3} | ||
!3 = !{i32 1, !"wchar_size", i32 4} | ||
!4 = !{i32 8, !"PIC Level", i32 2} | ||
!5 = !{i32 7, !"uwtable", i32 2} | ||
!6 = !{i32 7, !"frame-pointer", i32 2} | ||
!7 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !8, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app", sdk: "MacOSX.sdk") | ||
!8 = !DIFile(filename: "test.cpp", directory: "/Users/shubham/Development") | ||
!9 = !{!"clang"} | ||
!10 = distinct !DISubprogram(name: "main", scope: !8, file: !8, line: 1, type: !11, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !7, retainedNodes: !14) | ||
!11 = !DISubroutineType(types: !12) | ||
!12 = !{!13} | ||
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
!14 = !{} | ||
!15 = !DILocation(line: 2, column: 5, scope: !10) |