Index: mojo/nacl/nonsfi/README.md |
diff --git a/mojo/nacl/nonsfi/README.md b/mojo/nacl/nonsfi/README.md |
index 3ecae5a094d5eda32c073bbd018b20d427fa3a04..3fcd4136d1dcb3db0658205ed181369da69d37b9 100644 |
--- a/mojo/nacl/nonsfi/README.md |
+++ b/mojo/nacl/nonsfi/README.md |
@@ -11,6 +11,9 @@ The Non-SFI NaCl and accompanying tests should be built by default for Linux. |
The boolean indicating if they are built is "mojo_use_nacl_nonsfi", defined |
inside the BUILD files. |
+Building Non-SFI NaCl |
+--------------------- |
+ |
Build Mojo (all following commands assume you are in the root of the mojo |
repository): |
@@ -19,9 +22,44 @@ $ ./mojo/tools/mojob.py gn |
$ ./mojo/tools/mojob.py build |
``` |
-Doing this build step will automatically create a pexe of unit tests, at |
-`./out/Debug/newlib_pnacl/monacl_test.pexe`. To translate a pexe into a |
-non-SFI nexe: |
+Doing this build step will automatically create the necessary content handlers |
+and pexes. |
+ |
+Translating and Running Pexes |
+----------------------------- |
+ |
+When portable executable files (pexes) are generated by mojo, they are created |
+as `.pexe.mojo` files. These pexes are generated by building a gn target with |
+the `mojo_native_application` template with a PNaCl toolchain. |
+ |
+The "pexe" part of the name comes from the fact that they are portable, and the |
+"mojo" part of the name comes from the fact that they have the line `#!mojo |
+mojo:content_handler_nonsfi_pexe` prepended to them, so the appropriate pexe |
+content handler can be found by the Mojo Shell. |
+ |
+To run the `FOOBAR.pexe.mojo` pexe (aka, to translate and execute it), run the |
+following: |
+ |
+``` |
+$ ./out/Debug/mojo_shell --enable-multiprocess ./out/Debug/FOOBAR.pexe.mojo |
+``` |
+ |
+or, alternatively, for a version compatible with Android: |
+ |
+``` |
+$ ./mojo/devtools/common/mojo_run --enable-multiprocess mojo:FOOBAR.pexe |
+[--android] |
+``` |
+ |
+For more information on the process of translating and handling nexes and pexes, |
+refer to the `services/nacl` directory. |
+ |
+Manually Translating Pexes and Running Nexes |
+-------------------------------------------- |
+ |
+A raw pexe of unit tests will be built, at |
+`./out/Debug/newlib_pnacl/monacl_test.pexe`. To manually translate this pexe |
+into a non-SFI nexe: |
``` |
$ ./native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-translate \ |
@@ -29,9 +67,9 @@ $ ./native_client/toolchain/linux_x86/pnacl_newlib/bin/pnacl-translate \ |
``` |
Now, you should have the fully translated nexe (called |
-"FOOBAR.nexe"). You can run the nexe through the monacl shell |
+`FOOBAR.nexe`). You can run the nexe through the monacl shell |
(a minimal, "nexe-only" shell, which loads the nexe ELF file -- see |
- monacl_shell_nonsfi.cc): |
+ `monacl_shell_nonsfi.cc`): |
``` |
$ ./out/Debug/clang_x86/monacl_shell_nonsfi FOOBAR.nexe |
@@ -43,19 +81,13 @@ is not the only way. Usually, applications are launched through the |
this content (i.e., how does the mojo_shell know it is dealing with a nonsfi |
nexe?). |
-The BUILD.gn files in Mojo automatically make this pexe, translate it to a |
-nexe, and prepend a line ("#!mojo mojo:content_handler_nonsfi_nexe") to the |
-front of the file, at which point it is also runnable through the mojo_shell. |
+The BUILD.gn files in Mojo automatically make the "monacl_test" pexe, translate |
+it to a nexe, and prepend a line (`#!mojo mojo:content_handler_nonsfi_nexe`) to |
+the front of the file, at which point it is also runnable through the |
+mojo_shell. |
These files, which start with this "#!" line, are ".mojo" files. The nexes can |
be run like this: |
``` |
$ ./out/Debug/mojo_shell --enable-multiprocess out/Debug/FOOBAR.mojo |
``` |
- |
-TODO |
-==== |
- |
-* Use subzero (a NaCl project to improve translation speed) for pexe |
-translation. |
-* Enable caching of translated pexes. |