Skip to content

Commit 9a92d85

Browse files
authored
Merge pull request #68989 from al45tair/eng/PR-116112040-5.10
[Linux] Enable frame pointers when building Swift libraries.
2 parents 7a3aa36 + 87c7bca commit 9a92d85

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ function(_add_target_variant_c_compile_link_flags)
134134
"-fcoverage-mapping")
135135
endif()
136136

137+
# Use frame pointers on Linux
138+
if("${CFLAGS_SDK}" STREQUAL "LINUX")
139+
list(APPEND result "-fno-omit-frame-pointer")
140+
endif()
141+
137142
_compute_lto_flag("${CFLAGS_ENABLE_LTO}" _lto_flag_out)
138143
if (_lto_flag_out)
139144
list(APPEND result "${_lto_flag_out}")
@@ -310,6 +315,11 @@ function(_add_target_variant_c_compile_flags)
310315
"-fcoverage-mapping")
311316
endif()
312317

318+
# Use frame pointers on Linux
319+
if("${CFLAGS_SDK}" STREQUAL "LINUX")
320+
list(APPEND result "-fno-omit-frame-pointer")
321+
endif()
322+
313323
if((CFLAGS_ARCH STREQUAL "armv7" OR CFLAGS_ARCH STREQUAL "aarch64") AND
314324
(CFLAGS_SDK STREQUAL "LINUX" OR CFLAGS_SDK STREQUAL "ANDROID"))
315325
list(APPEND result -funwind-tables)
@@ -935,6 +945,11 @@ function(add_swift_target_library_single target name)
935945
set(install_in_component "${SWIFTLIB_SINGLE_INSTALL_IN_COMPONENT}")
936946
endif()
937947

948+
# Use frame pointers on Linux
949+
if ("${SWIFTLIB_SINGLE_SDK}" STREQUAL "LINUX")
950+
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS "-Xcc" "-fno-omit-frame-pointer")
951+
endif()
952+
938953
# FIXME: don't actually depend on the libraries in SWIFTLIB_SINGLE_LINK_LIBRARIES,
939954
# just any swiftmodule files that are associated with them.
940955
handle_swift_sources(
@@ -2614,6 +2629,10 @@ function(_add_swift_target_executable_single name)
26142629
-vfsoverlay;"${SWIFT_WINDOWS_VFS_OVERLAY}")
26152630
endif()
26162631

2632+
if ("${SWIFTEXE_SINGLE_SDK}" STREQUAL "LINUX")
2633+
list(APPEND SWIFTEXE_SINGLE_COMPILE_FLAGS "-Xcc" "-fno-omit-frame-pointer")
2634+
endif()
2635+
26172636
handle_swift_sources(
26182637
dependency_target
26192638
unused_module_dependency_target

test/Backtracing/FatalError.swift

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift %s -parse-as-library -Onone -g -o %t/FatalError
3+
// RUN: %target-codesign %t/FatalError
4+
// RUN: (env SWIFT_BACKTRACE=enable=yes,cache=no %target-run %t/FatalError 2>&1 || true) | %FileCheck %s
5+
6+
// UNSUPPORTED: use_os_stdlib
7+
// UNSUPPORTED: back_deployment_runtime
8+
// UNSUPPORTED: asan
9+
// REQUIRES: executable_test
10+
// REQUIRES: backtracing
11+
// REQUIRES: OS=macosx || OS=linux-gnu
12+
13+
func level1() {
14+
level2()
15+
}
16+
17+
func level2() {
18+
level3()
19+
}
20+
21+
func level3() {
22+
level4()
23+
}
24+
25+
func level4() {
26+
level5()
27+
}
28+
29+
func level5() {
30+
fatalError("Going to crash")
31+
}
32+
33+
@main
34+
struct FatalError {
35+
static func main() {
36+
level1()
37+
}
38+
}
39+
40+
// CHECK: *** Program crashed: Illegal instruction at 0x{{[0-9a-f]+}} ***
41+
42+
// CHECK: Thread 0 {{(".*" )?}}crashed:
43+
44+
// CHECK: 0 0x{{[0-9a-f]+}} _assertionFailure(_:_:file:line:flags:) + {{[0-9]+}} in libswiftCore.{{so|dylib}}
45+
// CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} level5() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:30:3
46+
// CHECK-NEXT: 2 [ra] 0x{{[0-9a-f]+}} level4() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:26:3
47+
// CHECK-NEXT: 3 [ra] 0x{{[0-9a-f]+}} level3() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:22:3
48+
// CHECK-NEXT: 4 [ra] 0x{{[0-9a-f]+}} level2() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:18:3
49+
// CHECK-NEXT: 5 [ra] 0x{{[0-9a-f]+}} level1() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:14:3
50+
// CHECK-NEXT: 6 [ra] 0x{{[0-9a-f]+}} static FatalError.main() + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift:36:5
51+
// CHECK-NEXT: 7 [ra] [system] 0x{{[0-9a-f]+}} static FatalError.$main() + {{[0-9]+}} in FatalError at {{.*}}/<compiler-generated>
52+
// CHECK-NEXT: 8 [ra] 0x{{[0-9a-f]+}} main + {{[0-9]+}} in FatalError at {{.*}}/FatalError.swift
53+

0 commit comments

Comments
 (0)