| Index: tools/gn/docs/reference.md
 | 
| diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md
 | 
| index 657796abc8fb4e71a7561473fc03874a46ec3e5e..a3bb57b4065b0f104cf12c904c702a39eb6546a0 100644
 | 
| --- a/tools/gn/docs/reference.md
 | 
| +++ b/tools/gn/docs/reference.md
 | 
| @@ -455,8 +455,8 @@
 | 
|        Tree output can not be used with the filtering or output flags:
 | 
|        --as, --type, --testonly.
 | 
|  
 | 
| -  --type=(action|copy|executable|group|shared_library|source_set|
 | 
| -          static_library)
 | 
| +  --type=(action|copy|executable|group|loadable_module|shared_library|
 | 
| +          source_set|static_library)
 | 
|        Restrict outputs to targets matching the given type. If
 | 
|        unspecified, no filtering will be performed.
 | 
|  
 | 
| @@ -594,8 +594,8 @@
 | 
|        accordingly. When unspecified, the target's testonly flags are
 | 
|        ignored.
 | 
|  
 | 
| -  --type=(action|copy|executable|group|shared_library|source_set|
 | 
| -          static_library)
 | 
| +  --type=(action|copy|executable|group|loadable_module|shared_library|
 | 
| +          source_set|static_library)
 | 
|        Restrict outputs to targets matching the given type. If
 | 
|        unspecified, no filtering will be performed.
 | 
|  
 | 
| @@ -740,8 +740,8 @@
 | 
|        Tree output can not be used with the filtering or output flags:
 | 
|        --as, --type, --testonly.
 | 
|  
 | 
| -  --type=(action|copy|executable|group|shared_library|source_set|
 | 
| -          static_library)
 | 
| +  --type=(action|copy|executable|group|loadable_module|shared_library|
 | 
| +          source_set|static_library)
 | 
|        Restrict outputs to targets matching the given type. If
 | 
|        unspecified, no filtering will be performed.
 | 
|  
 | 
| @@ -1025,7 +1025,7 @@
 | 
|  ### **Variables valid in a config definition**:
 | 
|  ```
 | 
|    Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| -         defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
|           precompiled_header, precompiled_source
 | 
|  
 | 
|  ```
 | 
| @@ -1103,9 +1103,48 @@
 | 
|  
 | 
|    See also "gn help buildargs" for an overview.
 | 
|  
 | 
| +  The precise behavior of declare args is:
 | 
| +
 | 
| +   1. The declare_arg block executes. Any variables in the enclosing
 | 
| +      scope are available for reading.
 | 
| +
 | 
| +   2. At the end of executing the block, any variables set within that
 | 
| +      scope are saved globally as build arguments, with their current
 | 
| +      values being saved as the "default value" for that argument.
 | 
| +
 | 
| +   3. User-defined overrides are applied. Anything set in "gn args"
 | 
| +      now overrides any default values. The resulting set of variables
 | 
| +      is promoted to be readable from the following code in the file.
 | 
| +
 | 
| +  This has some ramifications that may not be obvious:
 | 
| +
 | 
| +    - You should not perform difficult work inside a declare_args block
 | 
| +      since this only sets a default value that may be discarded. In
 | 
| +      particular, don't use the result of exec_script() to set the
 | 
| +      default value. If you want to have a script-defined default, set
 | 
| +      some default "undefined" value like [], "", or -1, and after
 | 
| +      the declare_args block, call exec_script if the value is unset by
 | 
| +      the user.
 | 
| +
 | 
| +    - Any code inside of the declare_args block will see the default
 | 
| +      values of previous variables defined in the block rather than
 | 
| +      the user-overridden value. This can be surprising because you will
 | 
| +      be used to seeing the overridden value. If you need to make the
 | 
| +      default value of one arg dependent on the possibly-overridden
 | 
| +      value of another, write two separate declare_args blocks:
 | 
| +
 | 
| +        declare_args() {
 | 
| +          enable_foo = true
 | 
| +        }
 | 
