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

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: Update Copyright headers. Remote presubmit complained about it. 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 (c) 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 be
4 * be found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 /* 7 /*
8 * NaCl Secure Runtime 8 * NaCl Secure Runtime
9 */ 9 */
10 10
11 #ifndef __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H__ 11 #ifndef __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H__
12 #define __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H__ 1 12 #define __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H__ 1
13 13
14 #if !defined(__ASSEMBLER__) 14 #if !defined(__ASSEMBLER__)
15 15
16 #include <stddef.h> 16 #include <stddef.h>
17 17
18 #include "native_client/src/include/nacl_macros.h" 18 #include "native_client/src/include/nacl_macros.h"
19 #include "native_client/src/include/portability.h" 19 #include "native_client/src/include/portability.h"
20 #include "native_client/src/shared/platform/nacl_check.h" 20 #include "native_client/src/shared/platform/nacl_check.h"
21 21
22 uint32_t NaClGetStackPtr(void); 22 uint32_t NaClGetStackPtr(void);
23 uint32_t NaClGetGlobalPtr(void);
24 23
25 typedef uint32_t nacl_reg_t; 24 typedef uint32_t nacl_reg_t;
26 25
27 #define NACL_PRIdNACL_REG NACL_PRId32 26 #define NACL_PRIdNACL_REG NACL_PRId32
28 #define NACL_PRIiNACL_REG NACL_PRIi32 27 #define NACL_PRIiNACL_REG NACL_PRIi32
29 #define NACL_PRIoNACL_REG NACL_PRIo32 28 #define NACL_PRIoNACL_REG NACL_PRIo32
30 #define NACL_PRIuNACL_REG NACL_PRIu32 29 #define NACL_PRIuNACL_REG NACL_PRIu32
31 #define NACL_PRIxNACL_REG NACL_PRIx32 30 #define NACL_PRIxNACL_REG NACL_PRIx32
32 #define NACL_PRIXNACL_REG NACL_PRIX32 31 #define NACL_PRIXNACL_REG NACL_PRIX32
33 32
34 /* 33 /*
35 * NOTE: This struct needs to be synchronized with NACL_CALLEE_SAVE_LIST 34 * NOTE: This struct needs to be synchronized with NACL_CALLEE_SAVE_LIST
36 */ 35 */
37 36
38 struct NaClThreadContext { 37 struct NaClThreadContext {
39 nacl_reg_t s0, s1, s2, s3, s4, s5, s6, s7, t8; 38 nacl_reg_t s0, s1, s2, s3, s4, s5, s6, s7, t8;
40 /* 0 4 8 c 10 14 18 1c 20 */ 39 /* 0 4 8 c 10 14 18 1c 20 */
41 40
42 nacl_reg_t global_ptr, stack_ptr, frame_ptr, prog_ctr; 41 nacl_reg_t stack_ptr, frame_ptr, prog_ctr;
43 /* 24 28 2c 30 */ 42 /* 24 28 2c */
44 43
45 /* 44 /*
46 * sys_ret and new_prog_ctr are not a part of the thread's register set, 45 * 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 46 * but are needed by NaClSwitch. By including them here, the two
48 * use the same interface. 47 * use the same interface.
49 */ 48 */
50 uint32_t sysret; 49 uint32_t sysret;
50 /* 30 */
51 uint32_t new_prog_ctr;
51 /* 34 */ 52 /* 34 */
52 uint32_t new_prog_ctr; 53 uint32_t trusted_stack_ptr;
53 /* 38 */ 54 /* 38 */
54 uint32_t trusted_stack_ptr; 55 uint32_t tls_idx;
55 /* 3c */ 56 /* 3c */
56 uint32_t tls_idx; 57 uint32_t tls_value2;
57 /* 40 */ 58 /* 40 */
58 uint32_t tls_value2;
59 /* 44 */
60 }; 59 };
61 60
62 #endif /* !defined(__ASSEMBLER__) */ 61 #endif /* !defined(__ASSEMBLER__) */
63 62
64 #define NACL_THREAD_CONTEXT_OFFSET_S0 0x00 63 #define NACL_THREAD_CONTEXT_OFFSET_S0 0x00
65 #define NACL_THREAD_CONTEXT_OFFSET_S1 0x04 64 #define NACL_THREAD_CONTEXT_OFFSET_S1 0x04
66 #define NACL_THREAD_CONTEXT_OFFSET_S2 0x08 65 #define NACL_THREAD_CONTEXT_OFFSET_S2 0x08
67 #define NACL_THREAD_CONTEXT_OFFSET_S3 0x0c 66 #define NACL_THREAD_CONTEXT_OFFSET_S3 0x0c
68 #define NACL_THREAD_CONTEXT_OFFSET_S4 0x10 67 #define NACL_THREAD_CONTEXT_OFFSET_S4 0x10
69 #define NACL_THREAD_CONTEXT_OFFSET_S5 0x14 68 #define NACL_THREAD_CONTEXT_OFFSET_S5 0x14
70 #define NACL_THREAD_CONTEXT_OFFSET_S6 0x18 69 #define NACL_THREAD_CONTEXT_OFFSET_S6 0x18
71 #define NACL_THREAD_CONTEXT_OFFSET_S7 0x1c 70 #define NACL_THREAD_CONTEXT_OFFSET_S7 0x1c
72 #define NACL_THREAD_CONTEXT_OFFSET_T8 0x20 71 #define NACL_THREAD_CONTEXT_OFFSET_T8 0x20
73 #define NACL_THREAD_CONTEXT_OFFSET_GLOBAL_PTR 0x24 72 #define NACL_THREAD_CONTEXT_OFFSET_STACK_PTR 0x24
74 #define NACL_THREAD_CONTEXT_OFFSET_STACK_PTR 0x28 73 #define NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR 0x28
75 #define NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR 0x2c 74 #define NACL_THREAD_CONTEXT_OFFSET_PROG_CTR 0x2c
76 #define NACL_THREAD_CONTEXT_OFFSET_PROG_CTR 0x30 75 #define NACL_THREAD_CONTEXT_OFFSET_SYSRET 0x30
77 #define NACL_THREAD_CONTEXT_OFFSET_SYSRET 0x34 76 #define NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR 0x34
78 #define NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR 0x38 77 #define NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR 0x38
79 #define NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR 0x3c 78 #define NACL_THREAD_CONTEXT_OFFSET_TLS_IDX 0x3c
80 #define NACL_THREAD_CONTEXT_OFFSET_TLS_IDX 0x40 79 #define NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2 0x40
81 #define NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2 0x44
82 80
83 #if !defined(__ASSEMBLER__) 81 #if !defined(__ASSEMBLER__)
84 82
85 /* 83 /*
86 * This function exists as a function only because compile-time 84 * This function exists as a function only because compile-time
87 * assertions need to be inside a function. This function does not 85 * assertions need to be inside a function. This function does not
88 * need to be called for the assertions to be checked. 86 * need to be called for the assertions to be checked.
89 */ 87 */
90 static INLINE void NaClThreadContextOffsetCheck(void) { 88 static INLINE void NaClThreadContextOffsetCheck(void) {
91 int offset = 0; 89 int offset = 0;
92 90
93 #define NACL_CHECK_FIELD(offset_name, field) \ 91 #define NACL_CHECK_FIELD(offset_name, field) \
94 NACL_COMPILE_TIME_ASSERT(offset_name == \ 92 NACL_COMPILE_TIME_ASSERT(offset_name == \
95 offsetof(struct NaClThreadContext, field)); \ 93 offsetof(struct NaClThreadContext, field)); \
96 CHECK(offset == offset_name); \ 94 CHECK(offset == offset_name); \
97 offset += sizeof(((struct NaClThreadContext *) NULL)->field); 95 offset += sizeof(((struct NaClThreadContext *) NULL)->field);
98 96
99 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S0, s0); 97 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S0, s0);
100 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S1, s1); 98 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S1, s1);
101 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S2, s2); 99 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S2, s2);
102 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S3, s3); 100 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S3, s3);
103 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S4, s4); 101 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S4, s4);
104 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S5, s5); 102 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S5, s5);
105 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S6, s6); 103 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S6, s6);
106 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S7, s7); 104 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_S7, s7);
107 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_T8, t8); 105 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); 106 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_STACK_PTR, stack_ptr);
110 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR, frame_ptr); 107 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_FRAME_PTR, frame_ptr);
111 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_PROG_CTR, prog_ctr); 108 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_PROG_CTR, prog_ctr);
112 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_SYSRET, sysret); 109 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_SYSRET, sysret);
113 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR, new_prog_ctr); 110 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_NEW_PROG_CTR, new_prog_ctr);
114 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR, 111 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TRUSTED_STACK_PTR,
115 trusted_stack_ptr); 112 trusted_stack_ptr);
116 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_IDX, tls_idx); 113 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_IDX, tls_idx);
117 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2, tls_value2); 114 NACL_CHECK_FIELD(NACL_THREAD_CONTEXT_OFFSET_TLS_VALUE2, tls_value2);
118 CHECK(offset == sizeof(struct NaClThreadContext)); 115 CHECK(offset == sizeof(struct NaClThreadContext));
119 116
120 #undef NACL_CHECK_FIELD 117 #undef NACL_CHECK_FIELD
121
122 } 118 }
123 119
124 #endif /* !defined(__ASSEMBLER__) */ 120 #endif /* !defined(__ASSEMBLER__) */
125 121
126 #endif /* __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H___ */ 122 #endif /* __NATIVE_CLIENT_SERVICE_RUNTIME_ARCH_MIPS_SEL_RT_H___ */
OLDNEW
« no previous file with comments | « src/trusted/service_runtime/arch/mips/nacl_syscall.S ('k') | src/trusted/service_runtime/arch/mips/sel_rt.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698