Skip to content

Commit db2d8fc

Browse files
authored
[BOLT][NFC] Add MCPlusBuilder unittests for PAuth helpers (#162251)
PR #120064 added several MCPlusBuilder helpers for recognising instructions which sign or authenticate the link register. This patch adds MCPlusBuilder unittests for these helpers.
1 parent 4336415 commit db2d8fc

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

bolt/unittests/Core/MCPlusBuilder.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,82 @@ TEST_P(MCPlusBuilderTester, testAccessedRegsMultipleDefs) {
261261
{AArch64::W5, AArch64::X5, AArch64::W5_HI});
262262
}
263263

264+
TEST_P(MCPlusBuilderTester, AArch64_Psign_Pauth_variants) {
265+
if (GetParam() != Triple::aarch64)
266+
GTEST_SKIP();
267+
268+
MCInst Paciasp = MCInstBuilder(AArch64::PACIASP);
269+
MCInst Pacibsp = MCInstBuilder(AArch64::PACIBSP);
270+
ASSERT_TRUE(BC->MIB->isPSignOnLR(Paciasp));
271+
ASSERT_TRUE(BC->MIB->isPSignOnLR(Pacibsp));
272+
273+
MCInst PaciaSPLR =
274+
MCInstBuilder(AArch64::PACIA).addReg(AArch64::LR).addReg(AArch64::SP);
275+
MCInst PacibSPLR =
276+
MCInstBuilder(AArch64::PACIB).addReg(AArch64::LR).addReg(AArch64::SP);
277+
ASSERT_TRUE(BC->MIB->isPSignOnLR(PaciaSPLR));
278+
ASSERT_TRUE(BC->MIB->isPSignOnLR(PacibSPLR));
279+
280+
MCInst PacizaX5 = MCInstBuilder(AArch64::PACIZA).addReg(AArch64::X5);
281+
MCInst PacizbX5 = MCInstBuilder(AArch64::PACIZB).addReg(AArch64::X5);
282+
ASSERT_FALSE(BC->MIB->isPSignOnLR(PacizaX5));
283+
ASSERT_FALSE(BC->MIB->isPSignOnLR(PacizbX5));
284+
285+
MCInst Paciaz = MCInstBuilder(AArch64::PACIZA).addReg(AArch64::LR);
286+
MCInst Pacibz = MCInstBuilder(AArch64::PACIZB).addReg(AArch64::LR);
287+
ASSERT_TRUE(BC->MIB->isPSignOnLR(Paciaz));
288+
ASSERT_TRUE(BC->MIB->isPSignOnLR(Pacibz));
289+
290+
MCInst Pacia1716 = MCInstBuilder(AArch64::PACIA1716);
291+
MCInst Pacib1716 = MCInstBuilder(AArch64::PACIB1716);
292+
ASSERT_FALSE(BC->MIB->isPSignOnLR(Pacia1716));
293+
ASSERT_FALSE(BC->MIB->isPSignOnLR(Pacib1716));
294+
295+
MCInst Pacia171615 = MCInstBuilder(AArch64::PACIA171615);
296+
MCInst Pacib171615 = MCInstBuilder(AArch64::PACIB171615);
297+
ASSERT_FALSE(BC->MIB->isPSignOnLR(Pacia171615));
298+
ASSERT_FALSE(BC->MIB->isPSignOnLR(Pacib171615));
299+
300+
MCInst Autiasp = MCInstBuilder(AArch64::AUTIASP);
301+
MCInst Autibsp = MCInstBuilder(AArch64::AUTIBSP);
302+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(Autiasp));
303+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(Autibsp));
304+
305+
MCInst AutiaSPLR =
306+
MCInstBuilder(AArch64::AUTIA).addReg(AArch64::LR).addReg(AArch64::SP);
307+
MCInst AutibSPLR =
308+
MCInstBuilder(AArch64::AUTIB).addReg(AArch64::LR).addReg(AArch64::SP);
309+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(AutiaSPLR));
310+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(AutibSPLR));
311+
312+
MCInst AutizaX5 = MCInstBuilder(AArch64::AUTIZA).addReg(AArch64::X5);
313+
MCInst AutizbX5 = MCInstBuilder(AArch64::AUTIZB).addReg(AArch64::X5);
314+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(AutizaX5));
315+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(AutizbX5));
316+
317+
MCInst Autiaz = MCInstBuilder(AArch64::AUTIZA).addReg(AArch64::LR);
318+
MCInst Autibz = MCInstBuilder(AArch64::AUTIZB).addReg(AArch64::LR);
319+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(Autiaz));
320+
ASSERT_TRUE(BC->MIB->isPAuthOnLR(Autibz));
321+
322+
MCInst Autia1716 = MCInstBuilder(AArch64::AUTIA1716);
323+
MCInst Autib1716 = MCInstBuilder(AArch64::AUTIB1716);
324+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Autia1716));
325+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Autib1716));
326+
327+
MCInst Autia171615 = MCInstBuilder(AArch64::AUTIA171615);
328+
MCInst Autib171615 = MCInstBuilder(AArch64::AUTIB171615);
329+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Autia171615));
330+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Autib171615));
331+
332+
MCInst Retaa = MCInstBuilder(AArch64::RETAA);
333+
MCInst Retab = MCInstBuilder(AArch64::RETAB);
334+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Retaa));
335+
ASSERT_FALSE(BC->MIB->isPAuthOnLR(Retab));
336+
ASSERT_TRUE(BC->MIB->isPAuthAndRet(Retaa));
337+
ASSERT_TRUE(BC->MIB->isPAuthAndRet(Retab));
338+
}
339+
264340
#endif // AARCH64_AVAILABLE
265341

266342
#ifdef X86_AVAILABLE

0 commit comments

Comments
 (0)