[clang] [llvm] Add backend support for Kernel Control-Flow Integrity (PR #163698)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 15 22:10:09 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- clang/lib/CodeGen/BackendUtil.cpp llvm/lib/Target/ARM/ARMAsmPrinter.cpp llvm/lib/Target/ARM/ARMAsmPrinter.h llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp llvm/lib/Target/ARM/ARMISelLowering.cpp llvm/lib/Target/ARM/ARMISelLowering.h llvm/lib/Target/ARM/ARMTargetMachine.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index 295a24792..e028d726e 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -1509,23 +1509,21 @@ void ARMAsmPrinter::LowerKCFI_CHECK(const MachineInstr &MI) {
// If we need to spill r3, push it first.
if (NeedSpillR3) {
// push {r3}
- EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::STMDB_UPD)
- .addReg(ARM::SP)
- .addReg(ARM::SP)
- .addImm(ARMCC::AL)
- .addReg(0)
- .addReg(ARM::R3));
+ EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::STMDB_UPD)
+ .addReg(ARM::SP)
+ .addReg(ARM::SP)
+ .addImm(ARMCC::AL)
+ .addReg(0)
+ .addReg(ARM::R3));
}
// ldr scratch, [target, #-(PrefixNops * 4 + 4)]
- EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::LDRi12)
- .addReg(ScratchReg)
- .addReg(AddrReg)
- .addImm(-(PrefixNops * 4 + 4))
- .addImm(ARMCC::AL)
- .addReg(0));
+ EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::LDRi12)
+ .addReg(ScratchReg)
+ .addReg(AddrReg)
+ .addImm(-(PrefixNops * 4 + 4))
+ .addImm(ARMCC::AL)
+ .addReg(0));
// Each EOR instruction XORs one byte of the type, shifted to its position.
for (int i = 0; i < 4; i++) {
@@ -1535,53 +1533,49 @@ void ARMAsmPrinter::LowerKCFI_CHECK(const MachineInstr &MI) {
// Encode as ARM modified immediate.
int SOImmVal = ARM_AM::getSOImmVal(imm);
- assert(SOImmVal != -1 && "Cannot encode immediate as ARM modified immediate");
+ assert(SOImmVal != -1 &&
+ "Cannot encode immediate as ARM modified immediate");
// eor[s] scratch, scratch, #imm (last one sets flags with CPSR)
- EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::EORri)
- .addReg(ScratchReg)
- .addReg(ScratchReg)
- .addImm(SOImmVal)
- .addImm(ARMCC::AL)
- .addReg(0)
- .addReg(isLast ? ARM::CPSR : 0));
+ EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::EORri)
+ .addReg(ScratchReg)
+ .addReg(ScratchReg)
+ .addImm(SOImmVal)
+ .addImm(ARMCC::AL)
+ .addReg(0)
+ .addReg(isLast ? ARM::CPSR : 0));
}
// If we spilled r3, restore it immediately after the comparison.
// This must happen before the branch so r3 is valid on both paths.
if (NeedSpillR3) {
// pop {r3}
- EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::LDMIA_UPD)
- .addReg(ARM::SP)
- .addReg(ARM::SP)
- .addImm(ARMCC::AL)
- .addReg(0)
- .addReg(ARM::R3));
+ EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::LDMIA_UPD)
+ .addReg(ARM::SP)
+ .addReg(ARM::SP)
+ .addImm(ARMCC::AL)
+ .addReg(0)
+ .addReg(ARM::R3));
}
// beq .Lpass (branch if types match, i.e., scratch is zero)
MCSymbol *Pass = OutContext.createTempSymbol();
EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::Bcc)
- .addExpr(MCSymbolRefExpr::create(Pass, OutContext))
- .addImm(ARMCC::EQ)
- .addReg(ARM::CPSR));
+ MCInstBuilder(ARM::Bcc)
+ .addExpr(MCSymbolRefExpr::create(Pass, OutContext))
+ .addImm(ARMCC::EQ)
+ .addReg(ARM::CPSR));
// udf #ESR (trap with encoded diagnostic)
// ESR encoding: 0x8000 | (scratch_reg << 5) | addr_reg.
// Note: scratch_reg is always 0x1F since the EOR sequence clobbers it
// and it contains no useful information at trap time.
- const ARMBaseRegisterInfo *TRI =
- static_cast<const ARMBaseRegisterInfo *>(
- MI.getMF()->getSubtarget().getRegisterInfo());
+ const ARMBaseRegisterInfo *TRI = static_cast<const ARMBaseRegisterInfo *>(
+ MI.getMF()->getSubtarget().getRegisterInfo());
unsigned AddrIndex = TRI->getEncodingValue(AddrReg);
unsigned ESR = 0x8000 | (31 << 5) | (AddrIndex & 31);
- EmitToStreamer(*OutStreamer,
- MCInstBuilder(ARM::UDF)
- .addImm(ESR));
+ EmitToStreamer(*OutStreamer, MCInstBuilder(ARM::UDF).addImm(ESR));
OutStreamer->emitLabel(Pass);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/163698
More information about the cfe-commits
mailing list