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

Side by Side Diff: mojo/nacl/mojo_syscall_internal.h

Issue 776643004: Update NaCl's generator to support new wait APIs. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: The Change Created 6 years 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_ 5 #ifndef MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_
6 #define MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_ 6 #define MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_
7 7
8 #include "native_client/src/trusted/service_runtime/nacl_copy.h" 8 #include "native_client/src/trusted/service_runtime/nacl_copy.h"
9 #include "native_client/src/trusted/service_runtime/sel_ldr.h" 9 #include "native_client/src/trusted/service_runtime/sel_ldr.h"
10 10
(...skipping 14 matching lines...) Expand all
25 static inline uintptr_t NaClUserToSysAddrArray( 25 static inline uintptr_t NaClUserToSysAddrArray(
26 struct NaClApp* nap, 26 struct NaClApp* nap,
27 uint32_t uaddr, 27 uint32_t uaddr,
28 size_t count, 28 size_t count,
29 size_t size) { 29 size_t size) {
30 // TODO(ncbray): overflow checking 30 // TODO(ncbray): overflow checking
31 size_t range = count * size; 31 size_t range = count * size;
32 return NaClUserToSysAddrRange(nap, uaddr, range); 32 return NaClUserToSysAddrRange(nap, uaddr, range);
33 } 33 }
34 34
35 void memcpy_volatile_out(void volatile* dst, const void* src, size_t n) {
Mark Seaborn 2014/12/08 22:24:12 Shouldn't this be static and/or inline, since it's
Nick Bray (chromium) 2014/12/09 22:14:31 Done.
36 char volatile* c_dst = reinterpret_cast<char volatile*>(dst);
37 const char* c_src = reinterpret_cast<const char*>(src);
38 for (size_t i = 0; i < n; i++) {
39 c_dst[i] = c_src[i];
40 }
41 }
42
35 template <typename T> bool ConvertScalarInput( 43 template <typename T> bool ConvertScalarInput(
36 struct NaClApp* nap, 44 struct NaClApp* nap,
37 uint32_t user_ptr, 45 uint32_t user_ptr,
38 T* value) { 46 T* value) {
39 if (user_ptr) { 47 if (user_ptr) {
40 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T)); 48 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T));
41 if (temp != kNaClBadAddress) { 49 if (temp != kNaClBadAddress) {
42 *value = *reinterpret_cast<T volatile*>(temp); 50 *value = *reinterpret_cast<T volatile*>(temp);
43 return true; 51 return true;
44 } 52 }
45 } 53 }
46 return false; 54 return false;
47 } 55 }
48 56
49 template <typename T> bool ConvertScalarOutput( 57 template <typename T> bool ConvertScalarOutput(
50 struct NaClApp* nap, 58 struct NaClApp* nap,
51 uint32_t user_ptr, 59 uint32_t user_ptr,
60 bool optional,
52 T volatile** sys_ptr) { 61 T volatile** sys_ptr) {
53 if (user_ptr) { 62 if (user_ptr) {
54 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T)); 63 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T));
55 if (temp != kNaClBadAddress) { 64 if (temp != kNaClBadAddress) {
56 *sys_ptr = reinterpret_cast<T volatile*>(temp); 65 *sys_ptr = reinterpret_cast<T volatile*>(temp);
57 return true; 66 return true;
67 } else if (optional) {
68 *sys_ptr = 0;
69 return true;
58 } 70 }
59 } 71 }
60 *sys_ptr = 0; // Paranoia. 72 *sys_ptr = 0; // Paranoia.
61 return false; 73 return false;
62 } 74 }
63 75
64 template <typename T> bool ConvertScalarInOut( 76 template <typename T> bool ConvertScalarInOut(
65 struct NaClApp* nap, 77 struct NaClApp* nap,
66 uint32_t user_ptr, 78 uint32_t user_ptr,
67 bool optional, 79 bool optional,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 132 }
121 } else if (optional) { 133 } else if (optional) {
122 *sys_ptr = 0; 134 *sys_ptr = 0;
123 return true; 135 return true;
124 } 136 }
125 return false; 137 return false;
126 } 138 }
127 139
128 // TODO(ncbray): size validation and complete copy. 140 // TODO(ncbray): size validation and complete copy.
129 // TODO(ncbray): ensure non-null / missized structs are covered by a test case. 141 // TODO(ncbray): ensure non-null / missized structs are covered by a test case.
130 template <typename T> bool ConvertStruct( 142 template <typename T> bool ConvertExtensibleStructInput(
131 struct NaClApp* nap, 143 struct NaClApp* nap,
132 uint32_t user_ptr, 144 uint32_t user_ptr,
133 bool optional, 145 bool optional,
134 T** sys_ptr) { 146 T** sys_ptr) {
135 if (user_ptr) { 147 if (user_ptr) {
136 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T)); 148 uintptr_t temp = NaClUserToSysAddrRange(nap, user_ptr, sizeof(T));
137 if (temp != kNaClBadAddress) { 149 if (temp != kNaClBadAddress) {
138 *sys_ptr = reinterpret_cast<T*>(temp); 150 *sys_ptr = reinterpret_cast<T*>(temp);
139 return true; 151 return true;
140 } 152 }
141 } else if (optional) { 153 } else if (optional) {
142 *sys_ptr = 0; 154 *sys_ptr = 0;
143 return true; 155 return true;
144 } 156 }
145 return false; 157 return false;
146 } 158 }
147 159
148 } // namespace 160 } // namespace
149 161
150 #endif // MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_ 162 #endif // MOJO_NACL_MOJO_SYSCALL_INTERNAL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698