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

Side by Side Diff: src/trusted/service_runtime/arch/mips/sel_rt.h

Issue 11368024: [MIPS] Restore the trusted stack in NaClSyscallSeg. (Closed) Base URL: http://git.chromium.org/native_client/src/native_client.git@master
Patch Set: Remove saving of $gp. Created 8 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Native Client Authors. All rights reserved. 2 * Copyright 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can 3 * Use of this source code is governed by a BSD-style license that can
4 * be found in the LICENSE file. 4 * be found in the LICENSE file.
5 */ 5 */
6 6
7 /* 7 /*
8 * NaCl Secure Runtime 8 * NaCl Secure Runtime
9 */ 9 */
10 10
(...skipping 21 matching lines...) Expand all
32 #define NACL_PRIXNACL_REG NACL_PRIX32 32 #define NACL_PRIXNACL_REG NACL_PRIX32
33 33
34 /* 34 /*
35 * NOTE: This struct needs to be synchronized with NACL_CALLEE_SAVE_LIST 35 * NOTE: This struct needs to be synchronized with NACL_CALLEE_SAVE_LIST
36 */ 36 */
37 37
38 struct NaClThreadContext { 38 struct NaClThreadContext {
39 nacl_reg_t s0, s1, s2, s3, s4, s5, s6, s7, t8; 39 nacl_reg_t s0, s1, s2, s3, s4, s5, s6, s7, t8;
40 /* 0 4 8 c 10 14 18 1c 20 */ 40 /* 0 4 8 c 10 14 18 1c 20 */
41 41
42 nacl_reg_t global_ptr, stack_ptr, frame_ptr, prog_ctr; 42 nacl_reg_t stack_ptr, frame_ptr, prog_ctr;
43 /* 24 28 2c 30 */ 43 /* 24 28 2c */
44 44
45 /* 45 /*
46 * sys_ret and new_prog_ctr are not a part of the thread's register set, 46 * sys_ret and new_prog_ctr are not a part of the thread's register set,
47 * but are needed by NaClSwitch. By including them here, the two 47 * but are needed by NaClSwitch. By including them here, the two
48 * use the same interface. 48 * use the same interface.
49 */ 49 */
50 uint32_t sysret; 50 uint32_t sysret;
51 /* 30 */
52 uint32_t new_prog_ctr;
51 /* 34 */ 53 /* 34 */
52 uint32_t new_prog_ctr; 54 uint32_t trusted_stack_ptr;
53 /* 38 */ 55 /* 38 */
54 uint32_t trusted_stack_ptr; 56 uint32_t tls_idx;
55 /* 3c */ 57 /* 3c */
56 uint32_t tls_idx; 58 uint32_t tls_value2;
57 /* 40 */ 59 /* 40 */
58 uint32_t tls_value2;
59 /* 44 */
60 }; 60 };
61 61
62 #endif /* !defined(__ASSEMBLER__) */ 62 #endif /* !defined(__ASSEMBLER__) */
63 63
64 #define NACL_THREAD_CONTEXT_OFFSET_S0 0x00 64 #define NACL_THREAD_CONTEXT_OFFSET_S0 0x00
65 #define NACL_THREAD_CONTEXT_OFFSET_S1 0x04 65 #define NACL_THREAD_CONTEXT_OFFSET_S1 0x04
66 #define NACL_THREAD_CONTEXT_OFFSET_S2 0x08 66 #define NACL_THREAD_CONTEXT_OFFSET_S2 0x08
67 #define NACL_THREAD_CONTEXT_OFFSET_S3 0x0c 67 #define NACL_THREAD_CONTEXT_OFFSET_S3 0x0c
68 #define NACL_THREAD_CONTEXT_OFFSET_S4 0x10 68 #define NACL_THREAD_CONTEXT_OFFSET_S4 0x10
69 #define NACL_THREAD_CONTEXT_OFFSET_S5 0x14 69 #define NACL_THREAD_CONTEXT_OFFSET_S5 0x14
70 #define NACL_THREAD_CONTEXT_OFFSET_S6 0x18 70 #define NACL_THREAD_CONTEXT_OFFSET_S6 0x18
71 #define NACL_THREAD_CONTEXT_OFFSET_S7 0x1c 71 #define NACL_THREAD_CONTEXT_OFFSET_S7 0x1c
72 #define NACL_THREAD_CONTEXT_OFFSET_T8 0x20 72 #define NACL_THREAD_CONTEXT_OFFSET_T8 0x20
73 #define NACL_THREAD_CONTEXT_OFFSET_GLOBAL_PTR 0x24 73 #define NACL_THREAD_CONTEXT_OFFSET_STACK_PTR 0x24
74 #define NACL_THREAD_CONTEXT_OFFSET_STACK_PTR 0x28 74 #define NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR 0x28
75 #define NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR 0x2c 75 #define NACL_THREAD_CONTEXT_OFFSET_PROG_CTR 0x2c
76 #define NACL_THREAD_CONTEXT_OFFSET_PROG_CTR 0x30 76 #define NACL_THREAD_CONTEXT_OFFSET_SYSRET 0x30
77 #define NACL_THREAD_CONTEXT_OFFSET_SYSRET 0x34 77 #define NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR 0x34
78 #define NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR 0x38 78 #define NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR 0x38
79 #define NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR 0x3c 79 #define NACL_THREAD_CONTEXT_OFFSET_TLS_IDX 0x3c
80 #define NACL_THREAD_CONTEXT_OFFSET_TLS_IDX 0x40 80 #define NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2 0x40
81 #define NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2 0x44
82 81
83 #if !defined(__ASSEMBLER__) 82 #if !defined(__ASSEMBLER__)
84 83
85 /* 84 /*
86 * This function exists as a function only because compile-time 85 * This function exists as a function only because compile-time
87 * assertions need to be inside a function. This function does not 86 * assertions need to be inside a function. This function does not
88 * need to be called for the assertions to be checked. 87 * need to be called for the assertions to be checked.
89 */ 88 */
90 static INLINE void NaClThreadContextOffsetCheck(void) { 89 static INLINE void NaClThreadContextOffsetCheck(void) {
91 int offset = 0; 90 int offset = 0;
92 91
93 #define NACL_CHECK_FIELD(offset_name, field) \ 92 #define NACL_CHECK_FIELD(offset_name, field) \
94 NACL_COMPILE_TIME_ASSERT(offset_name == \ 93 NACL_COMPILE_TIME_ASSERT(offset_name == \
95 offsetof(struct NaClThreadContext, field)); \ 94 offsetof(struct NaClThreadContext, field)); \
96 CHECK(offset == offset_name); \ 95 CHECK(offset == offset_name); \
97 offset += sizeof(((struct NaClThreadContext *) NULL)->field); 96 offset += sizeof(((struct NaClThreadContext *) NULL)->field);
98 97
99 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S0, s0); 98 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S0, s0);
100 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S1, s1); 99 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S1, s1);
101 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S2, s2); 100 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S2, s2);
102 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S3, s3); 101 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S3, s3);
103 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S4, s4); 102 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S4, s4);
104 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S5, s5); 103 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S5, s5);
105 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S6, s6); 104 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S6, s6);
106 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S7, s7); 105 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S7, s7);
107 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_T8, t8); 106 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_T8, t8);
108 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_GLOBAL_PTR, global_ptr);
109 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_STACK_PTR, stack_ptr); 107 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_STACK_PTR, stack_ptr);
110 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR, frame_ptr); 108 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR, frame_ptr);
111 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_PROG_CTR, prog_ctr); 109 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_PROG_CTR, prog_ctr);
112 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_SYSRET, sysret); 110 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_SYSRET, sysret);
113 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR, new_prog_ctr); 111 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR, new_prog_ctr);
114 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR, 112 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR,
115 trusted_stack_ptr); 113 trusted_stack_ptr);
116 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_IDX, tls_idx); 114 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_IDX, tls_idx);
117 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2, tls_value2); 115 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2, tls_value2);
118 CHECK(offset == sizeof(struct NaClThreadContext)); 116 CHECK(offset == sizeof(struct NaClThreadContext));
119 117
120 #undef NACL_CHECK_FIELD 118 #undef NACL_CHECK_FIELD
121
122 } 119 }
123 120
124 #endif /* !defined(__ASSEMBLER__) */ 121 #endif /* !defined(__ASSEMBLER__) */
125 122
126 #endif /* __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H___ */ 123 #endif /* __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H___ */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698