monacl_sel_main.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
16f56ab789cb470620554d624c37f488285b3b04eDan Albert// Copyright 2014 The Chromium Authors. All rights reserved.
26f56ab789cb470620554d624c37f488285b3b04eDan Albert// Use of this source code is governed by a BSD-style license that can be
36f56ab789cb470620554d624c37f488285b3b04eDan Albert// found in the LICENSE file.
46f56ab789cb470620554d624c37f488285b3b04eDan Albert
56f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "mojo/nacl/monacl_sel_main.h"
66f56ab789cb470620554d624c37f488285b3b04eDan Albert
76f56ab789cb470620554d624c37f488285b3b04eDan Albert#include <stdio.h>
86f56ab789cb470620554d624c37f488285b3b04eDan Albert
96f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "mojo/nacl/mojo_syscall.h"
106f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "native_client/src/public/chrome_main.h"
116f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "native_client/src/public/nacl_app.h"
126f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "native_client/src/trusted/desc/nacl_desc_io.h"
136f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
146f56ab789cb470620554d624c37f488285b3b04eDan Albert
156f56ab789cb470620554d624c37f488285b3b04eDan Albertnamespace mojo {
166f56ab789cb470620554d624c37f488285b3b04eDan Albert
176f56ab789cb470620554d624c37f488285b3b04eDan Albertvoid LaunchNaCl(const char* nexe_file, const char* irt_file,
186f56ab789cb470620554d624c37f488285b3b04eDan Albert                int app_argc, char* app_argv[]) {
196f56ab789cb470620554d624c37f488285b3b04eDan Albert  NaClChromeMainInit();
206f56ab789cb470620554d624c37f488285b3b04eDan Albert
216f56ab789cb470620554d624c37f488285b3b04eDan Albert  // Open the IRT.
226f56ab789cb470620554d624c37f488285b3b04eDan Albert  struct NaClDesc* irt_desc = (struct NaClDesc*) NaClDescIoDescOpen(
236f56ab789cb470620554d624c37f488285b3b04eDan Albert      irt_file, NACL_ABI_O_RDONLY, 0);
24  if (NULL == irt_desc) {
25    perror(irt_file);
26    exit(1);
27  }
28
29  // Open the main executable.
30  struct NaClDesc* nexe_desc = (struct NaClDesc*) NaClDescIoDescOpen(
31      nexe_file, NACL_ABI_O_RDONLY, 0);
32  if (NULL == nexe_desc) {
33    perror(nexe_file);
34    exit(1);
35  }
36
37  struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate();
38  args->nexe_desc = nexe_desc;
39  args->irt_desc = irt_desc;
40
41  args->argc = app_argc;
42  args->argv = app_argv;
43
44  struct NaClApp* nap = NaClAppCreate();
45  InjectMojo(nap);
46
47  int exit_status = 1;
48  NaClChromeMainStart(nap, args, &exit_status);
49  NaClExit(exit_status);
50}
51
52} // namespace mojo
53