Skip to content

Commit fec47e6

Browse files
authored
Merge pull request #1857 from 3405691582/nobtcfi
Detect OpenBSD opt-out of BTCFI.
2 parents 0c2ef21 + abb2485 commit fec47e6

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

Sources/SwiftDriver/Jobs/GenericUnixToolchain+LinkerSupport.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,16 @@ extension GenericUnixToolchain {
119119
}
120120
}
121121

122+
if targetTriple.os == .openbsd && targetTriple.arch == .aarch64 {
123+
let btcfiEnabled = targetInfo.target.openbsdBTCFIEnabled ?? false
124+
if !btcfiEnabled {
125+
commandLine.appendFlag("-Xlinker")
126+
commandLine.appendFlag("-z")
127+
commandLine.appendFlag("-Xlinker")
128+
commandLine.appendFlag("nobtcfi")
129+
}
130+
}
131+
122132
let staticStdlib = parsedOptions.hasFlag(positive: .staticStdlib,
123133
negative: .noStaticStdlib,
124134
default: false)

Sources/SwiftDriver/Jobs/PrintTargetInfoJob.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ public struct FrontendTargetInfo: Codable {
101101
/// Whether the Swift libraries need to be referenced in their system
102102
/// location (/usr/lib/swift) via rpath.
103103
let librariesRequireRPath: Bool
104+
105+
let openbsdBTCFIEnabled: Bool?
104106
}
105107

106108
@_spi(Testing) public struct Paths: Codable {

Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,14 @@ public final class GenericUnixToolchain: Toolchain {
164164
}
165165

166166
if driver.targetTriple.os == .openbsd && driver.targetTriple.arch == .aarch64 {
167-
commandLine.appendFlag(.Xcc)
168-
commandLine.appendFlag("-Xclang=-msign-return-address=non-leaf")
169-
commandLine.appendFlag(.Xcc)
170-
commandLine.appendFlag("-Xclang=-msign-return-address-key=a_key")
171-
commandLine.appendFlag(.Xcc)
172-
commandLine.appendFlag("-Xclang=-mbranch-target-enforce")
167+
if frontendTargetInfo.target.openbsdBTCFIEnabled ?? false {
168+
commandLine.appendFlag(.Xcc)
169+
commandLine.appendFlag("-Xclang=-msign-return-address=non-leaf")
170+
commandLine.appendFlag(.Xcc)
171+
commandLine.appendFlag("-Xclang=-msign-return-address-key=a_key")
172+
commandLine.appendFlag(.Xcc)
173+
commandLine.appendFlag("-Xclang=-mbranch-target-enforce")
174+
}
173175
}
174176
}
175177
}

0 commit comments

Comments
 (0)