11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/nacl/monacl_sel_main.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <stdio.h>
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/nacl/mojo_syscall.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "native_client/src/public/chrome_main.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "native_client/src/public/nacl_app.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "native_client/src/trusted/desc/nacl_desc_io.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid LaunchNaCl(const char* nexe_file, const char* irt_file,
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                int app_argc, char* app_argv[]) {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NaClChromeMainInit();
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Open the IRT.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct NaClDesc* irt_desc = (struct NaClDesc*) NaClDescIoDescOpen(
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      irt_file, NACL_ABI_O_RDONLY, 0);
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (NULL == irt_desc) {
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    perror(irt_file);
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    exit(1);
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Open the main executable.
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct NaClDesc* nexe_desc = (struct NaClDesc*) NaClDescIoDescOpen(
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      nexe_file, NACL_ABI_O_RDONLY, 0);
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (NULL == nexe_desc) {
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    perror(nexe_file);
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    exit(1);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct NaClChromeMainArgs* args = NaClChromeMainArgsCreate();
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  args->nexe_desc = nexe_desc;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  args->irt_desc = irt_desc;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  args->argc = app_argc;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  args->argv = app_argv;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct NaClApp* nap = NaClAppCreate();
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  InjectMojo(nap);
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int exit_status = 1;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NaClChromeMainStart(nap, args, &exit_status);
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NaClExit(exit_status);
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace mojo
53