Skip to content

Commit ee55964

Browse files
committed
[Backtracing][Linux] Enable Linux backtracing, add tests.
Turn on the Linux backtracing implementation and update the tests. rdar://101623265
1 parent df8e698 commit ee55964

20 files changed

+426
-60
lines changed

Diff for: include/swift/Runtime/Config.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ swift_auth_code(T value, unsigned extra) {
493493
#elif defined(_WIN32)
494494
# define SWIFT_BACKTRACE_ON_CRASH_SUPPORTED 0
495495
# define SWIFT_BACKTRACE_SECTION ".sw5bckt"
496-
#elif defined(__linux__)
497-
# define SWIFT_BACKTRACE_ON_CRASH_SUPPORTED 0
496+
#elif defined(__linux__) && (defined(__aarch64__) || defined(__x86_64__))
497+
# define SWIFT_BACKTRACE_ON_CRASH_SUPPORTED 1
498498
# define SWIFT_BACKTRACE_SECTION "swift5_backtrace"
499499
#else
500500
# define SWIFT_BACKTRACE_ON_CRASH_SUPPORTED 0

Diff for: test/Backtracing/BacktraceWithLimit.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// UNSUPPORTED: back_deployment_runtime
88
// REQUIRES: executable_test
99
// REQUIRES: backtracing
10-
// REQUIRES: OS=macosx
10+
// REQUIRES: OS=macosx || OS=linux-gnu
1111

1212
import _Backtracing
1313

Diff for: test/Backtracing/BacktraceWithLimitAndTop.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// UNSUPPORTED: back_deployment_runtime
88
// REQUIRES: executable_test
99
// REQUIRES: backtracing
10-
// REQUIRES: OS=macosx
10+
// REQUIRES: OS=macosx || OS=linux-gnu
1111

1212
import _Backtracing
1313

Diff for: test/Backtracing/Crash.swift

+11-12
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
// UNSUPPORTED: asan
1919
// REQUIRES: executable_test
2020
// REQUIRES: backtracing
21-
// REQUIRES: OS=macosx
21+
// REQUIRES: OS=macosx || OS=linux-gnu
2222

2323
func level1() {
2424
level2()
@@ -51,7 +51,7 @@ struct Crash {
5151

5252
// CHECK: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
5353

54-
// CHECK: Thread 0 crashed:
54+
// CHECK: Thread 0 {{(".*" )?}}crashed:
5555

5656
// CHECK: 0 0x{{[0-9a-f]+}} level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:42:15
5757
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} level4() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:36:3
@@ -66,11 +66,11 @@ struct Crash {
6666

6767
// CHECK: Images ({{[0-9]+}} omitted):
6868

69-
// CHECK: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+}}{{ +}}Crash{{ +}}{{.*}}/Crash
69+
// CHECK: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{([0-9a-f]+|<no build ID>)}}{{ +}}Crash{{ +}}{{.*}}/Crash
7070

7171
// FRIENDLY: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
7272

73-
// FRIENDLY: Thread 0 crashed:
73+
// FRIENDLY: Thread 0 {{(".*" )?}}crashed:
7474

7575
// FRIENDLY: 0 level5() + {{[0-9]+}} in Crash at {{.*}}/Crash.swift:42:15
7676

@@ -128,7 +128,7 @@ struct Crash {
128128

129129
// NODEBUG: *** Program crashed: Bad pointer dereference at 0x{{0*}}4 ***
130130

131-
// NODEBUG: Thread 0 crashed:
131+
// NODEBUG: Thread 0 {{(".*" )?}}crashed:
132132

133133
// NODEBUG: 0 0x{{[0-9a-f]+}} level5() + {{[0-9]+}} in CrashNoDebug
134134
// NODEBUG: 1 [ra] 0x{{[0-9a-f]+}} level4() + {{[0-9]+}} in CrashNoDebug
@@ -143,36 +143,35 @@ struct Crash {
143143

144144
// NODEBUG: Images ({{[0-9]+}} omitted):
145145

146-
// NODEBUG: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+}}{{ +}}CrashNoDebug{{ +}}{{.*}}/CrashNoDebug
146+
// NODEBUG: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{([0-9a-f]+|<no build ID>)}}{{ +}}CrashNoDebug{{ +}}{{.*}}/CrashNoDebug
147147

148148
// OPTIMIZED: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
149149

150-
// OPTIMIZED: Thread 0 crashed:
150+
// OPTIMIZED: Thread 0 {{(".*" )?}}crashed:
151151

152152
// OPTIMIZED: 0 [inlined] 0x{{[0-9a-f]+}} level5() in CrashOpt at {{.*}}/Crash.swift:42:15
153153
// OPTIMIZED-NEXT: 1 [inlined] 0x{{[0-9a-f]+}} level4() in CrashOpt at {{.*}}/Crash.swift:36:3
154154
// OPTIMIZED-NEXT: 2 [inlined] 0x{{[0-9a-f]+}} level3() in CrashOpt at {{.*}}/Crash.swift:32:3
155155
// OPTIMIZED-NEXT: 3 [inlined] 0x{{[0-9a-f]+}} level2() in CrashOpt at {{.*}}/Crash.swift:28:3
156156
// OPTIMIZED-NEXT: 4 [inlined] 0x{{[0-9a-f]+}} level1() in CrashOpt at {{.*}}/Crash.swift:24:3
157157
// OPTIMIZED-NEXT: 5 [inlined] 0x{{[0-9a-f]+}} static Crash.main() in CrashOpt at {{.*}}/Crash.swift:48:5
158-
// OPTIMIZED-NEXT: 6 [inlined] [system] 0x{{[0-9a-f]+}} static Crash.$main() in CrashOpt at {{.*}}/<compiler-generated>
159-
// OPTIMIZED-NEXT: 7 [system] 0x{{[0-9a-f]+}} main + {{[0-9]+}} in CrashOpt at {{.*}}/Crash.swift
158+
// OPTIMIZED: {{6|7}} [system] 0x{{[0-9a-f]+}} main + {{[0-9]+}} in CrashOpt at {{.*}}
160159

161160
// OPTIMIZED: Registers:
162161

163162
// OPTIMIZED: Images ({{[0-9]+}} omitted):
164163

165-
// OPTIMIZED: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+}}{{ +}}CrashOpt{{ +}}{{.*}}/CrashOpt
164+
// OPTIMIZED: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{([0-9a-f]+|<no build ID>)}}{{ +}}CrashOpt{{ +}}{{.*}}/CrashOpt
166165

167166
// OPTNODEBUG: *** Program crashed: Bad pointer dereference at 0x{{0*}}4 ***
168167

169-
// OPTNODEBUG: Thread 0 crashed:
168+
// OPTNODEBUG: Thread 0 {{(".*" )?}}crashed:
170169

171170
// OPTNODEBUG: 0 0x{{[0-9a-f]+}} main + {{[0-9]+}} in CrashOptNoDebug
172171

173172
// OPTNODEBUG: Registers:
174173

175174
// OPTNODEBUG: Images ({{[0-9]+}} omitted):
176175

177-
// OPTNODEBUG: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+}}{{ +}}CrashOptNoDebug{{ +}}{{.*}}/CrashOptNoDebug
176+
// OPTNODEBUG: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{([0-9a-f]+|<no build ID>)}}{{ +}}CrashOptNoDebug{{ +}}{{.*}}/CrashOptNoDebug
178177

Diff for: test/Backtracing/CrashAsync.swift

+20-20
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// UNSUPPORTED: asan
1414
// REQUIRES: executable_test
1515
// REQUIRES: backtracing
16-
// REQUIRES: OS=macosx
16+
// REQUIRES: OS=macosx || OS=linux-gnu
1717

1818
@available(SwiftStdlib 5.1, *)
1919
func crash() {
@@ -42,24 +42,24 @@ struct CrashAsync {
4242

4343
// CHECK: Thread {{[0-9]+}} crashed:
4444

45-
// CHECK: 0 0x{{[0-9a-f]+}} _$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:21:15
46-
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} _$s10CrashAsync5levelyySiYaFTY0_ + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:29:5
47-
// CHECK-NEXT: 2 [async] 0x{{[0-9a-f]+}} _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
48-
// CHECK-NEXT: 3 [async] 0x{{[0-9a-f]+}} _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
49-
// CHECK-NEXT: 4 [async] 0x{{[0-9a-f]+}} _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
50-
// CHECK-NEXT: 5 [async] 0x{{[0-9a-f]+}} _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
51-
// CHECK-NEXT: 6 [async] 0x{{[0-9a-f]+}} _$s10CrashAsyncAAV4mainyyYaFZTQ0_ in CrashAsync at {{.*}}/CrashAsync.swift:37
52-
// CHECK-NEXT: 7 [async] [system] 0x{{[0-9a-f]+}} _$s10CrashAsyncAAV5$mainyyYaFZTQ0_ in CrashAsync at {{.*}}/<compiler-generated>
53-
// CHECK-NEXT: 8 [async] [system] 0x{{[0-9a-f]+}} _async_MainTQ0_ in CrashAsync at {{.*}}/<compiler-generated>
54-
// CHECK-NEXT: 9 [async] [thunk] 0x{{[0-9a-f]+}} _$sIetH_yts5Error_pIegHrzo_TRTQ0_ in CrashAsync at {{.*}}/<compiler-generated>
55-
// CHECK-NEXT: 10 [async] [thunk] 0x{{[0-9a-f]+}} _$sIetH_yts5Error_pIegHrzo_TRTATQ0_ in CrashAsync at {{.*}}/<compiler-generated>
56-
// CHECK-NEXT: 11 [async] [system] 0x{{[0-9a-f]+}} __ZL23completeTaskWithClosurePN5swift12AsyncContextEPNS_10SwiftErrorE in libswift_Concurrency.dylib
45+
// CHECK: 0 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:21:15
46+
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTY0_ + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:29:5
47+
// CHECK-NEXT: 2 [async] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
48+
// CHECK-NEXT: 3 [async] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
49+
// CHECK-NEXT: 4 [async] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
50+
// CHECK-NEXT: 5 [async] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}/CrashAsync.swift:27
51+
// CHECK-NEXT: 6 [async] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsyncAAV4mainyyYaFZ{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:37
52+
// CHECK-NEXT: 7 [async] [system] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsyncAAV5$mainyyYaFZ{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}/<compiler-generated>
53+
// CHECK-NEXT: 8 [async] [system] 0x{{[0-9a-f]+}} {{_?}}async_Main{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}/<compiler-generated>
54+
// CHECK-NEXT: 9 [async] [thunk] 0x{{[0-9a-f]+}} {{_?}}$sIetH_yts5Error_pIegHrzo_TR{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}/<compiler-generated>
55+
// CHECK-NEXT: 10 [async] [thunk] 0x{{[0-9a-f]+}} {{_?}}$sIetH_yts5Error_pIegHrzo_TRTA{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}/<compiler-generated>
56+
// CHECK-NEXT: 11 [async] [system] 0x{{[0-9a-f]+}} {{_?}}_ZL23completeTaskWithClosurePN5swift12AsyncContextEPNS_10SwiftErrorE in libswift_Concurrency.{{dylib|so}}
5757

5858
// FRIENDLY: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
5959

6060
// FRIENDLY: Thread {{[0-9]+}} crashed:
6161

62-
// FRIENDLY: 0 _$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:21:15
62+
// FRIENDLY: 0 {{_?}}$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:21:15
6363

6464
// FRIENDLY: 19| func crash() {
6565
// FRIENDLY-NEXT: 20| let ptr = UnsafeMutablePointer<Int>(bitPattern: 4)!
@@ -68,7 +68,7 @@ struct CrashAsync {
6868
// FRIENDLY-NEXT: 22| }
6969
// FRIENDLY-NEXT: 23|
7070

71-
// FRIENDLY: 1 _$s10CrashAsync5levelyySiYaFTY0_ + {{[0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:29:5
71+
// FRIENDLY: 1 {{_?}}$s10CrashAsync5levelyySiYaFTY0_ + {{[0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:29:5
7272

7373
// FRIENDLY: 27| await level(n + 1)
7474
// FRIENDLY-NEXT: 28| } else {
@@ -77,7 +77,7 @@ struct CrashAsync {
7777
// FRIENDLY-NEXT: 30| }
7878
// FRIENDLY-NEXT: 31| }
7979

80-
// FRIENDLY:2 _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
80+
// FRIENDLY:2 {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
8181

8282
// FRIENDLY: 25| func level(_ n: Int) async {
8383
// FRIENDLY-NEXT: 26| if n < 5 {
@@ -86,10 +86,10 @@ struct CrashAsync {
8686
// FRIENDLY-NEXT: 28| } else {
8787
// FRIENDLY-NEXT: 29| crash()
8888

89-
// FRIENDLY: 3 _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
90-
// FRIENDLY: 4 _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
91-
// FRIENDLY: 5 _$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
92-
// FRIENDLY: 6 _$s10CrashAsyncAAV4mainyyYaFZTQ0_ in CrashAsync at {{.*}}CrashAsync.swift:37
89+
// FRIENDLY: 3 {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
90+
// FRIENDLY: 4 {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
91+
// FRIENDLY: 5 {{_?}}$s10CrashAsync5levelyySiYaFTQ1_ in CrashAsync at {{.*}}CrashAsync.swift:27
92+
// FRIENDLY: 6 {{_?}}$s10CrashAsyncAAV4mainyyYaFZ{{TQ0_| \+ [0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:37
9393

9494
// FRIENDLY: 35| struct CrashAsync {
9595
// FRIENDLY-NEXT: 36| static func main() async {

Diff for: test/Backtracing/CrashWithThunk.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// UNSUPPORTED: asan
1010
// REQUIRES: executable_test
1111
// REQUIRES: backtracing
12-
// REQUIRES: OS=macosx
12+
// REQUIRES: OS=macosx || OS=linux-gnu
1313

1414
struct Foo<T> {
1515
var value: T
@@ -32,7 +32,7 @@ struct CrashWithThunk {
3232

3333
// CHECK: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
3434

35-
// CHECK: Thread 0 crashed:
35+
// CHECK: Thread 0 {{(".*" )?}}crashed:
3636

3737
// CHECK: 0 0x{{[0-9a-f]+}} crash() + {{[0-9]+}} in CrashWithThunk at {{.*}}/CrashWithThunk.swift:21:15
3838
// CHECK-NEXT: 1 [ra] [thunk] 0x{{[0-9a-f]+}} thunk for @escaping @callee_guaranteed () -> () + {{[0-9]+}} in CrashWithThunk at {{.*}}/Backtracing/<compiler-generated>
@@ -44,11 +44,11 @@ struct CrashWithThunk {
4444

4545
// CHECK: Images ({{[0-9]+}} omitted):
4646

47-
// CHECK: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+}}{{ +}}CrashWithThunk{{ +}}{{.*}}/CrashWithThunk
47+
// CHECK: {{0x[0-9a-f]+}}–{{0x[0-9a-f]+}}{{ +}}{{[0-9a-f]+|<no build ID>}}{{ +}}CrashWithThunk{{ +}}{{.*}}/CrashWithThunk
4848

4949
// FRIENDLY: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 ***
5050

51-
// FRIENDLY: Thread 0 crashed:
51+
// FRIENDLY: Thread 0 {{(".*" )?}}crashed:
5252

5353
// FRIENDLY: 0 crash() + {{[0-9]+}} in CrashWithThunk at {{.*}}/CrashWithThunk.swift:21:15
5454

Diff for: test/Backtracing/DwarfReader.swift

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %S/Inputs/Inlining.swift -parse-as-library -g -o %t/Inlining
3+
// RUN: %target-build-swift %s -parse-as-library -g -o %t/DwarfReader
4+
// RUN: %target-run %t/DwarfReader %t/Inlining | %FileCheck %s
5+
6+
// REQUIRES: OS=linux-gnu
7+
8+
@_spi(DwarfTest) import _Backtracing
9+
10+
@main
11+
struct DwarfReader {
12+
static func main() {
13+
if CommandLine.argc != 2 {
14+
print("usage: DwarfReader <path-to-binary>")
15+
return
16+
}
17+
18+
// CHECK: {{.*}}/Inlining is a {{32|64}}-bit ELF image
19+
// CHECK: Units:
20+
// CHECK: Call Sites:
21+
22+
if !testDwarfReaderFor(path: CommandLine.arguments[1]) {
23+
exit(1)
24+
}
25+
}
26+
}

Diff for: test/Backtracing/ElfReader.swift

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-clang -x c -Wno-unused-command-line-argument -Wl,--build-id -g %S/Inputs/fib.c -o %t/fib
3+
// RUN: %target-clang -x c -Wno-unused-command-line-argument -g %S/Inputs/fib.c -o %t/fib-no-uuid
4+
// RUN: %target-clang -x c -Wno-unused-command-line-argument -Wl,--build-id -Wl,--compress-debug-sections=zlib-gnu -g %S/Inputs/fib.c -o %t/fib-compress-gnu
5+
// RUN: %target-clang -x c -Wno-unused-command-line-argument -Wl,--build-id -Wl,--compress-debug-sections=zlib -g %S/Inputs/fib.c -o %t/fib-compress-zlib
6+
// RUN: %target-build-swift %s -parse-as-library -g -o %t/ElfReader
7+
// RUN: %target-run %t/ElfReader %t/fib | %FileCheck %s
8+
// RUN: %target-run %t/ElfReader %t/fib-no-uuid | %FileCheck %s --check-prefix NOUUID
9+
// RUN: %target-run %t/ElfReader %t/fib-compress-gnu | %FileCheck %s --check-prefix CMPGNU
10+
// RUN: %target-run %t/ElfReader %t/fib-compress-zlib | %FileCheck %s --check-prefix CMPZLIB
11+
// RUN: if %S/Inputs/make-minidebug %t/fib %t/fib-minidebug; then ( %target-run %t/ElfReader %t/fib-minidebug | %FileCheck %s --check-prefix MINIDEBUG ); else echo "warning: skipping minidebug test as we couldn't generate minidebug data"; fi
12+
// RUN: libc=$(ldd %t/fib | awk '/libc\.so\.6/ { print $3 }'); if %S/Inputs/has-uuid-syms "$libc" >/dev/null; then %target-run %t/ElfReader "$libc" | %FileCheck %s --check-prefix LIBC; else echo "warning: skipping /usr/lib/debug test as libc symbols are not installed"; fi
13+
// RUN: %S/Inputs/make-debuglink %t/fib %t/fib-stripped %t/fib.dbg && %target-run %t/ElfReader %t/fib-stripped | %FileCheck %s --check-prefix DBGLINK
14+
15+
// REQUIRES: OS=linux-gnu
16+
17+
@_spi(ElfTest) import _Backtracing
18+
19+
@main
20+
struct ElfReader {
21+
22+
static func main() {
23+
if CommandLine.argc != 2 {
24+
print("usage: ElfReader <path-to-binary>")
25+
return
26+
}
27+
28+
// CHECK: {{.*}}/fib is a {{(32|64)}}-bit ELF image
29+
// CHECK-NEXT: uuid: {{[0-9a-f]+}}
30+
// CHECK-NEXT: debug image: <none>
31+
// CHECK-NEXT: .debug_info: found
32+
// CHECK-NEXT: .debug_line: found
33+
// CHECK-NEXT: .debug_abbrev: found
34+
// CHECK-NEXT: .debug_ranges: not found
35+
// CHECK-NEXT: .debug_str: found
36+
// CHECK-NEXT: .debug_addr: found
37+
// CHECK-NEXT: .debug_str_offsets: found
38+
// CHECK-NEXT: .debug_line_str: found
39+
// CHECK-NEXT: .debug_rnglists: not found
40+
41+
// NOUUID: {{.*}}/fib-no-uuid is a {{(32|64)}}-bit ELF image
42+
// NOUUID-NEXT: uuid: <no uuid>
43+
// NOUUID-NEXT: debug image: <none>
44+
// NOUUID-NEXT: .debug_info: found
45+
// NOUUID-NEXT: .debug_line: found
46+
// NOUUID-NEXT: .debug_abbrev: found
47+
// NOUUID-NEXT: .debug_ranges: not found
48+
// NOUUID-NEXT: .debug_str: found
49+
// NOUUID-NEXT: .debug_addr: found
50+
// NOUUID-NEXT: .debug_str_offsets: found
51+
// NOUUID-NEXT: .debug_line_str: found
52+
// NOUUID-NEXT: .debug_rnglists: not found
53+
54+
// CMPGNU: {{.*}}/fib-compress-gnu is a {{(32|64)}}-bit ELF image
55+
// CMPGNU-NEXT: uuid: {{[0-9a-f]+}}
56+
// CMPGNU-NEXT: debug image: <none>
57+
// CMPGNU-NEXT: .debug_info: found
58+
// CMPGNU-NEXT: .debug_line: found
59+
// CMPGNU-NEXT: .debug_abbrev: found
60+
// CMPGNU-NEXT: .debug_ranges: not found
61+
// CMPGNU-NEXT: .debug_str: found
62+
// CMPGNU-NEXT: .debug_addr: found
63+
// CMPGNU-NEXT: .debug_str_offsets: found
64+
// CMPGNU-NEXT: .debug_line_str: found
65+
// CMPGNU-NEXT: .debug_rnglists: not found
66+
67+
// CMPZLIB: {{.*}}/fib-compress-zlib is a {{(32|64)}}-bit ELF image
68+
// CMPZLIB-NEXT: uuid: {{[0-9a-f]+}}
69+
// CMPZLIB-NEXT: debug image: <none>
70+
// CMPZLIB-NEXT: .debug_info: found
71+
// CMPZLIB-NEXT: .debug_line: found
72+
// CMPZLIB-NEXT: .debug_abbrev: found
73+
// CMPZLIB-NEXT: .debug_ranges: not found
74+
// CMPZLIB-NEXT: .debug_str: found
75+
// CMPZLIB-NEXT: .debug_addr: found
76+
// CMPZLIB-NEXT: .debug_str_offsets: found
77+
// CMPZLIB-NEXT: .debug_line_str: found
78+
// CMPZLIB-NEXT: .debug_rnglists: not found
79+
80+
// MINIDEBUG: {{.*}}/fib-minidebug is a {{(32|64)}}-bit ELF image
81+
// MINIDEBUG-NEXT: uuid: {{[0-9a-f]+}}
82+
// MINIDEBUG-NEXT: debug image: image {{[0-9a-f]+}}
83+
// MINIDEBUG-NEXT: .debug_info: found
84+
// MINIDEBUG-NEXT: .debug_line: found
85+
// MINIDEBUG-NEXT: .debug_abbrev: found
86+
// MINIDEBUG-NEXT: .debug_ranges: not found
87+
// MINIDEBUG-NEXT: .debug_str: found
88+
// MINIDEBUG-NEXT: .debug_addr: found
89+
// MINIDEBUG-NEXT: .debug_str_offsets: found
90+
// MINIDEBUG-NEXT: .debug_line_str: found
91+
// MINIDEBUG-NEXT: .debug_rnglists: not found
92+
93+
// LIBC: {{.*}}/libc.so.6 is a {{32|64}}-bit ELF image
94+
// LIBC-NEXT: uuid: [[PREFIX:[0-9a-f]{2}]][[SUFFIX:[0-9a-f]+]]
95+
// LIBC-NEXT: debug image: /usr/lib/debug/.build-id/[[PREFIX]]/[[SUFFIX]].debug
96+
// LIBC-NEXT: .debug_info: found
97+
// LIBC-NEXT: .debug_line: found
98+
// LIBC-NEXT: .debug_abbrev: found
99+
// LIBC-NEXT: .debug_ranges:
100+
// LIBC-NEXT: .debug_str: found
101+
// LIBC-NEXT: .debug_addr:
102+
// LIBC-NEXT: .debug_str_offsets:
103+
// LIBC-NEXT: .debug_line_str:
104+
// LIBC-NEXT: .debug_rnglists:
105+
106+
// DBGLINK: {{.*}}/fib-stripped is a {{(32|64)}}-bit ELF image
107+
// DBGLINK-NEXT: uuid: {{[0-9a-f]+}}
108+
// DBGLINK-NEXT: debug image: {{.*}}/fib.dbg
109+
// DBGLINK-NEXT: .debug_info: found
110+
// DBGLINK-NEXT: .debug_line: found
111+
// DBGLINK-NEXT: .debug_abbrev: found
112+
// DBGLINK-NEXT: .debug_ranges: not found
113+
// DBGLINK-NEXT: .debug_str: found
114+
// DBGLINK-NEXT: .debug_addr: found
115+
// DBGLINK-NEXT: .debug_str_offsets: found
116+
// DBGLINK-NEXT: .debug_line_str: found
117+
// DBGLINK-NEXT: .debug_rnglists: not found
118+
119+
if !testElfImageAt(path: CommandLine.arguments[1]) {
120+
exit(1)
121+
}
122+
}
123+
124+
}
125+

0 commit comments

Comments
 (0)