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

Unified Diff: pnacl/support/setjmp_mips32.S

Issue 11039026: [MIPS] Untrusted versions of setjmp and longjmp. (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Rebase. Created 8 years, 2 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
« no previous file with comments | « pnacl/support/nacl_mips_defs.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pnacl/support/setjmp_mips32.S
diff --git a/pnacl/support/setjmp_mips32.S b/pnacl/support/setjmp_mips32.S
new file mode 100644
index 0000000000000000000000000000000000000000..3a906f47343a3fb4b115aefc7d818c9c30a1ceca
--- /dev/null
+++ b/pnacl/support/setjmp_mips32.S
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 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.
+ */
+
+#include "nacl_mips_defs.h"
+
+ .text
+ .p2align 4
+ .align NACL_BLOCK_SHIFT
+ .globl setjmp
+ .ent setjmp
+ .frame $sp, 0, $31
+ .set noreorder
+
+/* int setjmp(jmp_buf env) */
+setjmp:
+
+ /* The code here is grouped by instruction bundle. */
+
+ /* NACL_CALLEE_SAVE_LIST BEGIN */
+ and $a0, $a0, STORE_MASK
+ sw $s0, 0($a0)
+ and $a0, $a0, STORE_MASK
+ sw $s1, 4($a0)
+
+ and $a0, $a0, STORE_MASK
+ sw $s2, 8($a0)
+ and $a0, $a0, STORE_MASK
+ sw $s3, 12($a0)
+
+ and $a0, $a0, STORE_MASK
+ sw $s4, 16($a0)
+ and $a0, $a0, STORE_MASK
+ sw $s5, 20($a0)
+
+ and $a0, $a0, STORE_MASK
+ sw $s6, 24($a0)
+ and $a0, $a0, STORE_MASK
+ sw $s7, 28($a0)
+
+ and $a0, $a0, STORE_MASK
+ sw $sp, 32($a0)
+ and $a0, $a0, STORE_MASK
+ sw $fp, 36($a0)
+
+ and $a0, $a0, STORE_MASK
+ sw $ra, 40($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f20, 44($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f21, 48($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f22, 52($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f23, 56($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f24, 60($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f25, 64($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f26, 68($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f27, 72($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f28, 76($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f29, 80($a0)
+ and $a0, $a0, STORE_MASK
+ swc1 $f30, 84($a0)
+
+ and $a0, $a0, STORE_MASK
+ swc1 $f31, 88($a0)
+ /* NACL_CALLEE_SAVE_LIST END */
+ move $v0, $zero
+ nop
+
+ and $ra, $ra, JUMP_MASK
+ j $ra
+ nop
+ nop
+
+ .end setjmp
+
+ .text
+ .p2align 4
+ .align NACL_BLOCK_SHIFT
+ .globl longjmp
+ .ent longjmp
+ .set noreorder
+
+/* void longjmp(jmp_buf env, int val) */
+longjmp:
+
+ /* NACL_CALLEE_LOAD_LIST BEGIN */
+ and $a0, $a0, STORE_MASK
+ lw $s0, 0($a0)
+ and $a0, $a0, STORE_MASK
+ lw $s1, 4($a0)
+
+ and $a0, $a0, STORE_MASK
+ lw $s2, 8($a0)
+ and $a0, $a0, STORE_MASK
+ lw $s3, 12($a0)
+
+ and $a0, $a0, STORE_MASK
+ lw $s4, 16($a0)
+ and $a0, $a0, STORE_MASK
+ lw $s5, 20($a0)
+
+ and $a0, $a0, STORE_MASK
+ lw $s6, 24($a0)
+ and $a0, $a0, STORE_MASK
+ lw $s7, 28($a0)
+
+ and $a0, $a0, STORE_MASK
+ lw $sp, 32($a0)
+ and $sp, $sp, STORE_MASK
+ nop
+
+ and $a0, $a0, STORE_MASK
+ lw $fp, 36($a0)
+ and $a0, $a0, STORE_MASK
+ lw $ra, 40($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f20, 44($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f21, 48($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f22, 52($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f23, 56($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f24, 60($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f25, 64($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f26, 68($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f27, 72($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f28, 76($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f29, 80($a0)
+
+ and $a0, $a0, STORE_MASK
+ lwc1 $f30, 84($a0)
+ and $a0, $a0, STORE_MASK
+ lwc1 $f31, 88($a0)
+ /* NACL_CALLEE_LOAD_LIST END */
+
+ bne $a1, $zero, 1f
+ nop
+ ori $a1, $zero, 1
+1:
+ move $v0, $a1
+
+ and $ra, $ra, JUMP_MASK
+ j $ra
+ nop
+ nop
+
+ .end longjmp
+
« no previous file with comments | « pnacl/support/nacl_mips_defs.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698