Skip to content

Commit e08fe57

Browse files
[NFC][ARM][AArch64] Deduplicated code. (#82785)
Add the SignReturnAddressScopeKind to the BranchProtectionInfo class.
1 parent 780d556 commit e08fe57

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

clang/include/clang/Basic/TargetInfo.h

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,13 +1369,35 @@ class TargetInfo : public TransferrableTargetInfo,
13691369
}
13701370

13711371
struct BranchProtectionInfo {
1372-
LangOptions::SignReturnAddressScopeKind SignReturnAddr =
1373-
LangOptions::SignReturnAddressScopeKind::None;
1374-
LangOptions::SignReturnAddressKeyKind SignKey =
1375-
LangOptions::SignReturnAddressKeyKind::AKey;
1376-
bool BranchTargetEnforcement = false;
1377-
bool BranchProtectionPAuthLR = false;
1378-
bool GuardedControlStack = false;
1372+
LangOptions::SignReturnAddressScopeKind SignReturnAddr;
1373+
LangOptions::SignReturnAddressKeyKind SignKey;
1374+
bool BranchTargetEnforcement;
1375+
bool BranchProtectionPAuthLR;
1376+
bool GuardedControlStack;
1377+
1378+
BranchProtectionInfo() = default;
1379+
1380+
const char *getSignReturnAddrStr() const {
1381+
switch (SignReturnAddr) {
1382+
case LangOptions::SignReturnAddressScopeKind::None:
1383+
return "none";
1384+
case LangOptions::SignReturnAddressScopeKind::NonLeaf:
1385+
return "non-leaf";
1386+
case LangOptions::SignReturnAddressScopeKind::All:
1387+
return "all";
1388+
}
1389+
assert(false && "Unexpected SignReturnAddressScopeKind");
1390+
}
1391+
1392+
const char *getSignKeyStr() const {
1393+
switch (SignKey) {
1394+
case LangOptions::SignReturnAddressKeyKind::AKey:
1395+
return "a_key";
1396+
case LangOptions::SignReturnAddressKeyKind::BKey:
1397+
return "b_key";
1398+
}
1399+
assert(false && "Unexpected SignReturnAddressKeyKind");
1400+
}
13791401
};
13801402

13811403
/// Determine if the Architecture in this TargetInfo supports branch

clang/lib/CodeGen/Targets/AArch64.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ class AArch64TargetCodeGenInfo : public TargetCodeGenInfo {
132132
assert(Error.empty());
133133

134134
auto *Fn = cast<llvm::Function>(GV);
135-
static const char *SignReturnAddrStr[] = {"none", "non-leaf", "all"};
136-
Fn->addFnAttr("sign-return-address", SignReturnAddrStr[static_cast<int>(BPI.SignReturnAddr)]);
135+
Fn->addFnAttr("sign-return-address", BPI.getSignReturnAddrStr());
137136

138137
if (BPI.SignReturnAddr != LangOptions::SignReturnAddressScopeKind::None) {
139138
Fn->addFnAttr("sign-return-address-key",

clang/lib/CodeGen/Targets/ARM.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,7 @@ class ARMTargetCodeGenInfo : public TargetCodeGenInfo {
152152
diag::warn_target_unsupported_branch_protection_attribute)
153153
<< Arch;
154154
} else {
155-
static const char *SignReturnAddrStr[] = {"none", "non-leaf", "all"};
156-
assert(static_cast<unsigned>(BPI.SignReturnAddr) <= 2 &&
157-
"Unexpected SignReturnAddressScopeKind");
158-
Fn->addFnAttr(
159-
"sign-return-address",
160-
SignReturnAddrStr[static_cast<int>(BPI.SignReturnAddr)]);
161-
155+
Fn->addFnAttr("sign-return-address", BPI.getSignReturnAddrStr());
162156
Fn->addFnAttr("branch-target-enforcement",
163157
BPI.BranchTargetEnforcement ? "true" : "false");
164158
}

0 commit comments

Comments
 (0)