Index: src/trusted/validator_arm/testdata-thumb/test_internal_jumps.S |
diff --git a/src/trusted/validator_arm/testdata-thumb/test_internal_jumps.S b/src/trusted/validator_arm/testdata-thumb/test_internal_jumps.S |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5d044ece04ae0db3cb1caa95258517b060d05e7f |
--- /dev/null |
+++ b/src/trusted/validator_arm/testdata-thumb/test_internal_jumps.S |
@@ -0,0 +1,74 @@ |
+@ Copyright 2010 The Native Client Authors. All rights reserved. |
bsy
2011/09/21 22:32:17
(c) 2011 etc
jasonwkim
2011/09/26 21:35:52
done
|
+@ Use of this source code is governed by a BSD-style license that can |
+@ be found in the LICENSE file. |
+ |
+.code 16 |
+.syntax unified |
+.globl _start |
+.thumb_func |
+_start: |
+ |
+@ Test forwards jumps |
+ b bundle_good |
+ b middle_good |
+ b middle_bad |
+ |
+@ Nop pad to bundle alignment |
+nop |
+nop |
+nop |
+nop |
+nop |
+nop |
+nop |
+nop |
+nop |
+nop |
+ |
+bundle_good: |
+ nop |
+middle_good: |
+ bic lr, lr, #0xf0000000 |
+ orr lr, lr, #0x0000000f |
+middle_bad: |
+ bx lr |
+ |
+@ Test backwards jumps |
+ |
+ b bundle_good |
+ b middle_good |
+ b middle_bad |
+ |
+@ Another nop pad |
+nop |
+nop |
+nop |
+nop |
+ |
+@ Test similar jumps with variations on the mask |
+ |
+ bic lr, lr, #0xc0000000 @ 1GiB mask |
+ orr lr, lr, #0x0000000f |
+ bx lr @ should succeed |
+ |
+ bic lr, lr, #0x80000000 @ 2GiB mask |
+ orr lr, lr, #0x0000000f |
+ bx lr @ must fail |
+ |
+ bic lr, lr, #0xe0000000 @ in between mask |
+ orr lr, lr, #0x0000000f |
+ bx lr @ also succeeds |
+ |
+@ Test the OR mask now |
+ |
+ bic lr, lr, #0xc0000000 @ 1GiB mask |
+ orr lr, lr, #0x0000001f |
+ bx lr @ should fail (additional bit set) |
+ |
+ bic lr, lr, #0xc0000000 |
+ bx lr @ must fail (no oring) |
+ |
+ bic lr, lr, #0xc0000000 @ in between mask |
+ orr lr, lr, #0x0000000e |
+ bx lr @ must fail (too few bits set) |
+ |