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
3 // found in the LICENSE file.
5 // WARNING this file was generated by generate_nacl_bindings.py
6 // Do not edit by hand.
8 #include "nacl_bindings/mojo_syscall.h"
12 #include "mojo/public/c/system/core.h"
13 #include "nacl_bindings/mojo_syscall_internal.h"
14 #include "native_client/src/public/chrome_main.h"
15 #include "native_client/src/public/nacl_app.h"
16 #include "native_client/src/trusted/desc/nacl_desc_custom.h"
18 MojoHandle g_mojo_handle
= MOJO_HANDLE_INVALID
;
22 MojoResult
_MojoGetInitialHandle(MojoHandle
* handle
) {
23 *handle
= g_mojo_handle
;
24 return MOJO_RESULT_OK
;
27 void MojoDescDestroy(void* handle
) {
30 ssize_t
MojoDescSendMsg(void* handle
,
31 const struct NaClImcTypedMsgHdr
* msg
,
33 struct NaClApp
* nap
= static_cast<struct NaClApp
*>(handle
);
35 if (msg
->iov_length
!= 1 || msg
->ndesc_length
!= 0) {
39 uint32_t volatile* params
= static_cast<uint32_t volatile*>(msg
->iov
[0].base
);
40 size_t num_params
= msg
->iov
[0].length
/ sizeof(*params
);
46 uint32_t msg_type
= params
[0];
49 if (num_params
!= 5) {
52 const struct MojoCreateSharedBufferOptions
* options
;
53 uint64_t num_bytes_value
;
54 MojoHandle
volatile* shared_buffer_handle_ptr
;
55 MojoHandle shared_buffer_handle_value
;
56 MojoResult
volatile* result_ptr
;
57 MojoResult result_value
;
59 ScopedCopyLock
copy_lock(nap
);
60 if (!ConvertExtensibleStructInput(nap
, params
[1], true, &options
)) {
63 if (!ConvertScalarInput(nap
, params
[2], &num_bytes_value
)) {
66 if (!ConvertScalarInOut(nap
, params
[3], false,
67 &shared_buffer_handle_value
,
68 &shared_buffer_handle_ptr
)) {
71 if (!ConvertScalarOutput(nap
, params
[4], false, &result_ptr
)) {
76 result_value
= MojoCreateSharedBuffer(options
, num_bytes_value
,
77 &shared_buffer_handle_value
);
80 ScopedCopyLock
copy_lock(nap
);
81 *shared_buffer_handle_ptr
= shared_buffer_handle_value
;
82 *result_ptr
= result_value
;
88 if (num_params
!= 5) {
91 MojoHandle buffer_handle_value
;
92 const struct MojoDuplicateBufferHandleOptions
* options
;
93 MojoHandle
volatile* new_buffer_handle_ptr
;
94 MojoHandle new_buffer_handle_value
;
95 MojoResult
volatile* result_ptr
;
96 MojoResult result_value
;
98 ScopedCopyLock
copy_lock(nap
);
99 if (!ConvertScalarInput(nap
, params
[1], &buffer_handle_value
)) {
102 if (!ConvertExtensibleStructInput(nap
, params
[2], true, &options
)) {
105 if (!ConvertScalarInOut(nap
, params
[3], false, &new_buffer_handle_value
,
106 &new_buffer_handle_ptr
)) {
109 if (!ConvertScalarOutput(nap
, params
[4], false, &result_ptr
)) {
114 result_value
= MojoDuplicateBufferHandle(buffer_handle_value
, options
,
115 &new_buffer_handle_value
);
118 ScopedCopyLock
copy_lock(nap
);
119 *new_buffer_handle_ptr
= new_buffer_handle_value
;
120 *result_ptr
= result_value
;
126 fprintf(stderr
, "MojoMapBuffer not implemented\n");
129 fprintf(stderr
, "MojoUnmapBuffer not implemented\n");
132 if (num_params
!= 5) {
135 const struct MojoCreateDataPipeOptions
* options
;
136 MojoHandle
volatile* data_pipe_producer_handle_ptr
;
137 MojoHandle data_pipe_producer_handle_value
;
138 MojoHandle
volatile* data_pipe_consumer_handle_ptr
;
139 MojoHandle data_pipe_consumer_handle_value
;
140 MojoResult
volatile* result_ptr
;
141 MojoResult result_value
;
143 ScopedCopyLock
copy_lock(nap
);
144 if (!ConvertExtensibleStructInput(nap
, params
[1], true, &options
)) {
147 if (!ConvertScalarInOut(nap
, params
[2], false,
148 &data_pipe_producer_handle_value
,
149 &data_pipe_producer_handle_ptr
)) {
152 if (!ConvertScalarInOut(nap
, params
[3], false,
153 &data_pipe_consumer_handle_value
,
154 &data_pipe_consumer_handle_ptr
)) {
157 if (!ConvertScalarOutput(nap
, params
[4], false, &result_ptr
)) {
163 MojoCreateDataPipe(options
, &data_pipe_producer_handle_value
,
164 &data_pipe_consumer_handle_value
);
167 ScopedCopyLock
copy_lock(nap
);
168 *data_pipe_producer_handle_ptr
= data_pipe_producer_handle_value
;
169 *data_pipe_consumer_handle_ptr
= data_pipe_consumer_handle_value
;
170 *result_ptr
= result_value
;
176 if (num_params
!= 6) {
179 MojoHandle data_pipe_producer_handle_value
;
180 const void* elements
;
181 uint32_t volatile* num_bytes_ptr
;
182 uint32_t num_bytes_value
;
183 MojoWriteDataFlags flags_value
;
184 MojoResult
volatile* result_ptr
;
185 MojoResult result_value
;
187 ScopedCopyLock
copy_lock(nap
);
188 if (!ConvertScalarInput(nap
, params
[1],
189 &data_pipe_producer_handle_value
)) {
192 if (!ConvertScalarInOut(nap
, params
[3], false, &num_bytes_value
,
196 if (!ConvertScalarInput(nap
, params
[4], &flags_value
)) {
199 if (!ConvertScalarOutput(nap
, params
[5], false, &result_ptr
)) {
202 if (!ConvertArray(nap
, params
[2], num_bytes_value
, 1, false,
208 result_value
= MojoWriteData(data_pipe_producer_handle_value
, elements
,
209 &num_bytes_value
, flags_value
);
212 ScopedCopyLock
copy_lock(nap
);
213 *num_bytes_ptr
= num_bytes_value
;
214 *result_ptr
= result_value
;
220 fprintf(stderr
, "MojoBeginWriteData not implemented\n");
223 if (num_params
!= 4) {
226 MojoHandle data_pipe_producer_handle_value
;
227 uint32_t num_bytes_written_value
;
228 MojoResult
volatile* result_ptr
;
229 MojoResult result_value
;
231 ScopedCopyLock
copy_lock(nap
);
232 if (!ConvertScalarInput(nap
, params
[1],
233 &data_pipe_producer_handle_value
)) {
236 if (!ConvertScalarInput(nap
, params
[2], &num_bytes_written_value
)) {
239 if (!ConvertScalarOutput(nap
, params
[3], false, &result_ptr
)) {
244 result_value
= MojoEndWriteData(data_pipe_producer_handle_value
,
245 num_bytes_written_value
);
248 ScopedCopyLock
copy_lock(nap
);
249 *result_ptr
= result_value
;
255 if (num_params
!= 6) {
258 MojoHandle data_pipe_consumer_handle_value
;
260 uint32_t volatile* num_bytes_ptr
;
261 uint32_t num_bytes_value
;
262 MojoReadDataFlags flags_value
;
263 MojoResult
volatile* result_ptr
;
264 MojoResult result_value
;
266 ScopedCopyLock
copy_lock(nap
);
267 if (!ConvertScalarInput(nap
, params
[1],
268 &data_pipe_consumer_handle_value
)) {
271 if (!ConvertScalarInOut(nap
, params
[3], false, &num_bytes_value
,
275 if (!ConvertScalarInput(nap
, params
[4], &flags_value
)) {
278 if (!ConvertScalarOutput(nap
, params
[5], false, &result_ptr
)) {
281 if (!ConvertArray(nap
, params
[2], num_bytes_value
, 1, false,
287 result_value
= MojoReadData(data_pipe_consumer_handle_value
, elements
,
288 &num_bytes_value
, flags_value
);
291 ScopedCopyLock
copy_lock(nap
);
292 *num_bytes_ptr
= num_bytes_value
;
293 *result_ptr
= result_value
;
299 fprintf(stderr
, "MojoBeginReadData not implemented\n");
302 if (num_params
!= 4) {
305 MojoHandle data_pipe_consumer_handle_value
;
306 uint32_t num_bytes_read_value
;
307 MojoResult
volatile* result_ptr
;
308 MojoResult result_value
;
310 ScopedCopyLock
copy_lock(nap
);
311 if (!ConvertScalarInput(nap
, params
[1],
312 &data_pipe_consumer_handle_value
)) {
315 if (!ConvertScalarInput(nap
, params
[2], &num_bytes_read_value
)) {
318 if (!ConvertScalarOutput(nap
, params
[3], false, &result_ptr
)) {
323 result_value
= MojoEndReadData(data_pipe_consumer_handle_value
,
324 num_bytes_read_value
);
327 ScopedCopyLock
copy_lock(nap
);
328 *result_ptr
= result_value
;
334 if (num_params
!= 2) {
337 MojoTimeTicks
volatile* result_ptr
;
338 MojoTimeTicks result_value
;
340 ScopedCopyLock
copy_lock(nap
);
341 if (!ConvertScalarOutput(nap
, params
[1], false, &result_ptr
)) {
346 result_value
= MojoGetTimeTicksNow();
349 ScopedCopyLock
copy_lock(nap
);
350 *result_ptr
= result_value
;
356 if (num_params
!= 3) {
359 MojoHandle handle_value
;
360 MojoResult
volatile* result_ptr
;
361 MojoResult result_value
;
363 ScopedCopyLock
copy_lock(nap
);
364 if (!ConvertScalarInput(nap
, params
[1], &handle_value
)) {
367 if (!ConvertScalarOutput(nap
, params
[2], false, &result_ptr
)) {
372 result_value
= MojoClose(handle_value
);
375 ScopedCopyLock
copy_lock(nap
);
376 *result_ptr
= result_value
;
382 if (num_params
!= 6) {
385 MojoHandle handle_value
;
386 MojoHandleSignals signals_value
;
387 MojoDeadline deadline_value
;
388 MojoHandleSignalsState
volatile* signals_state_ptr
;
389 MojoHandleSignalsState signals_state_value
;
390 MojoResult
volatile* result_ptr
;
391 MojoResult result_value
;
393 ScopedCopyLock
copy_lock(nap
);
394 if (!ConvertScalarInput(nap
, params
[1], &handle_value
)) {
397 if (!ConvertScalarInput(nap
, params
[2], &signals_value
)) {
400 if (!ConvertScalarInput(nap
, params
[3], &deadline_value
)) {
403 if (!ConvertScalarOutput(nap
, params
[4], true, &signals_state_ptr
)) {
406 if (!ConvertScalarOutput(nap
, params
[5], false, &result_ptr
)) {
411 result_value
= MojoWait(handle_value
, signals_value
, deadline_value
,
412 signals_state_ptr
? &signals_state_value
: NULL
);
415 ScopedCopyLock
copy_lock(nap
);
416 if (signals_state_ptr
!= NULL
) {
417 memcpy_volatile_out(signals_state_ptr
, &signals_state_value
,
418 sizeof(MojoHandleSignalsState
));
420 *result_ptr
= result_value
;
426 if (num_params
!= 8) {
429 const MojoHandle
* handles
;
430 const MojoHandleSignals
* signals
;
431 uint32_t num_handles_value
;
432 MojoDeadline deadline_value
;
433 uint32_t volatile* result_index_ptr
;
434 uint32_t result_index_value
;
435 struct MojoHandleSignalsState
* signals_states
;
436 MojoResult
volatile* result_ptr
;
437 MojoResult result_value
;
439 ScopedCopyLock
copy_lock(nap
);
440 if (!ConvertScalarInput(nap
, params
[3], &num_handles_value
)) {
443 if (!ConvertScalarInput(nap
, params
[4], &deadline_value
)) {
446 if (!ConvertScalarInOut(nap
, params
[5], true, &result_index_value
,
447 &result_index_ptr
)) {
450 if (!ConvertScalarOutput(nap
, params
[7], false, &result_ptr
)) {
453 if (!ConvertArray(nap
, params
[1], num_handles_value
, sizeof(*handles
),
457 if (!ConvertArray(nap
, params
[2], num_handles_value
, sizeof(*signals
),
461 if (!ConvertArray(nap
, params
[6], num_handles_value
,
462 sizeof(*signals_states
), true, &signals_states
)) {
467 result_value
= MojoWaitMany(
468 handles
, signals
, num_handles_value
, deadline_value
,
469 result_index_ptr
? &result_index_value
: NULL
, signals_states
);
472 ScopedCopyLock
copy_lock(nap
);
473 if (result_index_ptr
!= NULL
) {
474 *result_index_ptr
= result_index_value
;
476 *result_ptr
= result_value
;
482 if (num_params
!= 5) {
485 const struct MojoCreateMessagePipeOptions
* options
;
486 MojoHandle
volatile* message_pipe_handle0_ptr
;
487 MojoHandle message_pipe_handle0_value
;
488 MojoHandle
volatile* message_pipe_handle1_ptr
;
489 MojoHandle message_pipe_handle1_value
;
490 MojoResult
volatile* result_ptr
;
491 MojoResult result_value
;
493 ScopedCopyLock
copy_lock(nap
);
494 if (!ConvertExtensibleStructInput(nap
, params
[1], true, &options
)) {
497 if (!ConvertScalarInOut(nap
, params
[2], false,
498 &message_pipe_handle0_value
,
499 &message_pipe_handle0_ptr
)) {
502 if (!ConvertScalarInOut(nap
, params
[3], false,
503 &message_pipe_handle1_value
,
504 &message_pipe_handle1_ptr
)) {
507 if (!ConvertScalarOutput(nap
, params
[4], false, &result_ptr
)) {
512 result_value
= MojoCreateMessagePipe(options
, &message_pipe_handle0_value
,
513 &message_pipe_handle1_value
);
516 ScopedCopyLock
copy_lock(nap
);
517 *message_pipe_handle0_ptr
= message_pipe_handle0_value
;
518 *message_pipe_handle1_ptr
= message_pipe_handle1_value
;
519 *result_ptr
= result_value
;
525 if (num_params
!= 8) {
528 MojoHandle message_pipe_handle_value
;
530 uint32_t num_bytes_value
;
531 const MojoHandle
* handles
;
532 uint32_t num_handles_value
;
533 MojoWriteMessageFlags flags_value
;
534 MojoResult
volatile* result_ptr
;
535 MojoResult result_value
;
537 ScopedCopyLock
copy_lock(nap
);
538 if (!ConvertScalarInput(nap
, params
[1], &message_pipe_handle_value
)) {
541 if (!ConvertScalarInput(nap
, params
[3], &num_bytes_value
)) {
544 if (!ConvertScalarInput(nap
, params
[5], &num_handles_value
)) {
547 if (!ConvertScalarInput(nap
, params
[6], &flags_value
)) {
550 if (!ConvertScalarOutput(nap
, params
[7], false, &result_ptr
)) {
553 if (!ConvertArray(nap
, params
[2], num_bytes_value
, 1, true, &bytes
)) {
556 if (!ConvertArray(nap
, params
[4], num_handles_value
, sizeof(*handles
),
563 MojoWriteMessage(message_pipe_handle_value
, bytes
, num_bytes_value
,
564 handles
, num_handles_value
, flags_value
);
567 ScopedCopyLock
copy_lock(nap
);
568 *result_ptr
= result_value
;
574 if (num_params
!= 8) {
577 MojoHandle message_pipe_handle_value
;
579 uint32_t volatile* num_bytes_ptr
;
580 uint32_t num_bytes_value
;
582 uint32_t volatile* num_handles_ptr
;
583 uint32_t num_handles_value
;
584 MojoReadMessageFlags flags_value
;
585 MojoResult
volatile* result_ptr
;
586 MojoResult result_value
;
588 ScopedCopyLock
copy_lock(nap
);
589 if (!ConvertScalarInput(nap
, params
[1], &message_pipe_handle_value
)) {
592 if (!ConvertScalarInOut(nap
, params
[3], true, &num_bytes_value
,
596 if (!ConvertScalarInOut(nap
, params
[5], true, &num_handles_value
,
600 if (!ConvertScalarInput(nap
, params
[6], &flags_value
)) {
603 if (!ConvertScalarOutput(nap
, params
[7], false, &result_ptr
)) {
606 if (!ConvertArray(nap
, params
[2], num_bytes_value
, 1, true, &bytes
)) {
609 if (!ConvertArray(nap
, params
[4], num_handles_value
, sizeof(*handles
),
615 result_value
= MojoReadMessage(
616 message_pipe_handle_value
, bytes
,
617 num_bytes_ptr
? &num_bytes_value
: NULL
, handles
,
618 num_handles_ptr
? &num_handles_value
: NULL
, flags_value
);
621 ScopedCopyLock
copy_lock(nap
);
622 if (num_bytes_ptr
!= NULL
) {
623 *num_bytes_ptr
= num_bytes_value
;
625 if (num_handles_ptr
!= NULL
) {
626 *num_handles_ptr
= num_handles_value
;
628 *result_ptr
= result_value
;
634 if (num_params
!= 3) {
637 MojoHandle
volatile* handle_ptr
;
638 MojoHandle handle_value
;
639 MojoResult
volatile* result_ptr
;
640 MojoResult result_value
;
642 ScopedCopyLock
copy_lock(nap
);
643 if (!ConvertScalarInOut(nap
, params
[1], false, &handle_value
,
647 if (!ConvertScalarOutput(nap
, params
[2], false, &result_ptr
)) {
652 result_value
= _MojoGetInitialHandle(&handle_value
);
655 ScopedCopyLock
copy_lock(nap
);
656 *handle_ptr
= handle_value
;
657 *result_ptr
= result_value
;
667 ssize_t
MojoDescRecvMsg(void* handle
,
668 struct NaClImcTypedMsgHdr
* msg
,
673 struct NaClDesc
* MakeMojoDesc(struct NaClApp
* nap
) {
674 struct NaClDescCustomFuncs funcs
= NACL_DESC_CUSTOM_FUNCS_INITIALIZER
;
675 funcs
.Destroy
= MojoDescDestroy
;
676 funcs
.SendMsg
= MojoDescSendMsg
;
677 funcs
.RecvMsg
= MojoDescRecvMsg
;
678 return NaClDescMakeCustomDesc(nap
, &funcs
);
681 void MojoDisabledDescDestroy(void* handle
) {
684 ssize_t
MojoDisabledDescSendMsg(void* handle
,
685 const struct NaClImcTypedMsgHdr
* msg
,
687 fprintf(stderr
, "Mojo is not currently supported.");
691 ssize_t
MojoDisabledDescRecvMsg(void* handle
,
692 struct NaClImcTypedMsgHdr
* msg
,
694 fprintf(stderr
, "Mojo is not currently supported.");
698 struct NaClDesc
* MakeDisabledMojoDesc(struct NaClApp
* nap
) {
699 struct NaClDescCustomFuncs funcs
= NACL_DESC_CUSTOM_FUNCS_INITIALIZER
;
700 funcs
.Destroy
= MojoDisabledDescDestroy
;
701 funcs
.SendMsg
= MojoDisabledDescSendMsg
;
702 funcs
.RecvMsg
= MojoDisabledDescRecvMsg
;
703 return NaClDescMakeCustomDesc(nap
, &funcs
);
708 // The value for this FD must not conflict with uses inside Chromium. However,
709 // mojo/nacl doesn't depend on any Chromium headers, so we can't use a #define
711 #define NACL_MOJO_DESC (NACL_CHROME_DESC_BASE + 3)
713 void InjectMojo(struct NaClApp
* nap
) {
714 NaClAppSetDesc(nap
, NACL_MOJO_DESC
, MakeMojoDesc(nap
));
715 g_mojo_handle
= MOJO_HANDLE_INVALID
;
718 void InjectMojo(struct NaClApp
* nap
, MojoHandle handle
) {
719 NaClAppSetDesc(nap
, NACL_MOJO_DESC
, MakeMojoDesc(nap
));
720 g_mojo_handle
= handle
;
723 void InjectDisabledMojo(struct NaClApp
* nap
) {
724 NaClAppSetDesc(nap
, NACL_MOJO_DESC
, MakeDisabledMojoDesc(nap
));