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

Unified Diff: mojo/monacl/monacl_sel_main.cc

Issue 385983008: Mojo + NaCl prototype. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Dead files Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: mojo/monacl/monacl_sel_main.cc
diff --git a/mojo/monacl/monacl_sel_main.cc b/mojo/monacl/monacl_sel_main.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c3c343ad66f90ec1727412e4efe9f04fcafe5ec6
--- /dev/null
+++ b/mojo/monacl/monacl_sel_main.cc
@@ -0,0 +1,129 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/monacl/monacl_sel_main.h"
+
+#include "mojo/monacl/mojo_syscall.h"
+#include "native_client/src/public/chrome_main.h"
+#include "native_client/src/public/nacl_app.h"
+// For opening IRT
+#include "native_client/src/trusted/desc/nacl_desc_io.h"
+// For opening IRT
+#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
+// For loading main nexe
+#include "native_client/src/trusted/service_runtime/load_file.h"
+#include "native_client/src/trusted/service_runtime/nacl_all_modules.h"
+#include "native_client/src/trusted/service_runtime/nacl_bootstrap_channel_error_reporter.h"
+#include "native_client/src/trusted/service_runtime/nacl_error_log_hook.h"
+#include "native_client/src/trusted/service_runtime/sel_ldr.h"
+#include "native_client/src/trusted/service_runtime/sel_main_common.h"
+#include "native_client/src/trusted/service_runtime/sel_qualify.h"
+
+static int MoNaClLoadApp(
Mark Seaborn 2014/08/26 16:25:53 Nit: Chromium style is to use an anon namespace in
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+ struct NaClApp *nap,
+ struct NaClChromeMainArgs *args,
+ const char *nexe_file,
+ const char *irt_file,
+ struct NaClDesc *irt_desc) {
+ NaClErrorCode errcode;
+
+ NaClBootstrapChannelErrorReporterInit();
+ NaClErrorLogHookInit(NaClBootstrapChannelErrorReporter, nap);
Mark Seaborn 2014/08/26 16:25:53 You don't need to reference the IMC bootstrap chan
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+ NaClAppInitialDescriptorHookup(nap);
+
+ int skip_qualification = 0;
+ if (skip_qualification) {
Mark Seaborn 2014/08/26 16:25:53 Always 0, so remove this branch.
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+ NaClLog(LOG_WARNING, "PLATFORM QUALIFICATION DISABLED - "
+ "Native Client's sandbox will be unreliable!\n");
+ } else {
+ // HACK no fault injection.
Mark Seaborn 2014/08/26 16:25:53 Remove "HACK" comment
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+ errcode = NaClRunSelQualificationTests();
+ if (LOAD_OK != errcode) {
+ nap->module_load_status = errcode;
+ fprintf(stderr, "Error while loading in SelMain: %s\n",
+ NaClErrorString(errcode));
+ }
+ }
+
+ NaClAppLoadModule(nap, args->nexe_desc, NULL, NULL);
+ NaClDescUnref(args->nexe_desc);
+ args->nexe_desc = NULL;
+ errcode = NaClWaitForLoadModuleStatus(nap);
+
+ if (LOAD_OK != errcode) {
+ fprintf(stderr, "Error while loading \"%s\": %s\n",
+ nexe_file,
+ NaClErrorString(errcode));
+ fprintf(stderr,
+ ("Using the wrong type of nexe (nacl-x86-32"
+ " on an x86-64 or vice versa)\n"
+ "or a corrupt nexe file may be"
+ " responsible for this error.\n"));
+ }
+
+ NaClAppStartModule(nap, NULL, NULL);
+
+ errcode = NaClMainLoadIrt(nap, irt_desc, NULL);
+ if (LOAD_OK != errcode) {
+ fprintf(stderr, "Error while loading \"%s\": %s\n",
+ irt_file,
+ NaClErrorString(errcode));
+ }
+
+ if (!NaClAppLaunchServiceThreads(nap)) {
+ fprintf(stderr, "Launch service threads failed\n");
+ return 0;
+ }
+ return 1;
+}
+
+static int MoNaClStartApp(
+ struct NaClApp *nap,
+ int app_argc,
+ char *app_argv[],
+ const char **env){
+ if (!NaClCreateMainThread(nap, app_argc, app_argv, env)) {
+ fprintf(stderr, "creating main thread failed\n");
+ return 1;
+ }
+ return NaClWaitForMainThreadToExit(nap);
+}
+
+int LaunchNaCl(const char *nexe_file, const char *irt_file,
+ int app_argc, char *app_argv[]) {
+ const char *env = NULL;
+
+ NaClChromeMainInit();
+
+ // Load the IRT
+ //NaClFileNameForValgrind(irt_file);
+ struct NaClDesc *irt_desc = (struct NaClDesc *) NaClDescIoDescOpen(
+ irt_file, NACL_ABI_O_RDONLY, 0);
+ if (NULL == irt_desc) {
+ perror("sel_main");
+ fprintf(stderr, "Cannot open \"%s\".\n", irt_file);
+ exit(1);
+ }
+
+ struct NaClDesc *nexe_desc = (struct NaClDesc *) NaClDescIoDescOpen(
+ nexe_file, NACL_ABI_O_RDONLY, 0);
+ if (NULL == nexe_desc) {
+ perror("sel_main");
+ fprintf(stderr, "Cannot open \"%s\".\n", nexe_file);
+ exit(1);
+ }
+
+ struct NaClChromeMainArgs *args = NaClChromeMainArgsCreate();
+ args->nexe_desc = nexe_desc;
+
+ struct NaClApp* nap = NaClAppCreate();
+ InjectMojo(nap);
+ MoNaClLoadApp(nap, args, nexe_file, irt_file, irt_desc);
+ int ret_code = MoNaClStartApp(nap, app_argc, app_argv, &env);
+
+ // TODO free nap?
Mark Seaborn 2014/08/26 16:25:54 Not if you're exiting. You can remove this commen
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+
+ NaClAllModulesFini();
Mark Seaborn 2014/08/26 16:25:53 Not safe because threads can be running.
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+ return ret_code;
Mark Seaborn 2014/08/26 16:25:53 Calling exit() is not safe because it does some te
Nick Bray (chromium) 2014/09/03 23:45:03 Done.
+}

Powered by Google App Engine
This is Rietveld 408576698