OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 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 be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include "native_client/src/trusted/service_runtime/sel_main_chrome.h" | 7 #include "native_client/src/trusted/service_runtime/sel_main_chrome.h" |
8 | 8 |
9 #include "native_client/src/include/portability.h" | 9 #include "native_client/src/include/portability.h" |
10 #include "native_client/src/include/portability_io.h" | 10 #include "native_client/src/include/portability_io.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "native_client/src/trusted/service_runtime/sel_ldr.h" | 31 #include "native_client/src/trusted/service_runtime/sel_ldr.h" |
32 #include "native_client/src/trusted/service_runtime/sel_qualify.h" | 32 #include "native_client/src/trusted/service_runtime/sel_qualify.h" |
33 #include "native_client/src/trusted/service_runtime/win/exception_patch/ntdll_pa
tch.h" | 33 #include "native_client/src/trusted/service_runtime/win/exception_patch/ntdll_pa
tch.h" |
34 | 34 |
35 static int const kSrpcFd = 5; | 35 static int const kSrpcFd = 5; |
36 | 36 |
37 int verbosity = 0; | 37 int verbosity = 0; |
38 | 38 |
39 static int g_irt_file_desc = -1; | 39 static int g_irt_file_desc = -1; |
40 | 40 |
| 41 static struct NaClValidationCache *g_validation_cache = NULL; |
41 | 42 |
42 void NaClSetIrtFileDesc(int fd) { | 43 void NaClSetIrtFileDesc(int fd) { |
43 CHECK(g_irt_file_desc == -1); | 44 CHECK(g_irt_file_desc == -1); |
44 g_irt_file_desc = fd; | 45 g_irt_file_desc = fd; |
45 } | 46 } |
46 | 47 |
47 static void NaClLoadIrt(struct NaClApp *nap) { | 48 static void NaClLoadIrt(struct NaClApp *nap) { |
48 int file_desc; | 49 int file_desc; |
49 struct GioPio gio_pio; | 50 struct GioPio gio_pio; |
50 struct Gio *gio_desc; | 51 struct Gio *gio_desc; |
(...skipping 19 matching lines...) Expand all Loading... |
70 if (NaClAppLoadFileDynamically(nap, gio_desc) != LOAD_OK) { | 71 if (NaClAppLoadFileDynamically(nap, gio_desc) != LOAD_OK) { |
71 NaClLog(LOG_FATAL, | 72 NaClLog(LOG_FATAL, |
72 "NaClLoadIrt: Failed to load the integrated runtime (IRT). " | 73 "NaClLoadIrt: Failed to load the integrated runtime (IRT). " |
73 "The user executable was probably not built to use the IRT.\n"); | 74 "The user executable was probably not built to use the IRT.\n"); |
74 } | 75 } |
75 | 76 |
76 (*NACL_VTBL(Gio, gio_desc)->Close)(gio_desc); | 77 (*NACL_VTBL(Gio, gio_desc)->Close)(gio_desc); |
77 (*NACL_VTBL(Gio, gio_desc)->Dtor)(gio_desc); | 78 (*NACL_VTBL(Gio, gio_desc)->Dtor)(gio_desc); |
78 } | 79 } |
79 | 80 |
| 81 /* TODO(ncbray) consolidate Chrome's sel_ldr setup to a single function. */ |
| 82 void NaClSetValidationCache(struct NaClValidationCache *cache) { |
| 83 g_validation_cache = cache; |
| 84 } |
| 85 |
80 void NaClMainForChromium(int handle_count, const NaClHandle *handles, | 86 void NaClMainForChromium(int handle_count, const NaClHandle *handles, |
81 int debug) { | 87 int debug) { |
82 char *av[1]; | 88 char *av[1]; |
83 int ac = 1; | 89 int ac = 1; |
84 const char **envp; | 90 const char **envp; |
85 struct NaClApp state; | 91 struct NaClApp state; |
86 int export_addr_to = kSrpcFd; /* Used to be set by -X. */ | 92 int export_addr_to = kSrpcFd; /* Used to be set by -X. */ |
87 struct NaClApp *nap = &state; | 93 struct NaClApp *nap = &state; |
88 NaClErrorCode errcode = LOAD_INTERNAL; | 94 NaClErrorCode errcode = LOAD_INTERNAL; |
89 int ret_code = 1; | 95 int ret_code = 1; |
(...skipping 15 matching lines...) Expand all Loading... |
105 /* to be passed to NaClMain, eventually... */ | 111 /* to be passed to NaClMain, eventually... */ |
106 av[0] = "NaClMain"; | 112 av[0] = "NaClMain"; |
107 | 113 |
108 if (!NaClAppCtor(&state)) { | 114 if (!NaClAppCtor(&state)) { |
109 fprintf(stderr, "Error while constructing app state\n"); | 115 fprintf(stderr, "Error while constructing app state\n"); |
110 goto done_ctor; | 116 goto done_ctor; |
111 } | 117 } |
112 | 118 |
113 errcode = LOAD_OK; | 119 errcode = LOAD_OK; |
114 | 120 |
| 121 /* Inject the validation caching interface, if it exists. */ |
| 122 nap->validation_cache = g_validation_cache; |
| 123 |
115 NaClAppInitialDescriptorHookup(nap); | 124 NaClAppInitialDescriptorHookup(nap); |
116 | 125 |
117 /* | 126 /* |
118 * NACL_SERVICE_PORT_DESCRIPTOR and NACL_SERVICE_ADDRESS_DESCRIPTOR | 127 * NACL_SERVICE_PORT_DESCRIPTOR and NACL_SERVICE_ADDRESS_DESCRIPTOR |
119 * are 3 and 4. | 128 * are 3 and 4. |
120 */ | 129 */ |
121 | 130 |
122 /* import IMC handle - used to be "-i" */ | 131 /* import IMC handle - used to be "-i" */ |
123 CHECK(handle_count == 3); | 132 CHECK(handle_count == 3); |
124 NaClAddImcHandle(nap, handles[0], export_addr_to); | 133 NaClAddImcHandle(nap, handles[0], export_addr_to); |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 if (LOAD_OK != errcode) { | 305 if (LOAD_OK != errcode) { |
297 NaClBlockIfCommandChannelExists(nap); | 306 NaClBlockIfCommandChannelExists(nap); |
298 } | 307 } |
299 | 308 |
300 done_ctor: | 309 done_ctor: |
301 | 310 |
302 NaClAllModulesFini(); | 311 NaClAllModulesFini(); |
303 | 312 |
304 NaClExit(ret_code); | 313 NaClExit(ret_code); |
305 } | 314 } |
OLD | NEW |