From cf7734d0d2632c3d1863040332bb439d152e3949 Mon Sep 17 00:00:00 2001 From: Butta Date: Sat, 20 Aug 2022 02:53:52 +0530 Subject: [PATCH] Revert 'Remove --gc-sections for all targets for now (#5708)' --- Sources/Build/BuildPlan.swift | 9 +++++++-- Tests/BuildTests/BuildPlanTests.swift | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Sources/Build/BuildPlan.swift b/Sources/Build/BuildPlan.swift index a779a1bc8ee..d9ab2656a4f 100644 --- a/Sources/Build/BuildPlan.swift +++ b/Sources/Build/BuildPlan.swift @@ -1321,12 +1321,17 @@ public final class ProductBuildDescription { return ["-Xlinker", "-dead_strip"] } else if buildParameters.triple.isWindows() { return ["-Xlinker", "/OPT:REF"] - } else { - // FIXME: wasm-ld / ld.lld strips data segments referenced through __start/__stop symbols + } else if buildParameters.triple.arch == .wasm32 { + // FIXME: wasm-ld strips data segments referenced through __start/__stop symbols // during GC, and it removes Swift metadata sections like swift5_protocols // We should add support of SHF_GNU_RETAIN-like flag for __attribute__((retain)) // to LLVM and wasm-ld + // This workaround is required for not only WASI but also all WebAssembly archs + // using wasm-ld (e.g. wasm32-unknown-unknown). So this branch is conditioned by + // arch == .wasm32 return [] + } else { + return ["-Xlinker", "--gc-sections"] } } } diff --git a/Tests/BuildTests/BuildPlanTests.swift b/Tests/BuildTests/BuildPlanTests.swift index 2860412bebf..7bc72c9df6b 100644 --- a/Tests/BuildTests/BuildPlanTests.swift +++ b/Tests/BuildTests/BuildPlanTests.swift @@ -402,7 +402,7 @@ final class BuildPlanTests: XCTestCase { XCTAssertEqual(try result.buildProduct(for: "exe").linkArguments(), [ "/fake/path/to/swiftc", "-g", "-L", "/path/to/build/release", "-o", "/path/to/build/release/exe", "-module-name", "exe", "-emit-executable", - "-Xlinker", "-rpath=$ORIGIN", + "-Xlinker", "--gc-sections", "-Xlinker", "-rpath=$ORIGIN", "@/path/to/build/release/exe.product/Objects.LinkFileList", "-target", defaultTargetTriple, ])