Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Unified Diff: src/trusted/validator_mips/testdata/test_jmp_imm.S

Issue 9979025: [MIPS] Adding validator for MIPS architecture. (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Rebased patch, conflict resolved. Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator_mips/testdata/test_jmp_imm.S
diff --git a/src/trusted/validator_mips/testdata/test_jmp_imm.S b/src/trusted/validator_mips/testdata/test_jmp_imm.S
new file mode 100644
index 0000000000000000000000000000000000000000..b559267d4956af7cb58316e04c18f8e472aaa190
--- /dev/null
+++ b/src/trusted/validator_mips/testdata/test_jmp_imm.S
@@ -0,0 +1,132 @@
+# Copyright 2012 The Native Client Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can
+# be found in the LICENSE file.
+
+# Test cases for jumps/branches.
+# There are several kinds of jumps/branches regarding destination address:
+# 1. Jumps into 0-0x10000, null guard region, where every address is OK.
+# 2. Jumps into 0x10000-0x20000, trampoline code section, destination address
+# needs to be bundle aligned.
+# 3. Jumps into code section, all addresses are OK with additional check whether
+# a branch target address is inside of a pseudo-instruction.
+# Besides destination address we also check the position of branch/jump-and-link
+# instructions, which need to be at bundle offset +8.
+
+.globl _start
+_start:
+.align 4
+.set noreorder
+
+ # Branches to null guard region, everything is OK.
+
+bundle_b_to_0_0x1000:
+ b _start - 0x10010 # Destination address is 0xfff0 - OK.
+ nop # Instruction in the delay slot is always indented.
+ b _start - 0x1fff4 # Destination address is 0xc - OK.
+ nop
+
+ # Branches to trampoline code section, must be bundle aligned.
+
+bundle_b_to_0x1000_0x20000:
+ b _start - 0x10000 # OK - trampoline start.
+ nop
+ b _start - 0xfff0 # OK - bundle aligned jump into trampoline.
+ nop
+ b _start - 0xfff4 # Error, destination address is 0x1000c, which is
+ nop # is not bundle aligned.
+ nop
+ nop
+
+ # Branches to code area.
+
+bundle_b_to_code_area:
+ b _start + 0x1000 # OK
+ nop
+ b _start + 0x1004 # OK
+ nop
+ b _start + 0x10 # OK
+ nop
+ b end_of_code # OK
+ nop
+
+ # Both jumps are OK, because destinations are in guard region.
+
+bundle_j_to_0_0x1000:
+ j 0x0
+ nop
+ j 0x4
+ nop
+
+ # Direct jumps to trampoline area, must be bundle aligned.
+
+bundle_j_trampoline_area:
+ j 0x10000
+ nop
+ jal 0x10004 # Error - 0x10004 is not a trampoline start.
+ nop
+
+ nop
+ nop
+ jal 0x10010 # OK - not a trampoline start, but there is a halt.
+ nop
+
+ nop
+ nop
+ jal 0x10020 # OK
+ nop
+
+ # Jumps with negative argument.
+
+bundle_j_negative:
+ j -0x4 # Dest. address 0xffffffc, inside code region - OK.
+ nop
+ j -0x10 # Dest. address 0xffffff0, inside code region - OK.
+ nop
+
+bundle_1st:
+ and $a0, $a0, $t7
+bundle_2nd:
+ sw $ra, 24($a0)
+ addiu $v0, $v0, 4
+ addiu $v0, $v1, 0
+
+bl_check:
+ nop
+ nop
+ bal bundle_1st # OK
+ nop
+
+ # Branch inside a pseudo-instruction.
+
+bundle_check_b_dest_addr:
+ b bundle_1st # OK
+ nop
+ b bundle_2nd # Error, branch at the middle of pseudo-instruction.
+ nop
+
+ # Test if branch and link is located at bundle offset 8.
+
+ bal 0x10000 # Error, misaligned call.
+ nop
+ bal 0x10000 # OK
+ nop
+
+ # Test if jump and link is located at bundle offset 8.
+
+ jal 0x10000 # Error, misaligned call.
+ nop
+ jal 0x3fffff0 # OK
+ nop
+
+ # Another branch instruction with the same target address.
+ # Check if this one is also reported.
+
+ b bundle_2nd # Error, branch at middle of pseudo-instruction.
+ nop
+
+ # Test forbidden instruction.
+
+ jalx 0x3ffffff0 # Error, forbidden instruction.
+ nop
+
+end_of_code:
« no previous file with comments | « src/trusted/validator_mips/testdata/test_invalid_dest.err ('k') | src/trusted/validator_mips/testdata/test_jmp_imm.err » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698