aboutsummaryrefslogtreecommitdiff
path: root/test/aarch64
diff options
context:
space:
mode:
Diffstat (limited to 'test/aarch64')
-rw-r--r--test/aarch64/test-assembler-aarch64.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/aarch64/test-assembler-aarch64.cc b/test/aarch64/test-assembler-aarch64.cc
index 49429e78..39802fd8 100644
--- a/test/aarch64/test-assembler-aarch64.cc
+++ b/test/aarch64/test-assembler-aarch64.cc
@@ -15700,6 +15700,33 @@ TEST(bti_call_to_j) {
}
#endif // VIXL_NEGATIVE_TESTING
+TEST(fall_through_bti) {
+ SETUP_WITH_FEATURES(CPUFeatures::kBTI, CPUFeatures::kPAuth);
+
+ START();
+ Label target, target_j, target_c, target_jc;
+ __ Mov(x0, 0); // 'Normal' instruction sets BTYPE to zero.
+ __ Bind(&target, EmitBTI);
+ __ Add(x0, x0, 1);
+ __ Bind(&target_j, EmitBTI_j);
+ __ Add(x0, x0, 1);
+ __ Bind(&target_c, EmitBTI_c);
+ __ Add(x0, x0, 1);
+ __ Bind(&target_jc, EmitBTI_jc);
+ __ Add(x0, x0, 1);
+ __ Paciasp();
+ END();
+
+#ifdef VIXL_INCLUDE_SIMULATOR_AARCH64
+ simulator.SetGuardedPages(true);
+#endif // VIXL_INCLUDE_SIMULATOR_AARCH64
+ RUN();
+
+ ASSERT_EQUAL_64(4, x0);
+
+ TEARDOWN();
+}
+
TEST(zero_dest) {
// RegisterDump::Dump uses NEON.
SETUP_WITH_FEATURES(CPUFeatures::kNEON);