| +        declare_args() {
 | 
| +          # Bar defaults to same user-overridden state as foo.
 | 
| +          enable_bar = enable_foo
 | 
| +        }
 | 
| +
 | 
|  ```
 | 
|  
 | 
| -### **Example**:
 | 
| +### **Example**
 | 
| +
 | 
|  ```
 | 
|    declare_args() {
 | 
|      enable_teleporter = true
 | 
| @@ -1223,7 +1262,7 @@
 | 
|  
 | 
|  ```
 | 
|    Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| -         defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
|           precompiled_header, precompiled_source
 | 
|    Deps: data_deps, deps, public_deps
 | 
|    Dependent configs: all_dependent_configs, public_configs
 | 
| @@ -1582,7 +1621,7 @@
 | 
|    specify configs that apply to their dependents.
 | 
|  
 | 
|    Depending on a group is exactly like depending directly on that
 | 
| -  group's deps.
 | 
| +  group's deps. 
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -1645,6 +1684,32 @@
 | 
|  
 | 
|  
 | 
|  ```
 | 
| +## **loadable_module**: Declare a loadable module target.
 | 
| +
 | 
| +```
 | 
| +  This target type allows you to create an object file that is (and can
 | 
| +  only be) loaded and unloaded at runtime.
 | 
| +
 | 
| +  A loadable module will be specified on the linker line for targets
 | 
| +  listing the loadable module in its "deps". If you don't want this
 | 
| +  (if you don't need to dynamically load the library at runtime), then
 | 
| +  you should use a "shared_library" target type instead.
 | 
| +
 | 
| +```
 | 
| +
 | 
| +### **Variables**
 | 
| +
 | 
| +```
 | 
| +  Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         precompiled_header, precompiled_source
 | 
| +  Deps: data_deps, deps, public_deps
 | 
| +  Dependent configs: all_dependent_configs, public_configs
 | 
| +  General: check_includes, configs, data, inputs, output_name,
 | 
| +           output_extension, public, sources, testonly, visibility
 | 
| +
 | 
| +
 | 
| +```
 | 
|  ## **print**: Prints to the console.
 | 
|  
 | 
|  ```
 | 
| @@ -1988,7 +2053,8 @@
 | 
|    A shared library will be specified on the linker line for targets
 | 
|    listing the shared library in its "deps". If you don't want this
 | 
|    (say you dynamically load the library at runtime), then you should
 | 
| -  depend on the shared library via "data_deps" instead.
 | 
| +  depend on the shared library via "data_deps" or, on Darwin
 | 
| +  platforms, use a "loadable_module" target type instead.
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -1996,7 +2062,7 @@
 | 
|  
 | 
|  ```
 | 
|    Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| -         defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
|           precompiled_header, precompiled_source
 | 
|    Deps: data_deps, deps, public_deps
 | 
|    Dependent configs: all_dependent_configs, public_configs
 | 
| @@ -2037,7 +2103,7 @@
 | 
|  
 | 
|  ```
 | 
|    Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| -         defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
|           precompiled_header, precompiled_source
 | 
|    Deps: data_deps, deps, public_deps
 | 
|    Dependent configs: all_dependent_configs, public_configs
 | 
| @@ -2061,7 +2127,7 @@
 | 
|  
 | 
|  ```
 | 
|    Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
 | 
| -         defines, include_dirs, ldflags, lib_dirs, libs,
 | 
| +         asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
 | 
|           precompiled_header, precompiled_source
 | 
|    Deps: data_deps, deps, public_deps
 | 
|    Dependent configs: all_dependent_configs, public_configs
 | 
| @@ -2394,7 +2460,7 @@
 | 
|      depend_output  [string with substitutions]
 | 
|          Valid for: "solink" only (optional)
 | 
|  
 | 
| -        These two files specify whch of the outputs from the solink
 | 
| +        These two files specify which of the outputs from the solink
 | 
|          tool should be used for linking and dependency tracking. These
 | 
|          should match entries in the "outputs". If unspecified, the
 | 
|          first item in the "outputs" array will be used for both. See
 | 
| @@ -2511,6 +2577,7 @@
 | 
|    along with a set of compiler-specific flags. The following expansions
 | 
|    are available:
 | 
|  
 | 
| +    {{asmflags}}
 | 
|      {{cflags}}
 | 
|      {{cflags_c}}
 | 
|      {{cflags_cc}}
 | 
| @@ -3217,8 +3284,11 @@
 | 
|    and Objective C++ compilers.
 | 
|  
 | 
|    To target one of these variants individually, use "cflags_c",
 | 
| -  "cflags_cc", "cflags_objc", and "cflags_objcc", respectively.
 | 
| -  These variant-specific versions will be appended to the "cflags".
 | 
| +  "cflags_cc", "cflags_objc", and "cflags_objcc",
 | 
| +  respectively.
 | 
| +
 | 
| +  These variant-specific versions of cflags* will be appended to the
 | 
| +  "cflags".
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -3250,8 +3320,11 @@
 | 
|    and Objective C++ compilers.
 | 
|  
 | 
|    To target one of these variants individually, use "cflags_c",
 | 
| -  "cflags_cc", "cflags_objc", and "cflags_objcc", respectively.
 | 
| -  These variant-specific versions will be appended to the "cflags".
 | 
| +  "cflags_cc", "cflags_objc", and "cflags_objcc",
 | 
| +  respectively.
 | 
| +
 | 
| +  These variant-specific versions of cflags* will be appended to the
 | 
| +  "cflags".
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -3283,8 +3356,11 @@
 | 
|    and Objective C++ compilers.
 | 
|  
 | 
|    To target one of these variants individually, use "cflags_c",
 | 
| -  "cflags_cc", "cflags_objc", and "cflags_objcc", respectively.
 | 
| -  These variant-specific versions will be appended to the "cflags".
 | 
| +  "cflags_cc", "cflags_objc", and "cflags_objcc",
 | 
| +  respectively.
 | 
| +
 | 
| +  These variant-specific versions of cflags* will be appended to the
 | 
| +  "cflags".
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -3316,8 +3392,11 @@
 | 
|    and Objective C++ compilers.
 | 
|  
 | 
|    To target one of these variants individually, use "cflags_c",
 | 
| -  "cflags_cc", "cflags_objc", and "cflags_objcc", respectively.
 | 
| -  These variant-specific versions will be appended to the "cflags".
 | 
| +  "cflags_cc", "cflags_objc", and "cflags_objcc",
 | 
| +  respectively.
 | 
| +
 | 
| +  These variant-specific versions of cflags* will be appended to the
 | 
| +  "cflags".
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -3349,8 +3428,11 @@
 | 
|    and Objective C++ compilers.
 | 
|  
 | 
|    To target one of these variants individually, use "cflags_c",
 | 
| -  "cflags_cc", "cflags_objc", and "cflags_objcc", respectively.
 | 
| -  These variant-specific versions will be appended to the "cflags".
 | 
| +  "cflags_cc", "cflags_objc", and "cflags_objcc",
 | 
| +  respectively.
 | 
| +
 | 
| +  These variant-specific versions of cflags* will be appended to the
 | 
| +  "cflags".
 | 
|  
 | 
|  ```
 | 
|  
 | 
| @@ -3718,8 +3800,6 @@
 | 
|  
 | 
|  
 | 
|  ```
 | 
| -
 | 
| -```
 | 
|  ## **include_dirs**: Additional include directories.
 | 
|  
 | 
|  ```
 | 
| @@ -4796,8 +4876,8 @@
 | 
|  
 | 
|    To a first approximation, the runtime dependencies of a target are
 | 
|    the set of "data" files, data directories, and the shared libraries
 | 
| -  from all transitive dependencies. Executables and shared libraries are
 | 
| -  considered runtime dependencies of themselves.
 | 
| +  from all transitive dependencies. Executables, shared libraries, and
 | 
| +  loadable modules are considered runtime dependencies of themselves.
 | 
|  
 | 
|  ```
 | 
|  
 | 
| 
 |