diff --git a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
index e130803ff..b2ed42b41 100644
--- a/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
+++ b/Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift
@@ -119,6 +119,16 @@ extension GenericUnixToolchain {
         }
       }
 
+      if targetTriple.os == .openbsd && targetTriple.arch == .aarch64 {
+        let btcfiEnabled = targetInfo.target.openbsdBTCFIEnabled ?? false
+        if !btcfiEnabled {
+          commandLine.appendFlag("-Xlinker")
+          commandLine.appendFlag("-z")
+          commandLine.appendFlag("-Xlinker")
+          commandLine.appendFlag("nobtcfi")
+        }
+      }
+
       let staticStdlib = parsedOptions.hasFlag(positive: .staticStdlib,
                                                negative: .noStaticStdlib,
                                                    default: false)
diff --git a/Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift b/Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift
index d43e91659..f4bfb2d15 100644
--- a/Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift
+++ b/Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift
@@ -101,6 +101,8 @@ public struct FrontendTargetInfo: Codable {
     /// Whether the Swift libraries need to be referenced in their system
     /// location (/usr/lib/swift) via rpath.
     let librariesRequireRPath: Bool
+
+    let openbsdBTCFIEnabled: Bool?
   }
 
   @_spi(Testing) public struct Paths: Codable {
diff --git a/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift b/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift
index 11efe7c3e..7bbbcc437 100644
--- a/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift
+++ b/Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift
@@ -163,12 +163,14 @@ public final class GenericUnixToolchain: Toolchain {
     }
 
     if driver.targetTriple.os == .openbsd && driver.targetTriple.arch == .aarch64 {
-      commandLine.appendFlag(.Xcc)
-      commandLine.appendFlag("-Xclang=-msign-return-address=non-leaf")
-      commandLine.appendFlag(.Xcc)
-      commandLine.appendFlag("-Xclang=-msign-return-address-key=a_key")
-      commandLine.appendFlag(.Xcc)
-      commandLine.appendFlag("-Xclang=-mbranch-target-enforce")
+      if frontendTargetInfo.target.openbsdBTCFIEnabled ?? false {
+        commandLine.appendFlag(.Xcc)
+        commandLine.appendFlag("-Xclang=-msign-return-address=non-leaf")
+        commandLine.appendFlag(.Xcc)
+        commandLine.appendFlag("-Xclang=-msign-return-address-key=a_key")
+        commandLine.appendFlag(.Xcc)
+        commandLine.appendFlag("-Xclang=-mbranch-target-enforce")
+      }
     }
   }
 }