NaCl: disable unimplmented Mojo APIs.
BUG=401761
R=jamesr@chromium.org
Review URL: https://codereview.chromium.org/988323004
diff --git a/mojo/public/platform/nacl/libmojo.cc b/mojo/public/platform/nacl/libmojo.cc
index 99eddf0..de0b495f 100644
--- a/mojo/public/platform/nacl/libmojo.cc
+++ b/mojo/public/platform/nacl/libmojo.cc
@@ -224,3 +224,4 @@
return MOJO_RESULT_INTERNAL;
return irt_mojo->_MojoGetInitialHandle(handle);
}
+
diff --git a/nacl_bindings/mojo_syscall.cc b/nacl_bindings/mojo_syscall.cc
index 34fcccb..4453381 100644
--- a/nacl_bindings/mojo_syscall.cc
+++ b/nacl_bindings/mojo_syscall.cc
@@ -122,78 +122,12 @@
return 0;
}
- case 2: {
- if (num_params != 7) {
- return -1;
- }
- MojoHandle buffer_handle_value;
- uint64_t offset_value;
- uint64_t num_bytes_value;
- void* volatile* buffer_ptr;
- void* buffer_value;
- MojoMapBufferFlags flags_value;
- MojoResult volatile* result_ptr;
- MojoResult result_value;
- {
- ScopedCopyLock copy_lock(nap);
- if (!ConvertScalarInput(nap, params[1], &buffer_handle_value)) {
- return -1;
- }
- if (!ConvertScalarInput(nap, params[2], &offset_value)) {
- return -1;
- }
- if (!ConvertScalarInput(nap, params[3], &num_bytes_value)) {
- return -1;
- }
- if (!ConvertScalarInOut(nap, params[4], false, &buffer_value,
- &buffer_ptr)) {
- return -1;
- }
- if (!ConvertScalarInput(nap, params[5], &flags_value)) {
- return -1;
- }
- if (!ConvertScalarOutput(nap, params[6], false, &result_ptr)) {
- return -1;
- }
- }
-
- result_value = MojoMapBuffer(buffer_handle_value, offset_value,
- num_bytes_value, &buffer_value, flags_value);
-
- {
- ScopedCopyLock copy_lock(nap);
- *buffer_ptr = buffer_value;
- *result_ptr = result_value;
- }
-
- return 0;
- }
- case 3: {
- if (num_params != 3) {
- return -1;
- }
- void* buffer_value;
- MojoResult volatile* result_ptr;
- MojoResult result_value;
- {
- ScopedCopyLock copy_lock(nap);
- if (!ConvertScalarInput(nap, params[1], &buffer_value)) {
- return -1;
- }
- if (!ConvertScalarOutput(nap, params[2], false, &result_ptr)) {
- return -1;
- }
- }
-
- result_value = MojoUnmapBuffer(buffer_value);
-
- {
- ScopedCopyLock copy_lock(nap);
- *result_ptr = result_value;
- }
-
- return 0;
- }
+ case 2:
+ fprintf(stderr, "MojoMapBuffer not implemented\n");
+ return -1;
+ case 3:
+ fprintf(stderr, "MojoUnmapBuffer not implemented\n");
+ return -1;
case 4: {
if (num_params != 5) {
return -1;
@@ -282,53 +216,9 @@
return 0;
}
- case 6: {
- if (num_params != 6) {
- return -1;
- }
- MojoHandle data_pipe_producer_handle_value;
- void* volatile* buffer_ptr;
- void* buffer_value;
- uint32_t volatile* buffer_num_bytes_ptr;
- uint32_t buffer_num_bytes_value;
- MojoWriteDataFlags flags_value;
- MojoResult volatile* result_ptr;
- MojoResult result_value;
- {
- ScopedCopyLock copy_lock(nap);
- if (!ConvertScalarInput(nap, params[1],
- &data_pipe_producer_handle_value)) {
- return -1;
- }
- if (!ConvertScalarInOut(nap, params[2], false, &buffer_value,
- &buffer_ptr)) {
- return -1;
- }
- if (!ConvertScalarInOut(nap, params[3], false, &buffer_num_bytes_value,
- &buffer_num_bytes_ptr)) {
- return -1;
- }
- if (!ConvertScalarInput(nap, params[4], &flags_value)) {
- return -1;
- }
- if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
- return -1;
- }
- }
-
- result_value =
- MojoBeginWriteData(data_pipe_producer_handle_value, &buffer_value,
- &buffer_num_bytes_value, flags_value);
-
- {
- ScopedCopyLock copy_lock(nap);
- *buffer_ptr = buffer_value;
- *buffer_num_bytes_ptr = buffer_num_bytes_value;
- *result_ptr = result_value;
- }
-
- return 0;
- }
+ case 6:
+ fprintf(stderr, "MojoBeginWriteData not implemented\n");
+ return -1;
case 7: {
if (num_params != 4) {
return -1;
@@ -405,53 +295,9 @@
return 0;
}
- case 9: {
- if (num_params != 6) {
- return -1;
- }
- MojoHandle data_pipe_consumer_handle_value;
- const void* volatile* buffer_ptr;
- const void* buffer_value;
- uint32_t volatile* buffer_num_bytes_ptr;
- uint32_t buffer_num_bytes_value;
- MojoReadDataFlags flags_value;
- MojoResult volatile* result_ptr;
- MojoResult result_value;
- {
- ScopedCopyLock copy_lock(nap);
- if (!ConvertScalarInput(nap, params[1],
- &data_pipe_consumer_handle_value)) {
- return -1;
- }
- if (!ConvertScalarInOut(nap, params[2], false, &buffer_value,
- &buffer_ptr)) {
- return -1;
- }
- if (!ConvertScalarInOut(nap, params[3], false, &buffer_num_bytes_value,
- &buffer_num_bytes_ptr)) {
- return -1;
- }
- if (!ConvertScalarInput(nap, params[4], &flags_value)) {
- return -1;
- }
- if (!ConvertScalarOutput(nap, params[5], false, &result_ptr)) {
- return -1;
- }
- }
-
- result_value =
- MojoBeginReadData(data_pipe_consumer_handle_value, &buffer_value,
- &buffer_num_bytes_value, flags_value);
-
- {
- ScopedCopyLock copy_lock(nap);
- *buffer_ptr = buffer_value;
- *buffer_num_bytes_ptr = buffer_num_bytes_value;
- *result_ptr = result_value;
- }
-
- return 0;
- }
+ case 9:
+ fprintf(stderr, "MojoBeginReadData not implemented\n");
+ return -1;
case 10: {
if (num_params != 4) {
return -1;
diff --git a/nacl_bindings_generator/generate_nacl_bindings.py b/nacl_bindings_generator/generate_nacl_bindings.py
index e06ffa9..d374823 100755
--- a/nacl_bindings_generator/generate_nacl_bindings.py
+++ b/nacl_bindings_generator/generate_nacl_bindings.py
@@ -307,11 +307,27 @@
code.PushMargin()
for f in functions:
+ is_implemented = True
+
+ # Mojo API calls that take or return pointers are currently not supported.
+ # The underlying Mojo implementation is unaware of NaCl's address space. In
+ # addition, if we pass blindly pass the parameters through to the underlying
+ # Mojo API, memory corruption can result from pointer-size mistmatches.
+ for p in f.params:
+ if p.base_type.endswith("*"):
+ is_implemented = False
+
impls = [ImplForParam(p) for p in f.params]
impls.append(ImplForParam(f.result_param))
code << 'case %d:' % f.uid
+ if not is_implemented:
+ with code.Indent():
+ code << 'fprintf(stderr, "%s not implemented\\n");' % f.name
+ code << 'return -1;'
+ continue
+
code.PushMargin()
code << '{'