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

Side by Side Diff: mojo/nacl/mojo_interface_nacl_nonsfi.cc

Issue 1323823002: Adding nonsfi content handler (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Responding to Code Review Created 5 years, 3 months 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include <fcntl.h> 5 #include "mojo_interface_nacl_nonsfi.h"
6 #include <iostream>
7
8 #include "mojo/edk/embedder/embedder.h"
9 #include "mojo/edk/embedder/simple_platform_support.h"
10 #include "mojo/public/platform/nacl/mojo_irt.h"
11 #include "native_client/src/public/irt_core.h"
12 #include "native_client/src/public/nonsfi/elf_loader.h"
13 6
14 namespace { 7 namespace {
15 8
9 MojoHandle g_mojo_handle = MOJO_HANDLE_INVALID;
Sean Klein 2015/09/01 20:24:48 Is there potentially an issue with having a single
Mark Seaborn 2015/09/01 21:05:46 Yes. We don't really want to run multiple nexes i
Sean Klein 2015/09/01 22:55:27 Acknowledged.
10
11 MojoResult _MojoGetInitialHandle(MojoHandle* handle) {
12 // TODO(smklein): Test this handle
Mark Seaborn 2015/09/01 21:05:46 Nit: I would avoid TODOs where the TODO would be a
Sean Klein 2015/09/01 22:55:26 Done.
13 *handle = g_mojo_handle;
14 return MOJO_RESULT_OK;
15 }
16
17 } // namespace
18
19 void mojo_set_initial_handle(MojoHandle handle) {
20 g_mojo_handle = handle;
21 }
22
16 const struct nacl_irt_mojo kIrtMojo = { 23 const struct nacl_irt_mojo kIrtMojo = {
17 MojoCreateSharedBuffer, 24 MojoCreateSharedBuffer,
18 MojoDuplicateBufferHandle, 25 MojoDuplicateBufferHandle,
19 MojoMapBuffer, 26 MojoMapBuffer,
20 MojoUnmapBuffer, 27 MojoUnmapBuffer,
21 MojoCreateDataPipe, 28 MojoCreateDataPipe,
22 MojoWriteData, 29 MojoWriteData,
23 MojoBeginWriteData, 30 MojoBeginWriteData,
24 MojoEndWriteData, 31 MojoEndWriteData,
25 MojoReadData, 32 MojoReadData,
26 MojoBeginReadData, 33 MojoBeginReadData,
27 MojoEndReadData, 34 MojoEndReadData,
28 MojoGetTimeTicksNow, 35 MojoGetTimeTicksNow,
29 MojoClose, 36 MojoClose,
30 MojoWait, 37 MojoWait,
31 MojoWaitMany, 38 MojoWaitMany,
32 MojoCreateMessagePipe, 39 MojoCreateMessagePipe,
33 MojoWriteMessage, 40 MojoWriteMessage,
34 MojoReadMessage, 41 MojoReadMessage,
35 nullptr, // TODO(smklein): Add _MojoGetInitialHandle. 42 _MojoGetInitialHandle,
36 }; 43 };
37 44
38 const struct nacl_irt_interface kIrtInterfaces[] = { 45 const struct nacl_irt_interface kIrtInterfaces[] = {
39 { NACL_IRT_MOJO_v0_1, &kIrtMojo, sizeof(kIrtMojo), nullptr } 46 { NACL_IRT_MOJO_v0_1, &kIrtMojo, sizeof(kIrtMojo), nullptr }
40 }; 47 };
41 48
42 size_t mojo_irt_nonsfi_query(const char* interface_ident, 49 size_t mojo_irt_nonsfi_query(const char* interface_ident,
43 void* table, size_t tablesize) { 50 void* table, size_t tablesize) {
44 size_t result = nacl_irt_query_list(interface_ident, 51 size_t result = nacl_irt_query_list(interface_ident,
45 table, 52 table,
46 tablesize, 53 tablesize,
47 kIrtInterfaces, 54 kIrtInterfaces,
48 sizeof(kIrtInterfaces)); 55 sizeof(kIrtInterfaces));
49 if (result != 0) 56 if (result != 0)
50 return result; 57 return result;
51 return nacl_irt_query_core(interface_ident, table, tablesize); 58 return nacl_irt_query_core(interface_ident, table, tablesize);
52 } 59 }
53
54 } // namespace
55
56 int main(int argc, char** argv, char** environ) {
57 nacl_irt_nonsfi_allow_dev_interfaces();
58 if (argc < 2) {
59 std::cerr << "Usage: " << argv[0] << " <executable> <args...>\n";
60 return 1;
61 }
62 const char* nexe_filename = argv[1];
63 int fd = open(nexe_filename, O_RDONLY);
64 if (fd < 0) {
65 std::cerr << "Failed to open " << nexe_filename << ": " <<
66 strerror(errno) << "\n";
67 return 1;
68 }
69 uintptr_t entry = NaClLoadElfFile(fd);
70
71 mojo::embedder::Init(scoped_ptr<mojo::embedder::PlatformSupport>(
72 new mojo::embedder::SimplePlatformSupport()));
73
74 return nacl_irt_nonsfi_entry(argc - 1, argv + 1, environ,
75 reinterpret_cast<nacl_entry_func_t>(entry),
76 mojo_irt_nonsfi_query);
77 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698