summaryrefslogtreecommitdiff
path: root/chromium/docs/website/site/nativeclient/how-tos
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/docs/website/site/nativeclient/how-tos')
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md146
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md287
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md155
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md52
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md81
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md33
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md63
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md51
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha11
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md222
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md121
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md19
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md72
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md93
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md194
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md339
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/index.md9
-rw-r--r--chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md105
42 files changed, 2067 insertions, 0 deletions
diff --git a/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md b/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md
new file mode 100644
index 00000000000..8e3ae771ead
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/3d-tips-and-best-practices/index.md
@@ -0,0 +1,146 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: 3d-tips-and-best-practices
+title: 3D Tips and Best Practices
+---
+
+# Pepper 3D on Chrome provides a secure implementation of OpenGL ES 2.0. Here are some tips for getting maximum performance.
+
+## Don’t update indices
+
+For security all indices must be validated. If you change them we have to
+validate them again. Therefore structure your code so indices are not updated
+often.
+
+## Don’t use client side buffers
+
+In OpenGL ES 2.0 you can use client side data with glVertexAttribPointer and
+glDrawElements. It’s REALLY SLOW! Don’t use them. Instead, whenever possible use
+VBOs (Vertex Buffer Objects). Side-note: Client side buffers have been removed
+from OpenGL 4.0.
+
+## Don’t mix vertex data with index data.
+
+Actually this is off by default. In real OpenGL ES 2.0 you can create a single
+buffer and bind it to both GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER. In
+Pepper 3D, by default, you can only bind buffers to 1 bind point. There is the
+option to enable binding buffers to both points. Doing so requires expensive
+work so don’t do it.
+
+## For dynamic textures (ie, video) or dynamic vertex data (skinning / particles) consider using CHROMIUM_map_sub
+
+<http://src.chromium.org/viewvc/chrome/trunk/src/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_map_sub.txt>
+
+## Don’t call glGetXXX or glCheckXXX during rendering.
+
+Calling either of those stalls our multi-process pipeline. This is normal advice
+for OpenGL programs but is particularly important for 3D on Chrome. This
+includes glGetError – avoid calling it in release builds.
+
+## Make sure to enable Attrib 0.
+
+In OpenGL you MUST enable Attrib 0. In OpenGL ES 2.0 you don’t have to enable
+Attrib 0. What that means is that in order to emulate OpenGL ES 2.0 on top of
+OpenGL we have to do some expensive work.
+In practice most programs don’t have an issue here but just in case, the most
+obvious way this might bite you is if you bind your own locations and don’t
+start with 0. Example: Imagine you have a vertex shader with 2 attributes
+“positions” and “normals”
+
+> glBindAttribLocation(program, “positions”, 1);
+
+> glBindAttribLocation(program, “normals”, 2);
+
+Those 2 functions would make make your shader NOT use attrib 0 in which case
+we’d have to do some expensive work internally
+
+## Minimize the use of glFlush and avoid using glFinish
+
+It is generally good practice to minimize explicit calls to glFlush and avoid
+using glFinish. Particularly so on Native Client where they incur additional
+overhead.
+
+## Avoid reading back output from the GPU to the client
+
+In other words, don't call glReadPixels. This is slow.
+
+**When benchmarking, avoid comparing results where one system is limited by
+vsync and another is not.**
+
+## Don’t use GL_FIXED
+
+It’s not supported in OpenGL and so emulation for OpenGL ES 2.0 is slow. By
+default GL_FIXED support is turned off Pepper 3D. There is the option to turn it
+on. Don’t do it.
+
+## Use a smaller plugin and let CSS scale it.
+
+The size your plugin renders and the size it displays in the page are set
+separately. CSS controls the size your plugin displays where as the width and
+height attribute of your &lt;embed&gt; element control the size your plugin
+renders.
+
+## Use HTML where approriate
+
+If you’re used to making native games you’re probably used to rendering
+everything yourself. The browser though can already render text and UI very well
+and it will composite that HTML with your plugin using all the standard HTML5
+and CSS methods available.
+
+**Avoid updating a small portion of a large buffer**
+
+This is especially an issue in Windows where we emulate OpenGL ES 2.0 on top of
+DirectX. In the current implementation, updating a portion of a buffer requires
+re-processing the entire buffer. In other words if you make a buffer
+(glBufferData) of 10000 bytes and then later call glSubBufferData to update just
+3 of those bytes, all 10000 bytes will have to be re-converted. (Yea, I know,
+lame)
+
+2 suggestions:
+
+1. Separate static vertex data from dynamic. In other words, put your
+ static data in 1 buffer and dynamic data in a different buffer. That
+ way your static data won't have to be re-converted.
+2. Volunteer to fix the perf issues
+ <http://angleproject.googlecode.com>
+
+# General OpenGL advice
+
+## Interleaved data is faster to render than non-interleaved
+
+3 buffers of \[position,position,position\], \[normal,normal,normal\],
+\[texcoord,texcoord,texcoord\] is slower than 1 buffer of
+\[position,normal,texcoord,position,normal,texcoord,position,normal,texcoord\].
+
+## Separate dynamic data from static
+
+Assume you have positions, normals and texcoords. Further assume you update
+positions every frame. It would be best to put positions in 1 buffer and normals
++ texcoords in a separate buffer. That way, you can call glBufferData or
+glBufferSubData on a smaller range of data.
+
+## glBindBuffer is expensive
+
+Consider putting multiple meshes in a single buffer and using offsets (as long
+as the buffers are static, see above)
+
+## Check your extensions and max GL features
+
+Not every GPU supports every extension nor has the same amount of textures
+units, vertex attributes, etc. Make sure you check for the features you need.
+For example, if you are using non power of 2 texture with mips make sure
+GL_OES_texture_npot exists. If you are using floating point textures make sure
+GL_OES_texture_float exists. If you are using DXT1, DXT3 or DXT5 texture make
+sure GL_ETC_texture_compression_dxt1, GL_CHROMIUM_texture_compression_dxt3 and
+GL_CHROMIUM_texture_compression_dxt5 exist.
+If you are using textures in vertex shaders make sure
+glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, …) returns a value greater than
+0.
+If you are using more than 8 textures in a single shader make sure
+glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, …) returns a value greater than or
+equal to the number of simulatious textures you need.
+etc... \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md b/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md
new file mode 100644
index 00000000000..3c3096382d7
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/build-tcb/index.md
@@ -0,0 +1,287 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: build-tcb
+title: Building and Testing the Native Client Trusted Code Base
+---
+
+[TOC]
+
+## What build system(s) is Native Client using?
+
+The primary build system used by Native Client is [SCons](http://www.scons.org).
+For historical reasons we are not using plain [SCons](http://www.scons.org/) but
+an extension call Hammer.
+
+The parts of the system shared with Chrome are also built using Chrome's build
+system, GN.
+
+We also have some Makefiles and some shell scripts for certain build tasks.
+
+## Why is this such a complex mess?
+
+The usual excuses:
+
+* Inherent complexity.
+* Historical reasons.
+* Entropy requires no maintenance.
+* ...
+
+## Which files contain build system information?
+
+For [SCons](http://www.scons.org/) it is: SConstruct, \*\*/build.scons,
+\*\*/nacl.scons There are also relevant configuration files in
+site_scons/site_tools/\*, and random Python scripts located here and there.
+
+For GN it is: \*\*/BUILD.gn and \*\*/config.gni
+
+## What is the difference between trusted and untrusted code?
+
+"Trusted code" encompasses components like:
+
+* the browser plugin
+* service runtime (sel_ldr)
+
+It is compiled using regular compilers. Bugs in trusted code can compromise
+system security, hence the name. As far as the build system is concerned trusted
+code is described in \*\*/build.scons files. Trusted code lives in
+src/trusted/\*\*
+
+"Untrusted code" encompasses components like:
+
+* quake and other examples of Native Client executables
+* libraries necessary to build those executables
+* The IRT
+
+It is compiled using special sandboxing compilers. As far as the build system is
+concerned, untrusted code is described in \*\*/nacl.scons files. Untrusted code
+lives in src/untrusted/\*\* and also in tests/\*\*
+
+Some code can be compiled either as trusted or shared code, e.g. libraries that
+facilitate communication between trusted and untrusted code. Such code typically
+lives in src/shared/\*\* and has both build.scons and nacl.scons files.
+
+## How do you use the MODE= setting when invoking SCons?
+
+The MODE= setting or its equivalent --mode is used to select whether you want to
+compile trusted or untrusted code or both and how. Examples:
+
+MODE=nacl
+
+* just build untrusted code
+* note that this doesn't build all of the untrusted code. If you don't
+ specify a trusted platform (e.g. MODE=opt-linux,nacl) most of the
+ tests will not be built.
+
+MODE=opt-linux
+
+* just build (optimized) trusted code - you must be on a Linux system
+
+MODE=nacl,dbg-win
+
+* build both (trusted code will be unoptimized) - you must be on a
+ Windows system
+
+NOTE: if you do not specify MODE, "opt-*&lt;your-system-os&gt;"* will be
+assumed.
+
+NOTE: if you want to run integration tests, you need to build both trusted and
+untrusted code simultaneously, because those tests involve running untrusted
+code under the control of trusted code.
+
+What is the meaning of BUILD_ARCH, TARGET_ARCH, etc. ?
+
+Just like any cross compilation environment, there are some hairy configuration
+issues which are controlled by BUILD_ARCH, TARGET_ARCH, etc. to force
+conditional compilation and linkage.
+
+It helps to revisit the
+[terminology](http://www.airs.com/ian/configure/configure_5.html) used by cross
+compilers to better understand Native Client:
+
+> BUILD_SYSTEM: The system on which the tools will be built (initially) is
+> called the build system.
+
+> HOST_SYSTEM: The system on which the tools will run is called the host system.
+
+> TARGET_SYSTEM: The system for which the tools generate code is called the
+> target system.
+
+For [NaCl](/p/nativeclient/wiki/NaCl) we only have **two** of these, sadly they
+have confusing names:
+
+> BUILD_PLATFORM: The system on which the trusted code runs.
+
+> TARGET_PLATFORM: The sandbox system that is being enforced by the trusted
+> code.
+
+The BUILD_PLATFORM is closest in nature to the HOST_SYSTEM, the TARGET_PLATFORM
+is closest to the TARGET_SYSTEM. We do not have an equivalent to BUILD_SYSTEM
+since we just assume the build system is x86 (either a 32- or 64-bit system).
+
+## What kind of BUILD_PLATFORM/TARGET_PLATFORM configurations are supported?
+
+Conceptually we have
+
+> BUILD_PLATFORM = (BUILD_ARCH, BUILD_SUBARCH, BUILD_OS)
+
+and
+
+> TARGET_PLATFORM = (TARGET_ARCH. TARGET_SUBARCH)
+
+NOTE:
+
+There is no TARGET_OS, since Native Client executables are OS independent.
+
+The BUILD_OS is usually tested for using [SCons](http://www.scons.org/)
+expressions like "env.Bit('windows')". You cannot really control it as it is
+inherited from the system you are building on, the BUILD_SYSTEM in cross
+compiler speak.
+
+Enumeration of all BUILD_PLATFORMs:
+
+(x86, 32, linux) (x86, 32, windows) (x86, 32, mac) (arm, 32, linux) // the 32 is
+implicit as there is no 64bit arm
+
+(x86, 64, linux) (x86, 64, windows)
+
+***Special note for Windows users:** The Windows command-line build currently
+relies on vcvarsXX.bat being called to set up the environment. The compiler's
+target subarchitecture (32,64) is selected by the version of vcvars that you
+called (vcvars32/vcvars64). If you call vcvars32 and then build with
+platform=x86-64, you will get "target mismatch" errors.*
+
+Enumeration of all TARGET_PLATFORMs: (x86, 32) (x86, 64) (arm, 32) // the 32 is
+implicit as there is no 64bit arm
+
+Usually BUILD_ARCH == TARGET_ARCH and BUILD_SUBARCH == TARGET_SUBARCH
+
+There is ONLY ONE exception, you can build the ARM validator like so:
+
+> BUILD_ARCH = x86, BUILD_SUBARCH=**, TARGET_ARCH=arm TARGET_SUBARCH=32**
+
+**In particular it is NOT possible to use different SUBARCHs for BUILD and
+TARGET.**
+
+## What is the relationship between TARGET_PLATFORM and untrusted code?
+
+The flavor of the untrusted code is derived from the TARGET_PLATFORM
+
+## Why are *BUILD and ARCH* used inconsistently?
+
+Usually BUILD_ARCH == TARGET_ARCH and BUILD_SUBARCH == TARGET_SUBARCH so
+mistakes have no consequences.
+
+## So how do I build something? (Finally!)
+
+\[Note: scons --download has been deprecated as of Aug 17, 2010\]
+
+The first time you build, you will need to get the latest toolchain build. Do
+this using gclient hooks:
+
+```none
+fetch nacl
+gclient sync
+cd native_client
+```
+
+~~The first time you build something, you use the --download switch to download
+the platform's toolchain.~~
+
+ ~~./scons --download MODE=opt-linux,nacl~~
+
+ ~~./scons --download MODE=opt-mac,nacl~~
+
+ ~~.\\scons --download MODE=opt-win,nacl~~
+
+~~Subsequent builds can omit the --download option. You should use --download
+anytime you want to update your toolchain.~~
+
+The default value for MODE is dbg-*&lt;your-system-os&gt;* so these two commands
+are identical
+
+* ./scons MODE=dbg-*&lt;your-system-os&gt;*
+* ./scons
+
+## How do I run the unittests after the build completes?
+
+To run all unittests:
+
+ ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl run_all_tests
+
+To run specific sets of tests:
+
+ ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl small_tests
+
+ ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl medium_tests
+
+ ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl large_tests
+
+ ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl browser_tests
+
+To run a single test:
+
+* A trusted test
+ * ./scons MODE=opt-*&lt;your-system-os&gt;* run_format_string_test
+ * run_format_string_test is defined in
+ src/trusted/service-runtime/build.scons
+ * Other trusted unittest targets exist in other build.scons
+ files
+ * Note that you do not need to specify nacl as a mode for a
+ trusted test
+* An untrusted test
+ * ./scons MODE=opt-*&lt;your-system-os&gt;*,nacl run_thread_test
+ * run_thread_test is defined in tests/threads/nacl.scons
+ * Other untrusted unittest targets exist in other nacl.scons
+ files
+
+## Are there any other cool Scons options?
+
+There are some other scons options which are useful. Note the confusing syntax
+differences for option words (platform=), single minus options (-c), and double
+minus options (--clang). Sorry.
+
+* --clang
+ * Use the Clang toolchain downloaded by the DEPS hooks instead of
+ gcc on Linux. Probably should be the default.
+* -c
+ * clean before building
+* -jN
+ * Split the build into N processes. A good choice for N is often
+ the number of processors on the machine doing the build
+* MODE=*&lt;build-mode-list&gt;* (or its equivalent
+ --mode=*&lt;build-mode-list&gt;*)
+ * choices are opt-linux, dbg-linux, opt-mac, dbg-mac, opt-win, and
+ dbg-win (for the type of trusted code to build) and nacl (to
+ build untrusted code)
+ * Usually the *&lt;build-mode-list&gt;* will contain one trusted
+ code choice and the untrusted code name, like: opt-linux,nacl
+* platform=TARGET_ARCH
+ * Cross-compile for TARGET_ARCH
+ * platform=x86-64 is required in order to build for 64-bit
+* sdl=none
+ * Do not use SDL
+
+## What about 64-bit?
+
+The build defaults to a 32-bit build even if the machine running the build is a
+64-bit machine. To build for 64-bit:
+
+* add: platform=x86-64
+
+*Also see the **Special note for Windows users** in the **What kind of
+BUILD_PLATFORM/TARGET_PLATFORM configurations are supported?** section above.*
+
+## Where is the source code?
+
+The source code is divided into these main areas:
+
+* src/trusted: Code that runs only as part of the trusted portion of
+ Native Client
+* src/untrusted: Code that runs only as part of a user-created Native
+ Client program
+* src/shared: Code that can be used in both the trusted portion and
+ the user-created portion of Native Client \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md b/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md
new file mode 100644
index 00000000000..05924246f18
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/building-and-testing-gcc-and-gnu-binutils/index.md
@@ -0,0 +1,155 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: building-and-testing-gcc-and-gnu-binutils
+title: Building and Testing GCC and GNU binutils
+---
+
+[TOC]
+
+## Introduction
+
+This page describes the structure of source code of the GCC-based Native Client
+toolchain. The sources are based on stable releases of external packages:
+[Binutils](http://git.chromium.org/gitweb/?p=nacl-binutils.git;a=summary),
+[GCC](http://git.chromium.org/gitweb/?p=nacl-gcc.git;a=summary),
+[Newlib](http://git.chromium.org/gitweb/?p=nacl-newlib.git;a=summary),
+[GDB](http://git.chromium.org/gitweb/?p=nacl-gdb.git;a=summary),
+[GlibC](http://git.chromium.org/gitweb/?p=nacl-glibc.git;a=summary) plus a
+subset of [linux kernel
+headers](http://git.chromium.org/gitweb/?p=linux-headers-for-nacl.git;a=summary).
+The rest of the page addresses the structure of the source repositories, the
+ways to synchronize patches across them and the build script.
+
+## Prerequisites
+
+We recommend hacking the toolchain on Linux. After each commit the toolchain
+tarballs are built on [builders](https://ci.chromium.org/p/nacl/g/main/console).
+Using Windows is difficult since Chromium no longer supports Cygwin, and it's
+too slow to be practical anyway (mostly due to the poor performance of fork()).
+
+### Installing packages on your system
+
+* Refer to
+ [HowToBuildPorts](http://code.google.com/p/nativeclient/wiki/HowToBuildPorts)
+ for setting up the build environment.
+* optional: Git and Subversion (useful for development)
+
+ ```none
+ sudo apt-get install gitk subversion
+ ```
+
+Native Client Source is also required to build the toolchain (specifically,
+libraries). Follow the instructions on the [Native Client
+Source](http://code.google.com/p/nativeclient/wiki/Source) page to fetch the
+sources.
+
+### Setting up environment variables for Git
+
+If you are going to contribute to the toolchain, you will need to use the Git
+repository. Add similar lines to your .bashrc or a shell login script:
+
+```none
+export GIT_COMMITTER_NAME="John Doe"
+export GIT_COMMITTER_EMAIL="doe@example.com"
+export GIT_AUTHOR_NAME="Mary Major"
+export GIT_AUTHOR_EMAIL="mary@example.com"
+```
+
+In the most common case author and committer strings should be equal.
+
+## Obtaining the toolchain sources
+
+```none
+cd native_client/tools
+make sync  # For more options about syncing and building read the topmost comment in the Makefile.
+```
+
+### Building the toolchain
+
+Option 1: Build a *newlib*-based toolchain
+
+```none
+make clean build-with-newlib -j16
+```
+
+Option2:Build a *GlibC*-based toolchain.
+
+```none
+make clean build-with-glibc -j16
+```
+
+The toolchain binaries get installed to native_client/tools/out by default, you
+bay override it by providing *TOOLCHAINLOC=&lt;path&gt; in make invocation.*
+
+*note:* Although the build script is written as a Makefile, it does not support
+incremental rebuilds (though it supports parallel builds).
+
+*note*: To build in a 100% clean way, the TOOLCHAINLOC directory must be empty.
+
+## Structure of the Git repositories
+
+The Git repositories are hosted at [chromium git
+repositories](http://git.chromium.org/). NaCl development happens in branch
+master in each repository.
+
+### Branches
+
+The branch vendor-src keeps the sources from the original tarball unchanged.
+From time to time the master branch should be **rebased** on top of newer
+revisions of the vendor-src branch. Once the **master** branch is rebased, the
+old branch should be kept from garbage collection so that old commits can be
+found by hashes (required to be able to reproduce old builds).
+
+## Code reviews
+
+Follow the [Git Cookbook](http://code.google.com/p/chromium/wiki/GitCookbook)
+for sending your commit for review. Recommendations: Method #1 is the easiest.
+Instead of "git cl" you can use git-cl from **depot_tools**. In the simplest
+case you may:
+
+```none
+git checkout -b my_hack origin/master # make your branch
+# hack hack hack
+git add your/file1 your/file2
+git commit -m "do my hack with GCC"
+git-cl upload --send-mail -r reviewer@chromium.org
+# fix stuff during review
+git commit --amend your/fixed/file1
+git-cl upload
+# you've got an LGTM
+git-cl push
+```
+
+## Testing the toolchain (the GCC testsuite)
+
+#### Currently it is only easy to run the tests in x86-64 mode, x86-32 testing is broken. To run all tests:
+
+```none
+make -j4 check SDKLOC=/path/to/your/location
+```
+
+To run one of the three testsuites (c++ testsuite in this case):
+
+```none
+make DEJAGNU=/your/native_client/tools/dejagnu/site.exp check-c++ RUNTESTFLAGS="SIM=/your/sel_ldr --target_board=nacl --outdir=your-directory-for-reports"
+```
+
+To run a subset of a testsuite governed by some '.exp' config file just add the
+name of the file (without path to it) as additional parameter to runtest:
+
+<pre><code>
+cd your-native-client/native_client/tools/BUILD/build-gcc-nacl64/gcc
+DEJAGNU=your-dejagnu/site.exp <b>runtest</b> --tool gcc --target_board=nacl --outdir=/tmp/your-temp-dir SIM=/your/sel_ldr builtins.exp
+</code></pre>
+
+You may limit running tests to a single file. Again, the file name should omit
+the path part:
+
+<pre><code>
+cd your-native-client/native_client/tools/BUILD/build-gcc-nacl64/gcc
+DEJAGNU=your-dejagnu/site.exp <b>runtest</b> --tool gcc --target_board=nacl --outdir=/tmp/your-temp-dir SIM=/your/sel_ldr builtins.exp<b>=strncat-chk.c</b>
+</code></pre> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md
new file mode 100644
index 00000000000..8605f2222e7
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux/index.md
@@ -0,0 +1,52 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
+ - Debugging a Trusted Plugin
+page_name: debugging-a-trusted-plugin-on-linux
+title: Debugging a Trusted Plugin on Linux
+---
+
+1. Get a Chromium check-out. You can usually use the revision from the
+ nacl-sdk DEPS file.
+2. You don’t need to build all of chromium, just pepper.
+ 1. Go to the src/ directory in your check-out
+ 2. type: ‘make ppapi_tests’ to build the pepper tests as well as
+ any libraries they depend on. You’ll end up with libppapi_cpp.a
+ and libppapi_cpp_object.a.
+3. Build trusted version of the code
+ 1. For a C plugin you don’t have to link against anything. ppapi C
+ is all headers.
+ 2. For C++, you need libppapi_cpp.a and libppapi_cpp_objects.a.
+ Link against ppapi_cpp_objects and ppapi_cpp from chrome.
+ 1. link order matters: ppapi_cpp_objects has to come before
+ ppapi_cpp
+ 3. Be sure to specify -fno-rtti and -fPIC since chrome does not
+ build run-time type information by default, and you’ll be
+ generating a shared library as your plugin.
+ 4. For the linking step, be sure to specify -shared
+4. To load your plugin, your application will need an embed tag. For
+ trusted plugins this should not have a “nacl” but a regular “type”
+ attribute, for example: type="application/x-hello-world"
+5. Unlike with an untrusted plugin, instead of handling a onload event
+ in the EMBED tag, you have to call moduleDidLoad() directly after
+ the EMBED tag.
+6. To debug, you have to use Chromium - best is to get a waterfall for
+ your platform build from
+ http://build.chromium.org/f/chromium/snapshots/ You can also finish
+ the chromium build you checked out but be prepared to wait a while.
+ This style of debugging is not supported with Google Chrome Dev
+ Channel
+7. In a shell, launch chrome with the following arguments:
+ 1. --user-data-dir=/tmp/nacl_debugging_chrome_profile
+ 2. --register-pepper-plugins="location/of/your/plugin.so;application/x-hello-world"
+ 3. --single-process
+ 4. file://location/of/your/web_page.html
+8. In Chrome, create a new tab and visit about:memory, this will list
+ the pid of the plugin tab.
+9. You can now use gdb to attach to the pid and debug your plugin \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md
new file mode 100644
index 00000000000..7c6ecdab808
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-trusted-plugin-on-windows/index.md
@@ -0,0 +1,81 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
+ - Debugging a Trusted Plugin
+page_name: debugging-trusted-plugin-on-windows
+title: Debugging a Trusted Plugin on Windows
+---
+
+1. Get VS2008
+2. Set up the project/Solution using the wizard: make a Win32 Console
+ app, and then click through the wizard to modify the project to be a
+ Win32 DLL, that exports symbols. Visit here for more info:
+ <http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx>
+3. In the project properties, turn off precompiled headers. Do this so
+ you can use the same #include stack in your sources to build both
+ untrusted and trusted.
+4. Note: I ran into problems using the ppapi headers that come with
+ NaCl:
+ 1. 1&gt;d:\\native_client_sdk\\toolchain\\win_x86\\nacl64\\include\\machine\\_types.h(19)
+ : fatal error C1083: Cannot open include file:
+ 'native_client/src/include/portability.h': No such file or
+ directory
+ 2. I tried -D__native_client__, but this produced even more errors.
+ 3. To resolve this, I copied toolchain/win_x86/nacl64/include/ppapi
+ to sit at the same level as examples
+5. In the project properties, add &lt;native_client_sdk&gt; to the
+ header search paths.
+6. After copying the ppapi headers, the project still won't build
+ because I need to copy in the ppapi C++ sources and build them too.
+ I DEPSed in the ppapi sources from nacl/ppapi and added all the
+ files in ppapi/cpp/\*.cc to the VS project.
+7. I had to change some source files. When you build under nacl-gcc,
+ things like inttypes.h (and stdint.h) are automagically part of the
+ #include chain. This is not so when building trusted. In this case,
+ I added #include &lt;ppapi/c/pp_stdtype.h&gt; to the files that
+ needed it. (Note that on Windows, there does not seem to be a
+ &lt;stdint.h&gt; or &lt;inttypes.h&gt;).
+8. Edit hello_world/hello_world.html so that the embed tag has
+ type="application/x-hello-world" and no nacl= attribute.
+9. Instead of handling a onload event in the EMBED tag, you have to
+ call moduleDidLoad() directly after the EMBED tag.
+10. Run the local HTTP server in examples.
+11. Once the DLL is built, run chrome
+ --register-pepper-plugins="d:\\native_client_sdk\\examples\\NaClExamples\\HelloWorld\\Debug\\HelloWorld.dll;application/x-hello-world"
+ --user-data-dir=d:\\trusted-debug-profile
+ --wait-for-debugger-children
+12. Visit localhost:5103 and run the hello_world example.
+13. To debug the DLL you have to attach to the right process. It isn't
+ clear how you find this, other than by guessing. I had limited
+ success in pulling up the Debug -&gt; Attach... panel, then
+ launching chrome and visiting
+ localhost:5103/hello_world/hello_world.html, then hitting Refresh on
+ the Attach panel and attaching the the new "chrome.exe" process. I
+ have not been able to figure out how to debug startup issues. There
+ are some extra debugging hints here:
+ <http://www.chromium.org/developers/how-tos/debugging>
+
+Implications:
+
+1. The SDK will have to DEPS in and bundle src/ppapi from the chromium
+ project.
+2. When building a trusted plugin, you have to use the chromium ppapi
+ headers and build the .cc files, then switch over to different
+ headers and link with libppapi_cpp.a to build a .nexe. We could
+ automate some of this by adding a build step in the SDK to build
+ libppapi_cpp.a and bundling that library.
+3. **Potential show-stopper**: on Windows, there is no built-in
+ pthreads library. This means the pi_generator example will not
+ build, nor will any other app that uses pthread, unless we can find
+ a pthreads lib that we can re-distribute.
+4. **Potential show-stopper**: None of this work allows for .dso's,
+ which are ELF. These will not load on Windows. Not sure if it's
+ possible to make .dso's into DLLs and mimic the dynamic loading
+ process. dlopen() will not work for the same reason that pthreads
+ don't work (no Windows support). \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md
new file mode 100644
index 00000000000..36f6cfd7c34
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/index.md
@@ -0,0 +1,33 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+page_name: debugging-a-trusted-plugin
+title: Debugging a Trusted Plugin
+---
+
+In some cases it can be useful to develop/port your Native Client module using a
+two-step process, first as a non-portable trusted Pepper plugin for Windows,
+Mac, or Linux, then porting to Native Client. In particular this approach allows
+you to use the standard debuggers and tools from your preferred desktop
+operating system during trusted plugin development.
+
+Developers should be mindful of the following potential issues when planning
+this course of development:
+
+* Some libraries commonly used with Native Client will not build
+ easily on all operating systems.
+* Threading models differ between trusted Pepper and untrusted Pepper
+ implementations.
+* Extra effort may be required to get source to compile with multiple
+ different compilers, for example GCC vs. MS Visual Studio.
+* Certain operations such as platform-specific library calls and
+ system calls may succeed during trusted development but fail in
+ Native Client.
+
+With this in mind, these sub-pages provide some tips on working with trusted
+Pepper plugins on Windows, Mac and Linux. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md
new file mode 100644
index 00000000000..a6508f76533
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac/index.md
@@ -0,0 +1,63 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin
+ - Debugging a Trusted Plugin
+page_name: trusted-debugging-on-mac
+title: Debugging a Trusted Plugin on Mac
+---
+
+<table>
+<tr>
+
+1. <td>Make an new Xcode project, use the GUI to make a Bundle project
+ that uses Core Foundation.</td>
+2. <td>Add existing NaCl sources</td>
+3. <td>DEPS in ppapi from chromium, add the C++ sources - create a
+ Group and add the ppapi files directly. Adding ppapi as a folder
+ reference doesn't work.</td>
+4. <td>Set "Header search paths" to point to the chromium ppapi headers
+ (|SDK_root|/third_party), NOT the built-in NaCl headers.</td>
+5. <td>Add the SDK root to "Header Search Paths"</td>
+6. <td>Build the plugin.</td>
+7. <td>Edit hello_world/hello_world.html so that the embed tag has
+ type="application/x-hello-world" and no nacl= attribute.</td>
+8. <td>Instead of handling a onload event in the EMBED tag, you have to
+ call moduleDidLoad() directly after the EMBED tag.</td>
+9. <td>Make sure to uncheck "Load Symbols Lazily" in the Debugging
+ panel of Xcode preferences.</td>
+10. <td>To debug, you have to use Chromium - best is to get a waterfall
+ build from http://build.chromium.org/f/chromium/snapshots/Mac/. This
+ style of debugging is not supported with Google Chrome Dev
+ Channel</td>
+ 1. <td>In Xcode, ctrl-click on "Executables" and select "Add Custom
+ Executable…".</td>
+ 2. <td>Call the new custom exec, say, "Chromium Dev"</td>
+ 3. <td>Point it at the .app wrapper for Chromium that you got from
+ the waterfall, e.g. ~/Downloads/chrome-mac/Chromium.app.</td>
+ 4. <td>Add these arguments in the Arguments tab:</td>
+ 1. <td>--user-data-dir=/tmp/nacl-debug-profile</td>
+ 2. <td>--register-pepper-plugins="$HOME/Source/nacl-sdk/src/examples/hello_world/HelloWorld/build/Debug/HelloWorld.bundle;application/x-hello-world"</td>
+ 3. <td>--single-process</td>
+ 4. <td>file://$HOME/Source/nacl-sdk/src/examples/hello_world/hello_world.html</td>
+11. <td>It is possible to debug a plugin using Chrome Dev channel, but
+ it's a little more raw:</td>
+ 1. <td>In a shell, run Chrome like this: Google\\
+ Chrome.app/Contents/MacOS/Google\\ Chrome
+ --user-data-dir=/tmp/nacl-debug-profile
+ --register-pepper-plugins="$HOME/Source/nacl-sdk/src/examples/hello_world/HelloWorld/build/Debug/HelloWorld.bundle;application/x-hello-world"
+ file://$HOME/Source/nacl-sdk/src/examples/hello_world/hello_world.html</td>
+ 2. <td>In Chrome, create a new tab and visit about:memory, this
+ will list the PID of the plugin tab.</td>
+ 3. <td>In Xcode, Run -&gt; Attach To Process, then pick the
+ appropriate PID.</td>
+ 1. <td>Note: if you get various errors about formatting, just
+ click "Continue"</td>
+
+</tr>
+</table> \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md
new file mode 100644
index 00000000000..8c7afa9da77
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-chrome-os/index.md
@@ -0,0 +1,51 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
+ - Debugging with debug stub (recommended)
+page_name: debugging-nacl-apps-in-chrome-os
+title: Debugging NaCl apps in Chrome OS
+---
+
+It is not possible to run debugger on Chrome OS without using dev mode. Luckily,
+debugger uses network connection to communicate with the NaCl debug stub. This
+makes remote debugging possible with debugger running on a remote machine and
+NaCl application running on Chrome OS machine.
+
+## Prepare Chrome OS for NaCl debugging
+
+On chrome://flags page there are two flags related to NaCl debugging. We need to
+enable "Native Client GDB-based debugging" flag and switch "Restrict Native
+Client GDB-based debugging by pattern" to "Debug everything except secure shell"
+or "Debug only if URL manifest ends with debug.nmf" value. Changes on
+chrome://flags page require browser restart to take effect. Log out, close and
+open the lid to restart the browser. If they are set properly, secure shell
+extension should work, but NaCl application we are trying to debug should hang
+waiting for debugger to connect.
+
+## Tunneling debugger connection
+
+Once you launch your NaCl application now, the NaCl debug stub opens 4014 port
+on Chrome OS machine. This port is not accessible from outside, so we need to
+tunnel it through ssh connection to remote machine. There are two ways to do
+this.
+
+The first way is to open new secure shell tab or window and add "-R
+port-number:localhost:4014" to "SSH Arguments" field before connecting to remote
+computer. Then you can use secure shell to launch NaCl debugger on that machine
+where you should use "target remote :port-number" command to connect to debug
+stub running on Chrome OS.
+
+The second way is to use an existing secure shell tab or window. Press enter, ~,
+shift+c. This combination opens ssh-prompt where you can enter "-R
+port-number:localhost:4014" command. Pressing enter returns control to normal
+shell where you can launch NaCl debugger and use "target remote :port-number"
+command to connect to debug stub running on Chrome OS.
+
+In both cases the port number can be any free port number on the remote machine
+above 1024 including 4014. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1
new file mode 100644
index 00000000000..10b369ee135
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 1.png.sha1
@@ -0,0 +1 @@
+ca64943da2b5ad39c4b082ce05ef6bc5d50f6ba3 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1
new file mode 100644
index 00000000000..688b4cf55de
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse add directory path 2.png.sha1
@@ -0,0 +1 @@
+b65fdac12539c396a69eb5a8bcac50b08d977508 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1
new file mode 100644
index 00000000000..e05359bfe83
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build behaviour tab.png.sha1
@@ -0,0 +1 @@
+0217e502261b5990339938cf0e151cc6475d041a \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1
new file mode 100644
index 00000000000..5934dc4f52d
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build variables.png.sha1
@@ -0,0 +1 @@
+7ec46055e3a1f1d8f67e0523e8680d114cb4ca88 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1
new file mode 100644
index 00000000000..8b2b25aa248
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse build.png.sha1
@@ -0,0 +1 @@
+7055e7c625e190952b97e8f8af0b40dba722cb16 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1
new file mode 100644
index 00000000000..d107fc5d32e
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse consoles.png.sha1
@@ -0,0 +1 @@
+9066bfef70126de352541877343b8bf0a891143b \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1
new file mode 100644
index 00000000000..d931d716598
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Gdbserver Settings.png.sha1
@@ -0,0 +1 @@
+bec5808b06a22da25deff8483263b7cec981d28a \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1
new file mode 100644
index 00000000000..cf82235a046
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration Debugger Main.png.sha1
@@ -0,0 +1 @@
+e78f102d96325e58310fac701e30f94c55f44810 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1
new file mode 100644
index 00000000000..17d7d7c0301
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc Debugger Main.png.sha1
@@ -0,0 +1 @@
+0e046c14ee92b0f939ff9b0ea62977dd00e03813 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1
new file mode 100644
index 00000000000..e3c1788a897
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration glibc main.png.sha1
@@ -0,0 +1 @@
+f1c519aa044c7c7ae4bdb59031bd51b635fb8d26 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1
new file mode 100644
index 00000000000..c92c53401a0
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug configuration main.png.sha1
@@ -0,0 +1 @@
+c120f1938f8513eaa852f63ede2126c777938081 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1
new file mode 100644
index 00000000000..8584eafa229
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse debug icon.png.sha1
@@ -0,0 +1 @@
+0d9788d92532b0ee7fba7ce0b93f4d0ad6c778cd \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1
new file mode 100644
index 00000000000..3f888727957
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse gdb_init file.png.sha1
@@ -0,0 +1 @@
+79f88416480f41213ce2b4ac87710d2efbd47fff \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1
new file mode 100644
index 00000000000..72068aeb700
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse glibc hit breakpoint.png.sha1
@@ -0,0 +1 @@
+0c98492e6c4bed40599fc61dbfe44711eb7b0576 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1
new file mode 100644
index 00000000000..9c2c4345d88
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hammer icon.png.sha1
@@ -0,0 +1 @@
+ea173ca1523505dbe55d04b37411809a23766643 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1
new file mode 100644
index 00000000000..8d578dd84db
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse hit breakpoint.png.sha1
@@ -0,0 +1 @@
+5ff7261a75a702d6ee9606570c16565c57520b75 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1
new file mode 100644
index 00000000000..49a9695a226
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse last debug configurations.png.sha1
@@ -0,0 +1 @@
+f565b31f9413db44cbba83a9a8685cf05fe56109 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1
new file mode 100644
index 00000000000..97a4d9d2353
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new build variable.png.sha1
@@ -0,0 +1 @@
+9d14e3854ff56820abbdc18f0bd10b880fa6d1a0 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1
new file mode 100644
index 00000000000..6ca1151e012
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new debug configuration icon.png.sha1
@@ -0,0 +1 @@
+e186a744d20b1ef135dff670ad94f6870c93aa05 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1
new file mode 100644
index 00000000000..5f6a8b60c64
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse new project.png.sha1
@@ -0,0 +1 @@
+03a39fa04ee83dcc4d323a70df939a1cdddd9c27 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1
new file mode 100644
index 00000000000..66ada924981
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse output location.png.sha1
@@ -0,0 +1 @@
+599c895aebaec53f8775d0ba12af5385101b7dea \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1
new file mode 100644
index 00000000000..50c5c875e6d
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse project view.png.sha1
@@ -0,0 +1 @@
+f288a4e038d156f78555c26ea6703f67b5ff582e \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1
new file mode 100644
index 00000000000..77e740b7734
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse select preferred launcher.png.sha1
@@ -0,0 +1 @@
+8c91e6461916b23f0478ecd94f15a6a12d9573f4 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1
new file mode 100644
index 00000000000..76191ae9887
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse source location.png.sha1
@@ -0,0 +1 @@
+f539c3ce5f461bad6b652e8efd05f18e13ce85e9 \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1 b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1
new file mode 100644
index 00000000000..ba080511cfc
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse with indexer enabled.png.sha1
@@ -0,0 +1 @@
+1424cd15ac7fdaee490cd965e023001a17a729bb \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md
new file mode 100644
index 00000000000..6014b39c661
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/index.md
@@ -0,0 +1,222 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
+ - Debugging with debug stub (recommended)
+page_name: debugging-nacl-apps-in-eclipse-cdt
+title: Debugging NaCl apps in Eclipse CDT
+---
+
+Eclipse CDT plugin is designed for development with GNU tools. Its flexibility
+allows to configure it for developing NaCl applications without using any
+additional plugins. The cost of this flexibility is that a lot of advanced
+features are not available. The following instructions are written for Windows
+but they can be used on any OS if you replace Windows paths to paths on your OS.
+
+## Creating NaCl project
+
+Create NaCl Project directory inside Eclipse workspace
+(C:\\Users\\username\\workspace by default). Copy all files from
+nacl_sdk\\pepper_22\\examples\\hello_world except hello_world.c to this
+directory. Create src subdirectory and copy hello_world.c file there. Placing
+source files in the src directory makes cleaner project structure. Now go to
+File-&gt;New-&gt;Makefile Project with Existing Code menu in Eclipse. Choose
+project name, enter project folder location and select Cross GCC toolchain.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20project.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20project.png)
+
+Your new project will look like this.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20project%20view.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20project%20view.png)
+
+## Building NaCl project
+
+Open Makefile in the editor. Comment out lines
+ALL_TARGETS+=win/Debug/hello_world.nmf and
+ALL_TARGETS+=win/Release/hello_world.nmf and replace hello_world.c with
+src/hello_world.c (Edit-&gt;Find/Replace... in the menu or Ctrl+F with default
+key bindings). Then right click on the project and choose Preferences in the
+popup menu. Go to C/C++ Build-&gt;Build Variables page and add NACL_SDK_ROOT
+variable. Point the variable to the pepper version you want to build with. If
+you downloaded NaCl SDK to c:\\nacl_sdk directory and want to use 22 pepper, set
+it to c:\\nacl_sdk\\pepper_22.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20build%20variable.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20build%20variable.png)
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20variables.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20variables.png)
+
+Now we can use this variable to set build command on C/C++ Build page to
+${NACL_SDK_ROOT}/tools/make NACL_SDK_ROOT=${NACL_SDK_ROOT}. On Linux and Mac use
+make NACL_SDK_ROOT=${NACL_SDK_ROOT}.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build.png)
+
+Enable parallel build on Behaviour tab.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20behaviour%20tab.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20build%20behaviour%20tab.png)
+
+Press OK in properties window. You can now build the project by right clicking
+on it and selecting Build Project in the popup menu or by pressing hammer icon
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hammer%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hammer%20icon.png)
+in the toolbar. Make build log will be shown in console view.
+
+## Set up eclipse indexer
+
+Eclipse indexer doesn't use external compiler and so it should be configured
+separately. Open project properties and go to C/C++ General-&gt;Paths and
+Symbols page. Open Source Location tab, add src folder using Add Folder...
+button and remove root of the project using Delete button.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20source%20location.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20source%20location.png)
+
+Then go to Output Location path, add glibc and newlib folders there and remove
+root of the project.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20output%20location.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20output%20location.png)
+
+Now let us setup include paths. Go to Includes tab and press Add... button.
+Enter ${NACL_SDK_ROOT}/include in the directory field and select Add to all
+configurations and Add to all languages checkboxes.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%201.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%201.png)
+
+Then press Add... button again and add
+${NACL_SDK_ROOT}/toolchain/win_x86_glibc/x86_64-nacl/include directory (replace
+win_x86_glibc with linux_x86_glibc or mac_x86_glibc if you use Linux or Mac OS X
+accordingly).
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%202.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20add%20directory%20path%202.png)
+
+Press OK button in properties window and open hello_world.c. There should not be
+any compile errors now.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20with%20indexer%20enabled.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20with%20indexer%20enabled.png)
+
+## Debug NaCl newlib application
+
+Launching and debugging applications in Eclipse is done via running and
+debugging configurations. Usually they are created automatically. Unfortunately,
+NaCl debugging is done using remote debugging protocol. Setting up remote
+connection requires parameters that can't be determined automatically. So we
+have to create debugging configuration by hand. Go to Run-&gt;Debug
+Configurations... menu or press on debug icon arrow [<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20icon.png)
+in toolbar and choose Debug Configurations... in the popup menu. Select C/C++
+Remote Application in Debug Configurations windows and press new button [<img
+alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20debug%20configuration%20icon.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20new%20debug%20configuration%20icon.png)
+above filter text field or choose New in the popup menu.
+
+Change configuration name to NaCl Project newlib and fill C/C++ Application
+field with ${workspace_loc}\\NaCl
+Project\\newlib\\Debug\\hello_world_x86_64.nexe. We use ${workspace_loc} instead
+of ${project_loc} since the later depends on currently selected project.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20main.png)
+
+Now press Select other link at the bottom of the window. If you don't see the
+link, skip this step. Select Use configuration specific settings checkbox and
+choose GDB (DSF) Manual Remote Debugging Launcher in the list.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20select%20preferred%20launcher.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20select%20preferred%20launcher.png)
+
+Press OK and go to the debugger tab. Change Stop on startup at field to
+Instance_DidCreate or deselect the Stop on startup checkbox. On Main tab in
+Debugger Options set GDB debugger field to
+c:\\nacl_sdk\\pepper_canary\\toolchain\\win_x86_glibc\\bin\\x86_64-nacl-gdb.exe.
+Ensure that Non-stop mode checkbox is not selected since nacl-gdb doesn't
+support this mode.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Main.png)
+
+Set port number to 4014 in Gdbserver Settings tab.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Gdbserver%20Settings.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20Debugger%20Gdbserver%20Settings.png)
+
+Save debug configuration by clicking Apply button.
+
+Now you need to launch chrome with --no-sandbox and --enable-nacl-debug flags
+and run your NaCl application. NaCl debug stub will stop application at first
+instruction. Then you need to open Debug Configuration window, select our debug
+configuration and press Debug button. Next time, you can launch it by pressing
+debug icon arrow that shows 10 last debug configurations.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20last%20debug%20configurations.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20last%20debug%20configurations.png)
+
+When program will stop on the start breakpoint or breakpoint you set in project,
+Eclipse will switch to debug perspective.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hit%20breakpoint.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20hit%20breakpoint.png)
+
+## Debugging NaCl glibc application
+
+Create gdb_init.txt file and add line nacl-manifest
+"c:\\\\Users\\\\username\\\\workspace\\\\NaCl
+Project\\\\glibc\\\\Debug\\\\hello_world.nmf". If you use debugger from
+pepper_29+, you don't need to double slashes.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20gdb_init%20file.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20gdb_init%20file.png)
+
+Go to Run-&gt;Debug configuration... menu and duplicate newlib debug
+configuration using Duplicate item in popup menu. Change new configuration name
+to NaCl Project glibc and C/C++ Application field to ${workspace_loc}\\NaCl
+Project\\glibc\\Debug\\lib64\\runnable-ld.so.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20main.png)
+
+Then go to Debugger tab and change GDB command file on Main subtab to
+c:\\Users\\username\\workspace\\NaCl Project\\gdb_init.txt. Ensure that Non-stop
+mode checkbox is not selected.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20Debugger%20Main.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20debug%20configuration%20glibc%20Debugger%20Main.png)
+
+Press Apply button and close the window. Now you need to run your NaCl
+application in chrome with --enable-nacl-debug and --no-sandbox flags, select
+this debug configuration in Debug Configurations window and press Debug button.
+You may see some error messages like
+
+```none
+No source file named hello_world.c.
+warning: Could not load shared library symbols for runnable-ld.so.
+Do you need "set solib-search-path" or "set sysroot"?
+```
+
+You should ignore them.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20glibc%20hit%20breakpoint.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20glibc%20hit%20breakpoint.png)
+
+## Troubleshooting
+
+If something goes wrong, you can look on gdb input and output. Press on the
+arrow of console icon in Console view to show "NaCl Project glibc \[C/C++ Remote
+Application\] gdb traces" console.
+
+[<img alt="image"
+src="/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20consoles.png">](/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/debugging-nacl-apps-in-eclipse-cdt/eclipse%20consoles.png) \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md
new file mode 100644
index 00000000000..5ceee4ee604
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/getting-started-with-debug-stub/index.md
@@ -0,0 +1,121 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+- - /nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended
+ - Debugging with debug stub (recommended)
+page_name: getting-started-with-debug-stub
+title: Getting started with debug stub
+---
+
+### Introduction
+
+New versions of chrome include NaCl with debug stub support. If
+--enable-nacl-debug switch is passed to chrome or -g switch is passed to
+sel_ldr, all NaCl applications start with the debug stub enabled. The debug stub
+stops untrusted code at the first instruction inside the IRT and listens on a
+TCP port of localhost network interface (4014 currently) for incoming connection
+from nacl-gdb. When nacl-gdb connects to the debug stub, they talk with each
+other using RSP protocol. Since remote debugging does not need to use
+OS-specific debugging functions, we need only one version of nacl-gdb for both
+32 and 64-bit debugging. Moreover, if one forwards port to a remote machine, it
+is possible to use nacl-gdb for one OS to debug NaCl application on a different
+OS. All the differences between OSes are abstracted away by debug stub.
+
+## Get the debugger
+
+The debugger is included in the latest version of NaCl SDK. It is located in
+nacl_sdk/pepper_canary/toolchain/linux_x86_glibc/bin/x86_64-nacl-gdb on Linux,
+nacl_sdk/pepper_canary/toolchain/win_x86_glibc/bin/x86_64-nacl-gdb.exe on
+Windows, etc. Debuggers in \*_x86_glibc and \*_x86_newlib directories are
+exactly the same. You can use either one on them. Moreover, unlike the rest of
+SDK, you can copy debugger to a different folder.
+
+Regarding the pepper and chrome versions, the latest debugger should work with
+the previous versions of chrome/sel_ldr but new functionality may be missing.
+
+## Debugging NaCl applications in Chrome
+
+NaCl applications can be launched using two ways in Chrome. You can load
+unpacked extension on [chrome://chrome/extensions/](javascript:void(0);) page
+(switch on developers mode) and open it. Alternative way is to launch a web
+server and either launch chrome with --enable-nacl switch or enable NaCl
+applications outside of Chrome Web Store or
+[chrome://flags/](javascript:void(0);) page (you need to relaunch chrome after
+that). In order to switch on debug stub support, you need to pass
+--enable-nacl-debug and --no-sandbox switches to chrome. Create a shell script
+that launches chrome with these flags. You can also add
+--user-data-dir=some-path to use a separate profile.
+
+### Debugging newlib applications
+
+In order to debug NaCl application, you need to launch Chrome and open NaCl
+application there first. Then run x86_64-nacl-gdb. Enter following commands
+there. If you have spaces in paths, use quotes and double all slashes (or use
+backslashes). For pepper29+ debugger you should use quotes without doubling
+slashes.
+
+```none
+(gdb) file c:\nacl_sdk\pepper_canary\examples\hello_world\newlib\Debug\hello_world_x86_64.nexe
+(gdb) target remote :4014
+```
+
+Point file command to 64-bit nexe on 64-bit platforms and to 32-bit nexe on
+32-bit platforms. Then you can use all normal gdb commands.
+
+### Debugging glibc applications
+
+Debugging glibc applications is harder. You need to use following commands.
+
+```none
+(gdb) nacl-manifest c:\nacl_sdk\pepper_canary\examples\hello_world\glibc\Debug\hello_world.nmf
+(gdb) target remote :4014
+```
+
+If you launched NaCl as unpacked chrome extension or from local http server, you
+already have the NaCl manifest file which you should use here. If you launched
+NaCl from an external http server, you need to download \*.nmf, \*.nexe and
+\*.so files of the NaCl application and place them in the same directory
+structure that is used on the server (\*.nmf file uses relative paths to
+reference main executable and libraries). Then point nacl-manifest command to
+the downloaded \*.nmf file.
+
+### Debugging with IRT symbols
+
+You can additionally load IRT symbols. This helps to understand what application
+is doing when it is stopped inside NaCl syscall.
+
+```none
+nacl-irt c:\Users\username\AppData\Local\Google\Chrome SxS\Application\23.0.x.x\nacl_irt_x86_64.nexe
+```
+
+### Automatic debugger launching
+
+Chrome can be configured to launch debugger automatically. Use additional
+command-line option --nacl-gdb="path-to-nacl-gdb" on Windows or
+--nacl-gdb="command line to launch nacl-gdb in the new shell" on Linux. You can
+use --nacl-gdb-script="path-to-gdb-script" to execute your gdb script at start
+up. Chrome will autodetect its IRT location and execute nacl-irt command.
+Additionally, if NaCl application is in a chrome extension, nacl-manifest
+command is executed automatically. Example chrome command lines are shown below.
+
+```none
+chrome.exe --enable-nacl-debug --no-sandbox "--nacl-gdb=c:\nacl_sdk\pepper_canary\toolchain\win_x86_glibc\bin\x86_64-nacl-gdb" "--nacl-gdb-script=c:\Users\User Name\Documents\script.gdb"
+```
+
+```none
+./chrome --enable-nacl-debug --no-sandbox "--nacl-gdb=xterm /home/user_name/nacl_sdk/pepper_canary/toolchain/linux_x86_glibc/bin/x86_64-nacl-gdb" --nacl-gdb-script=/home/user_name/script.gdb
+```
+
+## Debugging NaCl applications in sel_ldr
+
+Debugging command line NaCl applications is enabled by passing -g switch to
+sel_ldr. Newlib debugging is the same, glibc debugging requires creating an
+artificial manifest. You need to reference runnable-ld.so, main executable and
+all \*.so libraries using relative paths from manifest file. If you want to load
+IRT symbols, use nacl-irt command with the same IRT that is passed to sel_ldr
+using -B switch. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md
new file mode 100644
index 00000000000..9a836944c1a
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/debugging-with-debug-stub-recommended/index.md
@@ -0,0 +1,19 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+- - /nativeclient/how-tos/debugging-documentation
+ - Debugging Documentation
+page_name: debugging-with-debug-stub-recommended
+title: Debugging with debug stub (recommended)
+---
+
+Debug stub is a new way to debug NaCl applications. If --enable-nacl-debug and
+--no-sandbox switches are passed to chrome or -g switch is passed to sel_ldr, a
+local TCP port is opened that accepts incoming TCP connections from a debugger
+via RSP protocol. This port is opened on localhost network interface, so one
+need to forward this port to debug NaCl application from remote computer. This
+method of debugging is preferred since debug stub inside NaCl process have an
+intimate knowledge about NaCl application. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md
new file mode 100644
index 00000000000..041a7914015
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/debugging-documentation/index.md
@@ -0,0 +1,72 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: debugging-documentation
+title: Debugging Documentation
+---
+
+**The Basics**
+
+The NaCl team is hard at work developing an integrated debugging solution(1).
+But before this feature is available, developers must resort to alternative
+debugging techniques. These techniques are described here (with reservation!)
+First, Native Client applications can be debugged the old school way: with
+printf() and logging. Second, to a limited degree, Native Client can be debugged
+with the host's GDB, but using normal GDB will have problems resolving addresses
+-- some manual tweaking needs to be done to map NaCl addresses into the global
+address space GDB is using. Third, there are some experimental patches to
+customize GDB which enable various degrees of debugging untrusted code.
+
+First, we recommend debugging as much as possible compiled as a normal trusted
+plugin/executable outside of Native Client, which of course will allow full use
+of debuggers such as GDB, MSVC, and WinDebug. Native Client most resembles
+Linux, so using GCC and POSIX will be the closest match to the NaCl runtime
+environment.
+
+For untrusted Native Client applications, we again recommend debugging on a
+Linux based host, and launching a debug build of Chrome from a terminal window.
+A Native Client application can use printf() which will output messages to the
+terminal window from which Chrome was launched.
+
+Native Client's Service Runtime can output debug messages to the terminal
+window. The level of detail in these logging messages can be controlled via the
+environment variable NACLVERBOSITY
+
+For example:
+
+developer@host:/home/developer/chrome/src/out/Debug$ export NACLVERBOSITY=3
+
+developer@host:/home/developer/chrome/src/out/Debug$ ./chrome –enable-nacl
+
+Additional messages from the plug-in can be separately enabled via
+NACL_SRPC_DEBUG environment variable.
+
+To capture log output to file “outfile” use:
+
+developer@host:/home/developer/chrome/src/out/Debug$ ./chrome –enable-nacl
+&&gt;outfile
+
+To get logs in Windows, you must instead run chrome with the environment
+variable NACLLOG=&lt;absolute path to log file / path relative to
+chrome.exe&gt;. This requires running Chrome with the --no-sandbox flag.
+
+**Getting the output from the Native Client Program on Windows:**
+
+On Linux and OSX, the Native Cilent application inherits standard output and
+standard error from Chrome, so though cumbersome, printf-style debugging is
+feasible. On Windows, like any non-console application, standard output and
+standard error outputs are thrown into the bit bucket. To get the Native Client
+application's output on Windows, set the NACL_EXE_STDOUT and NACL_EXE_STDERR
+environment variables to be the absolute path to files, and then start Chrome
+with the --no-sandbox flag. Output written to standard output and standard error
+will then be written to the specified files.
+
+**Getting the Process ID (PID) of the Native Client Program from Chrome:**
+
+Chrome -&gt; Developer-&gt;Task Manager, right-click process table header,
+toggle on "Process ID". The PID can be used to attach GDB to running Native
+Client processes. Or click on a new tab and type "about:memory" into the URL
+address bar. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md b/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md
new file mode 100644
index 00000000000..a0d49016546
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/exception-handling-interface/index.md
@@ -0,0 +1,93 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: exception-handling-interface
+title: Exception Handling Interface
+---
+
+## Introduction
+
+Hardware exceptions (invalid memory accesses, division by zero and etc) can not
+be caught in the standard C/C++. Different OS provide different mechanisms to
+catch hardware exception. POSIX standardizes hardware exception handling via
+signals. Native Client doesn't support signals but it provides somewhat similar
+interface. The main difference is that Native Client doesn't allow to resume
+execution from the failed instruction. Note, that exception handling is disabled
+for PNaCl because exception handling interface uses platform-dependent register
+context.
+
+## Retrieving Hardware Exception Handling Interface
+
+#include &lt;irt.h&gt;
+
+struct nacl_irt_exception_handling exception_handling_interface;
+
+size_t interface_size = nacl_interface_query(
+
+NACL_IRT_EXCEPTION_HANDLING_v0_1,
+
+&exception_handling_interface,
+
+sizeof(exception_handling_interface));
+
+if (interface_size != sizeof(exception_handling_interface)) {
+
+/\* error \*/
+
+}
+
+## Using nacl_exception Library
+
+An alternative way to access hardware exception handling interface is via
+nacl_exception library (it is part of libc). Add -lnacl_exception flag and use
+functions from `nacl/nacl_exception.h` header. They have the same parameters and
+their names are just prefixed with `nacl_exception`.
+
+## Handling Hardware Exceptions
+
+Hardware exception handlers are declared as
+
+`typedef void (*NaClExceptionHandler)(struct NaClExceptionContext *context);`
+
+in irt.h. They receive platform-dependent hardware exception context which
+contains the register state. This function should not return since there is
+nowhere to return to. Once exception handler is called, the exception handling
+is disabled on this thread. You must call
+
+`int exception_clear_flag(void);`
+
+if you need to reenable it (you want to handle hardware exceptions inside
+hardware exception handler for example). This function returns 0 on success and
+error code on error (exception handling is disabled). If hardware exception
+happens on a thread where exception handling is disabled, the whole NaCl process
+is terminated.
+
+The definition of `NaClExceptionContext` can be found in `nacl/nacl_exception.h`
+header.
+
+NaCl supports only one exception handler per process. The exception handler is
+set with
+
+`int exception_handler(NaClExceptionHandler handler,`
+
+` NaClExceptionHandler *old_handler);`
+
+This function returns 0 on success, or error code on error (exception handling
+is disabled, handler is not aligned to the bundle size or outside of code
+region, exception handler thread is failed to start). Old exception handler is
+returned via old_handler parameter. In order to disable exception handling, pass
+`NULL` exception handler.
+
+Exception handler is called on current thread stack by default. If you want to
+set alternative stack (to handle stack overflows for example) for exception
+handler, use
+
+`int exception_stack(void *stack, size_t size);`
+
+The alternative stack is set per thread. The function returns 0 on success and
+error code on error (stack location is outside of NaCl address space). If you
+want to disable alternative stack, call this function with `NULL` stack pointer
+and zero size. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md b/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md
new file mode 100644
index 00000000000..071caa29eea
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/how-to-use-git-svn-with-native-client/index.md
@@ -0,0 +1,194 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: how-to-use-git-svn-with-native-client
+title: Developing Native Client
+---
+
+**Setup from scratch**
+
+Native Client code depends on some external code that is not present in its own
+repository. These dependencies (aka DEPS) are managed by a tool called gclient
+that is part of Chromium's depot_tools package. Get depot_tools
+[here](/developers/how-tos/install-depot-tools) and put the directory (we'll
+call it $DEPOT_TOOLS) in your PATH.
+
+Then create a directory to hold Native Client and all its deps (We'll call it
+$NACL_DIR) and cd into it.
+
+```none
+cd $NACL_DIR
+```
+
+Then fetch the source code.
+
+```none
+fetch nacl
+```
+
+This command sets up a .gclient config file, fetches the Native Client sources
+from git, then reads the DEPS file checked into native client's git repository,
+and fetches the dependencies from their git repos.
+If you will be committing, you will also want to set up 'git cl', the
+depot_tools code review and commit tool.
+
+```none
+cd $DEPOT_TOOLS
+git cl config # just hit return at all the prompts
+```
+
+If you want to build 32 bit nacl on a x86_64 system, you also need to:
+
+```none
+cd $NACL_DIR
+sudo native_client/tools/linux.x86_64.prep.sh
+```
+
+Your workflow might be like the following:
+
+**Update your master branch**
+
+```none
+cd $NACL_DIR
+cd native_client
+git checkout master
+git pull
+gclient sync
+```
+
+The the 'git pull' command updates your origin/master branch to match the server
+and merges it into your local checked-out master branch. The 'gclient sync'
+command will pull down the dependencies specified in the DEPS file. If you use a
+local master branch in this way, you should not make local commits to it, or
+'git pull' will complain about non-fast-forward merges.
+
+**Create a new branch for a new CL**
+
+```none
+git checkout -b my_feature origin/master
+```
+
+(This is equivalent to git branch my_feature origin/master; git checkout
+my_feature)
+
+**Hack away, committing to git whenever you like**
+
+```none
+emacs $file
+git commit -a (roughly equivalent to git add $file; git commit)
+emacs $file
+git commit -a
+./scons $tests
+```
+
+I like to at least have a commit for every time I run a test (or try job) that
+takes sufficiently long that I won't sit and wait for it. That way when I come
+back and look at the results, I'm sure to have a snapshot of my code that was
+tested, even if I make new edits while the test is running.
+
+**Send a try job**
+
+```none
+git try
+```
+
+The 'git try' command will try whatever state you have committed in your local
+git repo (it will complain if you have uncommitted changes).
+
+If you use 'git cl try' it will try whatever patchset you have currently
+uploaded to Rietveld (see 'git cl upload' below).
+
+**Send out for code review**
+
+```none
+  git cl upload
+```
+
+This creates a new CL and associates it with the current branch (all commits on
+this branch are now assumed to be part of this CL). It then uploads it to the
+code review server. git cl upload also supports the -m option for the patch
+message, -r for reviewers, --cc for extra people to CC in the email, and a few
+others. If you commit a new change and run 'git cl upload' again, it will upload
+a new patchset to the existing CL.
+
+**Wait for the review to come back.**
+
+In the meantime, you can switch to another branch and work on something else.
+
+```none
+git fetch origin
+git checkout -b my_next_feature origin/master
+```
+
+The above sequence will base your next CL off of the current master.
+Alternatively you can base your new CL on your first one by omitting the last
+argument to 'git checkout'.
+
+**That mean reviewer wanted changes!**
+
+Edit based on results of review, then re-upload for more review
+
+```none
+git checkout my_feature
+emacs $file
+git commit -a
+git cl upload
+```
+
+**Got LGTM!**
+
+We are almost ready to commit to the server. However, while you were waiting,
+there were other commits to the master, so we need to rebase my_feature against
+the new HEAD and make sure everything still works. First, update the local
+master:
+
+```none
+git checkout master
+git pull
+gclient sync
+```
+
+Then, rebase your local changes off the new master:
+
+```none
+git checkout my_feature
+git rebase origin/master
+```
+
+Test, try and update as needed:
+
+```none
+./scons <tests>
+git try
+```
+
+Everything works! Commit it:
+
+```none
+git cl land
+```
+
+'git cl land' squashes all the changes you made on your branch into a single
+diff and commits them to the master branch in a single commit.
+
+Now you can update your local master again (to include the change you just
+committed) and start a new branch for your next CL.
+
+```none
+git checkout master
+git pull
+gclient sync
+git checkout -b my_even_newer_feature origin/master
+```
+
+If you have a CL already in flight (especially one that was branched off of your
+previous feature branch rather than master), you will probably want to rebase it
+against master now. After you have updated your master branch as above,
+
+```none
+git checkout my_next_feature
+git rebase origin/master
+``` \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md b/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md
new file mode 100644
index 00000000000..b3f35c86131
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/how-to-write-assembler-for-x86-nacl-platform/index.md
@@ -0,0 +1,339 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: how-to-write-assembler-for-x86-nacl-platform
+title: How to write assembler for x86 NaCl platform.
+---
+
+Before we'll go any further let me remid you that NaCl is OS-independent but
+CPU-dependent technology while pNaCl is both OS-independent and CPU-independent
+technology. Assembler is, of course, CPU-dependent and as such is not suitable
+for pNaCl.
+
+Ok. So we are dealing with NaCl and want to write some kind of assembler
+program.
+
+First of all, I don't plan to explain here how to write your program entirley in
+assembler languge.
+
+It's doable, but quite hard and rarely needed. I'll concentrate on a case of
+C/C++ program “with some assebler on the side”.
+
+Ok, so we want to call some assembler instruction not available via intrinsic.
+Let's use cpuid for our simple example.
+
+$ cat cpuid.c
+
+#include &lt;stdint.h&gt;
+
+#include &lt;stdio.h&gt;
+
+int main() {
+
+volatile uint32_t reg\[4\];
+
+__asm__ __volatile__(
+
+"cpuid"
+
+: "=a"(reg\[3\]), "=b"(reg\[0\]), "=c"(reg\[2\]), "=d"(reg\[1\])
+
+: "a"(0)
+
+: "cc");
+
+printf("%s\\n", (char \*)reg);
+
+}
+
+$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-gcc cpuid.c -o
+cpuid-32.nexe
+
+$ pepper_33/toolchain/linux_x86_newlib/bin/x86_64-nacl-gcc cpuid.c -o
+cpuid-64.nexe
+
+$ pepper_33/tools/sel_ldr.py cpuid-32.nexe
+
+DEBUG MODE ENABLED (bypass acl)
+
+GenuineIntel
+
+$ pepper_33/tools/sel_ldr.py cpuid-64.nexe
+
+DEBUG MODE ENABLED (bypass acl)
+
+GenuineIntel
+
+Looks like we can easily call cpuid from our NaCl program. How cool is that?
+Well, cool enough to write some simple program. In 32 bit mode. If you are
+lucky. In 64 bit mode. If you **very** lucky.
+
+Why? It's easy: only provably safe code can be executed on NaCl platform. And
+sooner or later you'll write code which will be declared UNSAFE by NaCl and
+it'll refuse to run it. In particular NaCl does not allow you to use arbitrary
+instructions in your code. Only “safe” instructions are allowed.
+
+Where is the list of safe instructions? [Here it
+is.](https://codereview.chromium.org/49183002/patch/2530001/2540004) This file
+is created automatically and lists all single instructions allowed in x86 32 bit
+NaCl mode. If you use instructions from it - you are golden, if you use
+instructions not mentioned there then validator will reject your code.
+
+There are a lot of instructions in this list and you can do a lot of things
+using them, but couple of instructions are suspiciously missing: call and ret.
+Well, call is there but only as call %eip (which basically means “call with any
+32bit offset” since script used to generate said list always uses offset equal
+to zero for the simplification), but ret is not present at all—and this **not**
+an error in script!
+
+Why would you need a call without ret? How could you return from function? And
+can you ever call function indirecly? Contemporary technologies use function
+pointers (in different forms) quite extensively. The answer to this question
+brings us to a *superinstruction* notion.
+
+In 32 bit case there are exactly two *superinstructions*: naclcall and nacljmp.
+They can be used with any 32 bit general purpose register (and only register,
+never memory!) to do an indirect jump. And i686-nacl-as also gives you the
+naclret macro which simply calls pop %ecx and then nacljmp %ecx (%ecx is picked
+because it's neither caller-saved register not callee-saved register in x86 ELF
+ABI).
+
+There are nothing magical in naclret, but naclcall and nacljmp **are** magical.
+How come? Let's see:
+
+$ cat nacljmp.s
+
+nacljmp %eax
+
+$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-as nacljmp.s -o nacljmp.o
+
+$ pepper_33/toolchain/linux_x86_newlib/bin/i686-nacl-objdump -d nacljmp.o
+
+nacljmp.o: file format elf32-i386-nacl
+
+Disassembly of section .text:
+
+00000000 &lt;.text&gt;:
+
+0: 83 e0 e0 and $0xffffffe0,%eax
+
+3: ff e0 jmp \*%eax
+
+As you can see this *superinstruction* actually combines two different
+instructions: and and jmp. This combination guarantees that target address for
+nacljmp is always aligned: you can not use nacljmp (or naclcall) to jump in the
+middle of 32-byte *bundle*. And i686-nacl-as guarantees that instructions in
+your code will never straggle boundary of such *bundle*. These two facts
+combined mean that code can be **statically** disassebled and verified. Which in
+turn means that NaCl validator does not effect performance of your code at all:
+it does it's work once, and then your code is executed by CPU directly without
+additional overhead (bundles and lack of ret will create some small overhead, of
+course, but it's very small). That's really, really cool. There is one tiny
+problem though: what happens if address which you are using as a target is not
+actually aligned? IOW: how can call work in this scheme. The answer is simple:
+call is magical in i686-nacl-as, too (and naclcall is doubly magical):
+i686-nacl-as always moves it to the end of bundle which means that address in
+stack is properly aligned.
+
+And now our description of 32 bit nacl assembler is essentially complete. You
+have the list of safe instructions, you use naclcall, nacljmp and naclret where
+needed and that's it.
+
+Now we are switching to 64 bit case. Before we'll discuss it we need to think a
+bit. All our manipulations work if **all** the code in your process adheres to
+the NaCl rules… but not all code in NaCl process image are like that! NaCl
+loaders include bunch of code compiled with a normal (non-NaCl) compiler and,
+more importantly, it's linked with system libraries which most definitely can
+not be recompiled with NaCl compiler (well… under Linux they could, but this
+approach will not work with MacOS or Windows). One jump to stray aligned ret—and
+the whole system is compromised. How **that** problem is solved? In 32 bit case
+the answer is simple: ***segment registers***! *Segment registers* are used to
+limit the reach of your code and that means that *untrusted code*, indeed, can
+not call *trusted code* (at least directly). There are some tiny pieces of
+*trusted code* injected in *untrusted zone* (*trampolines* and *springboards*)
+which are used to manage communication between trusted code and untrusted code
+but you never deal with these directly.
+
+But in 64 bit case this plan will not work! There are no segments in 64 bit
+mode!
+
+Right - and this is why 64 bit mode is significantly more involved and
+complicated. [Here is the list of safe
+instructions](https://codereview.chromium.org/49183002/patch/2530001/2540005).
+Let's take a look on a simple mov instruction. In 32 bit mode it was described
+as
+
+Instruction: 89 XX mov \[%eax..%edi\],\[%eax..%edi or memory\]
+
+Very simple instruction straight from Intel's (or AMD) manual. Any 32 bit
+general-purpose register can be moved to general-purpose register or memory. In
+64 bit case the same instruction is described quite differently:
+
+Instruction: \[REX:40..47\]? 89 XX mov \[%eax..%r15d\],\[%eax..%ebx|%esi..%r14d
+or memory\]
+
+That is: any 32 bit register can be moved to any 32bit register… except for
+%rbp, %rsp and %r15. Uhm... Why? What makes these registers special? Answer:
+they point to the *untrusted zone*. %r15 always points to the beginning of the
+untrusted zone (and can not be changed) while %rbp and %rsp can point to
+arbitrary point in the *untrusted zone*—but can only be changed by a limited set
+of instructions.
+
+Why do we do that? How can it limit memory accesses and make sure they never
+reach out of the *unstrusted zone*? Does at mean that you can only access memory
+placed on a fixed distance from %r15, %rbp, or %rsp? It'll be quite inefficient!
+
+Yes, it'll be inefficiant and that's why we introduce yet another concept:
+concept of restricted register. Conceptually restricted register is just a
+register which is guaranteed to be in the interval from 0 to 4'294'967'295. But,
+again, we don't try to create complex data models at the validation time.
+Instead we have a very simple rule: one instruction can produce restricted
+register while another one can consume restricted register—and these two
+instructions must be *immediately adjacent in the same bundle*. Here we use the
+interesting property of x86-64 ISA: any instruction which stores to 32bit
+register automatically cleans up top half of the corresponding 64bit register.
+That's what notes input_rr=… and output_rr=… mean in the safe list. They show
+which instruction produce restricted register and which instructions consume
+restricted register. Note that while many instructions can produce %rbp and/or
+%rsp as restricted register only few instruction accept %rbp and/or %rsp as
+restricted register. Which means that most %rbp and/or %rsp modifications are
+done as two-step operation: first you are doing something with %**e**bp or
+%**e**sp, then you immediatery add %**r**15 to %**r**bp or %**r**sp using lea or
+add.
+
+This is all well and good, but here we have a complication: validator knows that
+such tightly tied instructions must reside in a single bundle, but
+x86_64-nacl-as does not know that! It will happily place these two instructions
+into a different bundles and then code will be rejected by validator.
+
+How can we solve that problem? This is done with human's assistance. If you want
+to “glue two instruction together” you need to use the following construct:
+
+.bundle_lock
+
+lea (%rax,%rbx),%ecx
+
+mov (%rbp,%rcx),%edx
+
+mov (%r15,%rdx),%rax
+
+.bundle_unlock
+
+There are couple of interesting things to note here:
+
+* lea with 32 bit address registers is forbidden, use 64 bit version
+ with 32 bit register as destination—it's shorter and is just as
+ effective.
+* you can chain more than two instructions together—but you can not
+ reuse restricted register again. This sequence will be rejected:
+
+ .bundle_lock
+
+ lea (%rax,%rbx),%ecx
+
+ mov (%rbp,%rcx),%edx
+
+ mov (%r15,%rcx),%rax
+
+ .bundle_unlock
+
+This is all well and good but how can you do that in the inline assembler when
+you refer the arguments? When you use %0 will give you either 32 bit register or
+64 bit register (depending on what size argument was supplied to asm directive)
+and here we often need to deal with 32 bit registers and their 64 bit siblings!
+
+Actually GCC always had the appropriate mechanism, it's not NaCl-specific at
+all, it's just such mix of sizes is not common in “normal” programs. Consider:
+
+$ cat sizes_test.c
+
+int foo() {
+
+int i;
+
+long long ll;
+
+asm("mov %q0,%0"::"r"(i));
+
+asm("mov %q0,%0"::"r"(ll));
+
+asm("mov %k0,%0"::"r"(i));
+
+asm("mov %k0,%0"::"r"(ll));
+
+}
+
+$ gcc -S -O2 sizes_test.c -o-
+
+…
+
+foo:
+
+.LFB0:
+
+.cfi_startproc
+
+movl $1, %eax
+
+#APP
+
+# 4 "sizes_test.c" 1
+
+mov %rax,%eax
+
+# 0 "" 2
+
+#NO_APP
+
+movl $1, %eax
+
+#APP
+
+# 5 "sizes_test.c" 1
+
+mov %rax,%rax
+
+# 0 "" 2
+
+# 6 "sizes_test.c" 1
+
+mov %eax,%eax
+
+# 0 "" 2
+
+#NO_APP
+
+movl $1, %eax
+
+#APP
+
+# 7 "sizes_test.c" 1
+
+mov %eax,%rax
+
+# 0 "" 2
+
+#NO_APP
+
+ret
+
+.cfi_endproc
+
+…
+
+As you can see it's not hard to ask assembler to produce 32 bit or 64 bit
+registers on demand. Just keep in mind that NaCl used ILP32 model which means
+that by default it'll produce 32 bit registers there! Which probably means that
+you'll use q modifier significanly more often then k modifier.
+
+Note that .bundle_lock/.bundle_unlock machinery is only available in NaCl SDK
+starting from PPAPI 33. Before that you were forced to use %nacl pseudo-prefix
+and and bunch of special instructions to produce validateable code [as explaines
+in the SFI
+document](http://www.chromium.org/nativeclient/design-documents/nacl-sfi-model-on-x86-64-systems).
+This approach was slower (because it was impossible to combine address
+calculation with register restriction) and more cryptic, but if you need to deal
+with PPAPI 32 or below then it's your only choice. \ No newline at end of file
diff --git a/chromium/docs/website/site/nativeclient/how-tos/index.md b/chromium/docs/website/site/nativeclient/how-tos/index.md
new file mode 100644
index 00000000000..68fe1e61c73
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/index.md
@@ -0,0 +1,9 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+page_name: how-tos
+title: '2: How Tos'
+---
+
+{% subpages collections.all %}
diff --git a/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md b/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md
new file mode 100644
index 00000000000..5b381209dde
--- /dev/null
+++ b/chromium/docs/website/site/nativeclient/how-tos/working-on-the-git-toolchain-repos/index.md
@@ -0,0 +1,105 @@
+---
+breadcrumbs:
+- - /nativeclient
+ - Native Client
+- - /nativeclient/how-tos
+ - '2: How Tos'
+page_name: working-on-the-git-toolchain-repos
+title: Working on the git toolchain repos
+---
+
+Everybody who might ever need to touch the repositories that were formerly
+
+at git.chromium.org should start by doing the account setup that Anush
+
+posted about: http://www.chromium.org/chromium-os/developer-guide/gerrit-guide
+
+You can use your existing SSH key you were using with git.chromium.org
+
+(that's what I did) or generate a fresh one if you prefer. Then you
+
+should put this bit into your ~/.ssh/config:
+
+Host gerrit.chromium.org
+
+Port 29418
+
+User &lt;your-gerrit-username&gt;
+
+IdentityFile %d/.ssh/chromium
+
+For sanity's sake, your gerrit username will be the same as your
+
+chromium.org username which will be the same as your google.com username.
+
+I did it that way even though I don't like my google.com username much
+
+(and even though I am insane).
+
+This config assumes that you are using your SSH key from before and/or that
+
+you generated it with "ssh-keygen -f ~/.ssh/chromium". Adjust file names
+
+to taste if you are nonconformist. Make sure that the bit you paste into
+
+the account setup web form for your SSH key is instead the contents of
+
+~/.ssh/chromium.pub (your public key, not your private key).
+
+Once you have done the account setup, then you can ask someone to add you
+
+to the nacl-toolchain-committers group. For the moment, you can ask me.
+
+When other more adminy people get their gerrit accounts set up so I can
+
+add them to the nacl-admin group, you should ask them instead of me.
+
+The content for our repos has been migrated over from the
+
+gitrw.chromium.org server, and nobody can push there anymore. Note that
+
+the read-only http://git.chromium.org mirrors are still stale (lacking
+
+two commits I pushed yesterday), and will probably never be updated again.
+
+But that's OK!
+
+The new repos are live. The read-only URLs are:
+
+http://gerrit.chromium.org/gerrit/p/native_client/nacl-glibc.git
+
+http://gerrit.chromium.org/gerrit/p/native_client/nacl-binutils.git
+
+http://gerrit.chromium.org/gerrit/p/native_client/nacl-gcc.git
+
+http://gerrit.chromium.org/gerrit/p/native_client/nacl-newlib.git
+
+I will look into changing the toolchain builder crapola to pull from those.
+
+The URLs for writing are:
+
+ssh://gerrit.chromium.org/native_client/nacl-glibc.git
+
+ssh://gerrit.chromium.org/native_client/nacl-binutils.git
+
+ssh://gerrit.chromium.org/native_client/nacl-gcc.git
+
+ssh://gerrit.chromium.org/native_client/nacl-newlib.git
+
+To keep life simple, you can just do a fresh 'git clone' from one of the
+
+ssh URLs. (You only need a gerrit account and not committer privs to be
+
+able to clone that way.) It's also possible to set things up to pull from
+
+http:// urls but push to ssh:// urls, but that is stranger and I don't
+
+really know why you'd bother with it.
+
+If you have an existing git checkout, you can fix the URLs just by changing
+
+them in the .git/config file in each checkout. There is a way to do this
+
+with the 'git config' command, but really I'd just edit the file. It ain't
+
+rocket science. \ No newline at end of file