Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AIX]Generate debug info for static init related functions
Set the debug location for static init related functions(__dtor and __finalize) so we can generate valid debug info on AIX by invoking -g with clang or -debug-info-kind=limited with clang_cc1. This also works for any other future targets who may use sinit and sterm functions for static initialization, where a direct call to dtor will be generated within finalize function body. This patch also aims at validating that the debug info generated is correct for AIX sinit related functions. Differential Revision: https://reviews.llvm.org/D83702
- Loading branch information
1 parent
a7a07a8
commit 69f3378
Showing
3 changed files
with
68 additions
and
2 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
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
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,64 @@ | ||
// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -emit-llvm -x c++ \ | ||
// RUN: -debug-info-kind=limited < %s | \ | ||
// RUN: FileCheck --check-prefixes=CHECK,CHECK64 %s | ||
|
||
// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -emit-llvm -x c++ \ | ||
// RUN: -debug-info-kind=limited < %s | \ | ||
// RUN: FileCheck --check-prefixes=CHECK,CHECK64 %s | ||
|
||
struct X { | ||
X(); | ||
~X(); | ||
}; | ||
|
||
X v; | ||
|
||
// CHECK: define internal void @__cxx_global_var_init() [[ATTR:#[0-9]+]] !dbg ![[DBGVAR16:[0-9]+]] { | ||
// CHECK: entry: | ||
// CHECK: call void @_ZN1XC1Ev(%struct.X* @v), !dbg ![[DBGVAR19:[0-9]+]] | ||
// CHECK: %0 = call i32 @atexit(void ()* @__dtor_v) [[ATTR:#[0-9]+]], !dbg ![[DBGVAR19]] | ||
// CHECK: ret void, !dbg ![[DBGVAR19]] | ||
// CHECK: } | ||
|
||
// CHECK: define internal void @__dtor_v() [[ATTR:#[0-9]+]] !dbg ![[DBGVAR20:[0-9]+]] { | ||
// CHECK: entry: | ||
// CHECK: call void @_ZN1XD1Ev(%struct.X* @v), !dbg ![[DBGVAR21:[0-9]+]] | ||
// CHECK: ret void, !dbg ![[DBGVAR21]] | ||
// CHECK: } | ||
|
||
// CHECK: define internal void @__finalize_v() [[ATTR:#[0-9]+]] !dbg ![[DBGVAR22:[0-9]+]] { | ||
// CHECK: entry: | ||
// CHECK: %0 = call i32 @unatexit(void ()* @__dtor_v) [[ATTR:#[0-9]+]], !dbg ![[DBGVAR24:[0-9]+]] | ||
// CHECK: %needs_destruct = icmp eq i32 %0, 0, !dbg ![[DBGVAR24]] | ||
// CHECK: br i1 %needs_destruct, label %destruct.call, label %destruct.end, !dbg ![[DBGVAR24]] | ||
|
||
// CHECK: destruct.call: | ||
// CHECK: call void @__dtor_v(), !dbg ![[DBGVAR24]] | ||
// CHECK: br label %destruct.end, !dbg ![[DBGVAR24]] | ||
|
||
// CHECK: destruct.end: | ||
// CHECK: ret void, !dbg ![[DBGVAR24]] | ||
// CHECK: } | ||
|
||
// CHECK: define void @__sinit80000000_clang_c3236cbaa79f2bae3a15e6379a05f625() [[ATTR:#[0-9]+]] !dbg ![[DBGVAR25:[0-9]+]] { | ||
// CHECK: entry: | ||
// CHECK: call void @__cxx_global_var_init(), !dbg ![[DBGVAR26:[0-9]+]] | ||
// CHECK: ret void | ||
// CHECK: } | ||
|
||
// CHECK: define void @__sterm80000000_clang_c3236cbaa79f2bae3a15e6379a05f625() [[ATTR:#[0-9]+]] !dbg ![[DBGVAR27:[0-9]+]] { | ||
// CHECK: entry: | ||
// CHECK: call void @__finalize_v(), !dbg ![[DBGVAR28:[0-9]+]] | ||
// CHECK: ret void | ||
// CHECK: } | ||
|
||
// CHECK: ![[DBGVAR16]] = distinct !DISubprogram(name: "__cxx_global_var_init", scope: !{{[0-9]+}}, file: !{{[0-9]+}}, line: 14, type: !{{[0-9]+}}, scopeLine: 14, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !{{[0-9]+}}, retainedNodes: !{{[0-9]+}}) | ||
// CHECK: ![[DBGVAR19]] = !DILocation(line: 14, column: 3, scope: ![[DBGVAR16]]) | ||
// CHECK: ![[DBGVAR20]] = distinct !DISubprogram(name: "__dtor_v", scope: !{{[0-9]+}}, file: !{{[0-9]+}}, line: 14, type: !{{[0-9]+}}, scopeLine: 14, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !{{[0-9]+}}, retainedNodes: !{{[0-9]+}}) | ||
// CHECK: ![[DBGVAR21]] = !DILocation(line: 14, column: 3, scope: ![[DBGVAR20]]) | ||
// CHECK: ![[DBGVAR22]] = distinct !DISubprogram(linkageName: "__finalize_v", scope: !{{[0-9]+}}, file: !{{[0-9]+}}, line: 14, type: !{{[0-9]+}}, scopeLine: 14, flags: DIFlagArtificial, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !{{[0-9]+}}, retainedNodes: !{{[0-9]+}}) | ||
// CHECK: ![[DBGVAR24]] = !DILocation(line: 14, column: 3, scope: ![[DBGVAR22]]) | ||
// CHECK: ![[DBGVAR25]] = distinct !DISubprogram(linkageName: "__sinit80000000_clang_c3236cbaa79f2bae3a15e6379a05f625", scope: !{{[0-9]+}}, file: !{{[0-9]+}}, type: !{{[0-9]+}}, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !{{[0-9]+}}, retainedNodes: !{{[0-9]+}}) | ||
// CHECK: ![[DBGVAR26]] = !DILocation(line: 0, scope: ![[DBGVAR25]]) | ||
// CHECK: ![[DBGVAR27]] = distinct !DISubprogram(linkageName: "__sterm80000000_clang_c3236cbaa79f2bae3a15e6379a05f625", scope: !{{[0-9]+}}, file: !{{[0-9]+}}, type: !{{[0-9]+}}, flags: DIFlagArtificial, spFlags: DISPFlagDefinition, unit: !{{[0-9]+}}, retainedNodes: !{{[0-9]+}}) | ||
// CHECK: ![[DBGVAR28]] = !DILocation(line: 0, scope: ![[DBGVAR27]]) |