summaryrefslogtreecommitdiff
path: root/Documentation/project-docs
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
commit4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch)
tree98110734c91668dfdbb126fcc0e15ddbd93738ca /Documentation/project-docs
parentfa45f57ed55137c75ac870356a1b8f76c84b229c (diff)
downloadcoreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'Documentation/project-docs')
-rw-r--r--Documentation/project-docs/adding_new_public_apis.md31
-rw-r--r--Documentation/project-docs/ci-trigger-phrases.md343
-rwxr-xr-xDocumentation/project-docs/clr-complus-conf-docgen.sh105
-rw-r--r--Documentation/project-docs/clr-configuration-knobs.md809
-rw-r--r--Documentation/project-docs/contributing-workflow.md107
-rw-r--r--Documentation/project-docs/contributing.md166
-rw-r--r--Documentation/project-docs/developer-guide.md28
-rw-r--r--Documentation/project-docs/dotnet-filenames.md11
-rw-r--r--Documentation/project-docs/dotnet-standards.md69
-rw-r--r--Documentation/project-docs/garbage-collector-guidelines.md37
-rw-r--r--Documentation/project-docs/glossary.md28
-rw-r--r--Documentation/project-docs/jit-testing.md169
-rw-r--r--Documentation/project-docs/linux-performance-tracing.md142
-rw-r--r--Documentation/project-docs/performance-guidelines.md54
-rw-r--r--Documentation/project-docs/profiling-api-status.md80
-rw-r--r--Documentation/project-docs/project-priorities.md27
-rw-r--r--Documentation/project-docs/windows-performance-tracing.md14
17 files changed, 2220 insertions, 0 deletions
diff --git a/Documentation/project-docs/adding_new_public_apis.md b/Documentation/project-docs/adding_new_public_apis.md
new file mode 100644
index 0000000000..dbf305d542
--- /dev/null
+++ b/Documentation/project-docs/adding_new_public_apis.md
@@ -0,0 +1,31 @@
+Adding new public APIs to mscorlib
+==================================
+
+Many of the CoreFX libraries type-forward their public APIs to the implementations in mscorlib.
+- The CoreFX build uses published contracts for mscorlib, and the CoreFX test build uses published contracts for some of the CoreFX libraries.
+- Some of the CoreFX libraries are not built in the CoreFX repository. For example, System.Runtime.Loader.dll is purely a facade and type-forwards everything to mscorlib. These libraries are built and published through a separate process.
+- Hence, when adding a new public API to mscorlib, changes must be staged to ensure that new prerequisites are published before they are used.
+
+**Staging the changes**
+
+Make the changes to CoreCLR, including mscorlib
+- Update `coreclr/src/mscorlib/model.xml` with the new APIs. APIs that are not listed in this file will be stripped out prior to publishing.
+- Note that at the moment, merging changes with new public APIs will cause an internal build failure. Please work with your PR reviewer to have these build breaks be fixed soon after merging, otherwise it will block the publishing process.
+- Merge the changes
+- Wait for a new mscorlib contract to be published. Check the latest published version [here](http://myget.org/gallery/dotnet-core).
+
+Make the changes to CoreFX consuming the new APIs in mscorlib
+- If the changes are to libraries that are built out of the CoreFX repository:
+ - You will likely see a build failure until a new mscorlib contract is published
+- If the changes are to libraries that are **not** built out of the CoreFX repository:
+ - For example, pure facades such as System.Runtime.Loader.dll
+ - There will likely not be a build failure
+ - But you will still need to wait for the new mscorlib contract to be published before merging the change, otherwise, facade generation will fail
+- Merge the changes
+- Wait for new contracts to be published for libraries with new APIs. Check the latest published versions [here](http://myget.org/gallery/dotnet-core).
+
+Add tests
+- You should now be able to consume the new APIs and add tests to the CoreFX test suite
+ - Until new contracts are published, you will likely see a build failure indicating that the new APIs don't exist.
+- Note that on Windows, CoreFX tests currently use a potentially old published build of CoreCLR
+ - You may need to disable the new tests on Windows until CoreFX tests are updated to use a newer build of CoreCLR.
diff --git a/Documentation/project-docs/ci-trigger-phrases.md b/Documentation/project-docs/ci-trigger-phrases.md
new file mode 100644
index 0000000000..3652565498
--- /dev/null
+++ b/Documentation/project-docs/ci-trigger-phrases.md
@@ -0,0 +1,343 @@
+.CI Trigger Phrases
+===
+
+When submitting a PR to the CoreCLR repo, you may want to run more test suites than are included in the default set of checks run with each PR. In this document you will find a list of all possible jobs to trigger, as well as the phrase that will trigger that job.
+
+These phrases are ordered by OS. They will usually be in the form of "{OS} {Architecture} {Configuration} {Scenario}", so use that format if you are trying to ctrl-f a certain job.
+
+To trigger a job, post a comment on your PR with "@dotnet-bot {trigger-phrase}".
+
+- **Windows_NT x64 Release Priority 1 Build & Test:** "test Windows_NT pri1"
+- **Windows_NT x64 Release IL RoundTrip Build & Test:** "test Windows_NT ilrt"
+- **Windows_NT x64 Release Long-Running GC Build & Test:**: "test Windows_NT x64 Release longgc"
+- **Windows_NT x64 Release Ready-To-Run Priority 0 Build & Test:** "test Windows_NT Release r2r"
+- **Windows_NT x64 Checked Ready-To-Run Priority 0 Build & Test:** "test Windows_NT Checked r2r"
+- **Windows_NT x64 Release Ready-To-Run Priority 1 Build & Test:** "test Windows_NT Release pri1r2r"
+- **Windows_NT x64 Checked Ready-To-Run Priority 1 Build & Test:** "test Windows_NT Checked pri1r2r"
+- **Windows_NT x64 Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Windows_NT Release gcstress15_pri1r2r"
+- **Windows_NT x64 Checked GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Windows_NT Checked gcstress15_pri1r2r"
+- **Windows_NT x64 Release jitstress1 R2R Build & Test:** "test Windows_NT Release jitstress1 R2R"
+- **Windows_NT x64 Checked jitstress1 R2R Build & Test:** "test Windows_NT Checked jitstress1 R2R"
+- **Windows_NT x64 Release jitstress2 R2R Build & Test:** "test Windows_NT Release jitstress2 R2R"
+- **Windows_NT x64 Checked jitstress2 R2R Build & Test:** "test Windows_NT Checked jitstress2 R2R"
+- **Windows_NT x64 Release jitstressregs1 R2R Build & Test:** "test Windows_NT Release jitstressregs1 R2R"
+- **Windows_NT x64 Checked jitstressregs1 R2R Build & Test:** "test Windows_NT Checked jitstressregs1 R2R"
+- **Windows_NT x64 Release jitstressregs2 R2R Build & Test:** "test Windows_NT Release jitstressregs2 R2R"
+- **Windows_NT x64 Checked jitstressregs2 R2R Build & Test:** "test Windows_NT Checked jitstressregs2 R2R"
+- **Windows_NT x64 Release jitstressregs3 R2R Build & Test:** "test Windows_NT Release jitstressregs3 R2R"
+- **Windows_NT x64 Checked jitstressregs3 R2R Build & Test:** "test Windows_NT Checked jitstressregs3 R2R"
+- **Windows_NT x64 Release jitstressregs4 R2R Build & Test:** "test Windows_NT Release jitstressregs4 R2R"
+- **Windows_NT x64 Checked jitstressregs4 R2R Build & Test:** "test Windows_NT Checked jitstressregs4 R2R"
+- **Windows_NT x64 Release jitstressregs8 R2R Build & Test:** "test Windows_NT Release jitstressregs8 R2R"
+- **Windows_NT x64 Checked jitstressregs8 R2R Build & Test:** "test Windows_NT Checked jitstressregs8 R2R"
+- **Windows_NT x64 Release jitstressregsx10 R2R Build & Test:** "test Windows_NT Release jitstressregsx10 R2R"
+- **Windows_NT x64 Checked jitstressregsx10 R2R Build & Test:** "test Windows_NT Checked jitstressregsx10 R2R"
+- **Windows_NT x64 Release jitstressregsx80 R2R Build & Test:** "test Windows_NT Release jitstressregsx80 R2R"
+- **Windows_NT x64 Checked jitstressregsx80 R2R Build & Test:** "test Windows_NT Checked jitstressregsx80 R2R"
+- **Windows_NT x64 Release JITMinOpts R2R Build & Test:** "test Windows_NT Release JITMinOpts R2R"
+- **Windows_NT x64 Checked JITMinOpts R2R Build & Test:** "test Windows_NT Checked JITMinOpts R2R"
+- **Windows_NT x64 Release ForceRelocs R2R Build & Test:** "test Windows_NT Release ForceRelocs R2R"
+- **Windows_NT x64 Checked ForceRelocs R2R Build & Test:** "test Windows_NT Checked ForceRelocs R2R"
+- **Windows_NT x64 Checked JIT MinOpts Build & Test:** "test Windows_NT minopts"
+- **Windows_NT x64 Checked JITStress=1 Build & Test:** "test Windows_NT jitstress1"
+- **Windows_NT x64 Checked JITStress=2 Build & Test:** "test Windows_NT jitstress2"
+- **Windows_NT x64 Checked Jit ForceRelocs Build & Test:** "test Windows_NT forcerelocs"
+- **Windows_NT x64 Checked JITStressRegs=1 Build & Test:** "test Windows_NT jitstressregs1"
+- **Windows_NT x64 Checked JITStressRegs=2 Build & Test:** "test Windows_NT jitstressregs2"
+- **Windows_NT x64 Checked JITStressRegs=3 Build & Test:** "test Windows_NT jitstressregs3"
+- **Windows_NT x64 Checked JITStressRegs=4 Build & Test:** "test Windows_NT jitstressregs4"
+- **Windows_NT x64 Checked JITStressRegs=8 Build & Test:** "test Windows_NT jitstressregs8"
+- **Windows_NT x64 Checked JITStressRegs=0x10 Build & Test:** "test Windows_NT jitstressregs0x10"
+- **Windows_NT x64 Checked JITStressRegs=0x80 Build & Test:** "test Windows_NT jitstressregs0x80"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=1 Build & Test:** "test Windows_NT jitstress2_jitstressregs1"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=2 Build & Test:** "test Windows_NT jitstress2_jitstressregs2"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=3 Build & Test:** "test Windows_NT jitstress2_jitstressregs3"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=4 Build & Test:** "test Windows_NT jitstress2_jitstressregs4"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=8 Build & Test:** "test Windows_NT jitstress2_jitstressregs8"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=0x10 Build & Test:** "test Windows_NT jitstress2_jitstressregs0x10"
+- **Windows_NT x64 Checked JitStress=2 JITStressRegs=0x80 Build & Test:** "test Windows_NT jitstress2_jitstressregs0x80"
+- **Windows_NT x64 Checked GCStress=0x3 Build & Test:** "test Windows_NT gcstress0x3"
+- **Windows_NT x64 Checked GCStress=0xc Build & Test:** "test Windows_NT gcstress0xc"
+- **Windows_NT x64 Checked zapdisable Build & Test:** "test Windows_NT zapdisable"
+- **Windows_NT x64 Checked Heap Verify 1 Build & Test:** "test Windows_NT heapverify1"
+- **Windows_NT x64 Checked GCStress=0xc zapdisable Build & Test:** "test Windows_NT gcstress0xc_zapdisable"
+- **Windows_NT x64 Checked GCStress=0xc JitStress=2 zapdisable Build & Test:** "test Windows_NT gcstress0xc_zapdisable_jitstress2"
+- **Windows_NT x64 Checked GCStress=0xc zapdisable Heap Verify 1 Build & Test:** "test Windows_NT gcstress0xc_zapdisable_heapverify1"
+- **Windows_NT x64 Checked GCStress=0xc JitStress=1 Build & Test:** "test Windows_NT gcstress0xc_jitstress1"
+- **Windows_NT x64 Checked GCStress=0xc JitStress=2 Build & Test:** "test Windows_NT gcstress0xc_jitstress2"
+- **Windows_NT x64 Checked GCStress=0xc MinOpts Heap Verify 1 Build & Test:** "test Windows_NT gcstress0xc_minopts_heapverify1"
+- **Windows_NT x64 Checked Long-Running GC Build & Test:**: "test Windows_NT x64 Checked longgc"
+- **Windows_NT x64 Formatting:**: "test Windows_NT formatting"
+- **Windows_NT x64 Checked CoreFX Baseline Build & Test:** "test Windows_NT corefx_baseline"
+- **Windows_NT x64 Checked CoreFX MinOpts Build & Test:** "test Windows_NT corefx_minopts"
+- **Windows_NT x64 Checked CoreFX JitStress=1 Build & Test:** "test Windows_NT corefx_jitstress1"
+- **Windows_NT x64 Checked CoreFX JitStress=2 Build & Test:** "test Windows_NT corefx_jitstress2"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=1 Build & Test:** "test Windows_NT corefx_jitstressregs1"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=2 Build & Test:** "test Windows_NT corefx_jitstressregs2"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=3 Build & Test:** "test Windows_NT corefx_jitstressregs3"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=4 Build & Test:** "test Windows_NT corefx_jitstressregs4"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=8 Build & Test:** "test Windows_NT corefx_jitstressregs8"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=0x10 Build & Test:** "test Windows_NT corefx_jitstressregs0x10"
+- **Windows_NT x64 Checked CoreFX JitStressRegs=0x80 Build & Test:** "test Windows_NT corefx_jitstressregs0x80"
+- **Windows_NT x86 RyuJit Checked Priority 0 Build & Test:** "test Windows_NT x86 ryujit"
+- **Windows_NT x86 legacy_backend Checked Priority 0 Build & Test:** "test Windows_NT x86 legacy_backend"
+- **Windows_NT x86 RyuJit Release Ready-To-Run Priority 0 Build & Test:** "test Windows_NT x86 ryujit Release r2r"
+- **Windows_NT x86 legacy_backend Release Ready-To-Run Priority 0 Build & Test:** "test Windows_NT x86 legacy_backend Release r2r"
+- **Windows_NT x86 RyuJit Release Ready-To-Run Priority 1 Build & Test:** "test Windows_NT x86 ryujit Release pri1r2r"
+- **Windows_NT x86 legacy_backend Release Ready-To-Run Priority 1 Build & Test:** "test Windows_NT x86 legacy_backend Release pri1r2r"
+- **Windows_NT x86 RyuJit Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Windows_NT x86 ryujit Release gcstress15_pri1r2r"
+- **Windows_NT x86 legacy_backend Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Windows_NT x86 legacy_backend Release gcstress15_pri1r2r"
+- **Windows_NT x86 RyuJit Release jitstress1 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstress1 R2R"
+- **Windows_NT x86 RyuJit Checked jitstress1 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstress1 R2R"
+- **Windows_NT x86 RyuJit Release jitstress2 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstress2 R2R"
+- **Windows_NT x86 RyuJit Checked jitstress2 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstress2 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregs1 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregs1 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregs1 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregs1 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregs2 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregs2 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregs2 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregs2 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregs3 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregs3 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregs3 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregs3 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregs4 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregs4 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregs4 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregs4 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregs8 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregs8 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregs8 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregs8 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregsx10 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregsx10 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregsx10 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregsx10 R2R"
+- **Windows_NT x86 RyuJit Release jitstressregsx80 R2R Build & Test:** "test Windows_NT x86 ryujit Release jitstressregsx80 R2R"
+- **Windows_NT x86 RyuJit Checked jitstressregsx80 R2R Build & Test:** "test Windows_NT x86 ryujit Checked jitstressregsx80 R2R"
+- **Windows_NT x86 RyuJit Release JITMinOpts R2R Build & Test:** "test Windows_NT x86 ryujit Release JITMinOpts R2R"
+- **Windows_NT x86 RyuJit Checked JITMinOpts R2R Build & Test:** "test Windows_NT x86 ryujit Checked JITMinOpts R2R"
+- **Windows_NT x86 RyuJit Release ForceRelocs R2R Build & Test:** "test Windows_NT x86 ryujit Release ForceRelocs R2R"
+- **Windows_NT x86 RyuJit Checked ForceRelocs R2R Build & Test:** "test Windows_NT x86 ryujit Checked ForceRelocs R2R"
+- **Windows_NT x86 RyuJit Checked JIT MinOpts Build & Test:** "test Windows_NT x86 ryujit minopts"
+- **Windows_NT x86 RyuJit Checked JITStress=1 Build & Test:** "test Windows_NT x86 ryujit jitstress1"
+- **Windows_NT x86 RyuJit Checked JITStress=2 Build & Test:** "test Windows_NT x86 ryujit jitstress2"
+- **Windows_NT x86 RyuJit Checked Jit ForceRelocs Build & Test:** "test Windows_NT x86 ryujit forcerelocs"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=1 Build & Test:** "test Windows_NT x86 ryujit jitstressregs1"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=2 Build & Test:** "test Windows_NT x86 ryujit jitstressregs2"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=3 Build & Test:** "test Windows_NT x86 ryujit jitstressregs3"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=4 Build & Test:** "test Windows_NT x86 ryujit jitstressregs4"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=8 Build & Test:** "test Windows_NT x86 ryujit jitstressregs8"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=0x10 Build & Test:** "test Windows_NT x86 ryujit jitstressregs0x10"
+- **Windows_NT x86 RyuJit Checked JITStressRegs=0x80 Build & Test:** "test Windows_NT x86 ryujit jitstressregs0x80"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=1 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs1"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=2 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs2"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=3 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs3"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=4 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs4"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=8 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs8"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=0x10 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs0x10"
+- **Windows_NT x86 RyuJit Checked JitStress=2 JITStressRegs=0x80 Build & Test:** "test Windows_NT x86 ryujit jitstress2_jitstressregs0x80"
+- **Windows_NT x86 RyuJit Checked GCStress=0x3 Build & Test:** "test Windows_NT x86 ryujit gcstress0x3"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc Build & Test:** "test Windows_NT x86 ryujit gcstress0xc"
+- **Windows_NT x86 RyuJit Checked zapdisable Build & Test:** "test Windows_NT x86 ryujit zapdisable"
+- **Windows_NT x86 RyuJit Checked Heap Verify 1 Build & Test:** "test Windows_NT x86 ryujit heapverify1"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc zapdisable Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_zapdisable"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc JitStress=2 zapdisable Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_zapdisable_jitstress2"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc zapdisable Heap Verify 1 Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_zapdisable_heapverify1"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc JitStress=1 Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_jitstress1"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc JitStress=2 Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_jitstress2"
+- **Windows_NT x86 RyuJit Checked GCStress=0xc MinOpts Heap Verify 1 Build & Test:** "test Windows_NT x86 ryujit gcstress0xc_minopts_heapverify1"
+- **Windows_NT x86 legacy_backend Release jitstress1 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstress1 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstress1 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstress1 R2R"
+- **Windows_NT x86 legacy_backend Release jitstress2 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstress2 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstress2 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstress2 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregs1 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregs1 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregs1 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregs1 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregs2 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregs2 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregs2 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregs2 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregs3 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregs3 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregs3 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregs3 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregs4 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregs4 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregs4 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregs4 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregs8 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregs8 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregs8 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregs8 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregsx10 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregsx10 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregsx10 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregsx10 R2R"
+- **Windows_NT x86 legacy_backend Release jitstressregsx80 R2R Build & Test:** "test Windows_NT x86 legacy_backend Release jitstressregsx80 R2R"
+- **Windows_NT x86 legacy_backend Checked jitstressregsx80 R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked jitstressregsx80 R2R"
+- **Windows_NT x86 legacy_backend Release JITMinOpts R2R Build & Test:** "test Windows_NT x86 legacy_backend Release JITMinOpts R2R"
+- **Windows_NT x86 legacy_backend Checked JITMinOpts R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked JITMinOpts R2R"
+- **Windows_NT x86 legacy_backend Release ForceRelocs R2R Build & Test:** "test Windows_NT x86 legacy_backend Release ForceRelocs R2R"
+- **Windows_NT x86 legacy_backend Checked ForceRelocs R2R Build & Test:** "test Windows_NT x86 legacy_backend Checked ForceRelocs R2R"
+- **Windows_NT x86 RyuJit Release Long-Running GC Build & Test:** "test Windows_NT x86 ryujit Release longgc"
+- **Windows_NT x86 legacy_backend Release Long-Running GC Build & Test:** "test Windows_NT x86 legacy_backend Release longgc"
+- **Ubuntu x64 Release Priority 1 Build & Test:** "test Ubuntu pri1"
+- **Ubuntu x64 Release IL RoundTrip Build & Test:** "test Ubuntu ilrt"
+- **Ubuntu x64 Release Long-Running GC Build & Test:**: "test Ubuntu Release longgc"
+- **Ubuntu x64 Release Ready-To-Run Priority 0 Build & Test:** "test Ubuntu Release r2r"
+- **Ubuntu x64 Checked Ready-To-Run Priority 0 Build & Test:** "test Ubuntu Checked r2r"
+- **Ubuntu x64 Release Ready-To-Run Priority 1 Build & Test:** "test Ubuntu Release pri1r2r"
+- **Ubuntu x64 Checked Ready-To-Run Priority 1 Build & Test:** "test Ubuntu Checked pri1r2r"
+- **Ubuntu x64 Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Ubuntu Release gcstress15_pri1r2r"
+- **Ubuntu x64 Checked GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test Ubuntu Checked gcstress15_pri1r2r"
+- **Ubuntu x64 Release jitstress1 R2R Build & Test:** "test Ubuntu Release jitstress1 R2R"
+- **Ubuntu x64 Checked jitstress1 R2R Build & Test:** "test Ubuntu Checked jitstress1 R2R"
+- **Ubuntu x64 Release jitstress2 R2R Build & Test:** "test Ubuntu Release jitstress2 R2R"
+- **Ubuntu x64 Checked jitstress2 R2R Build & Test:** "test Ubuntu Checked jitstress2 R2R"
+- **Ubuntu x64 Release jitstressregs1 R2R Build & Test:** "test Ubuntu Release jitstressregs1 R2R"
+- **Ubuntu x64 Checked jitstressregs1 R2R Build & Test:** "test Ubuntu Checked jitstressregs1 R2R"
+- **Ubuntu x64 Release jitstressregs2 R2R Build & Test:** "test Ubuntu Release jitstressregs2 R2R"
+- **Ubuntu x64 Checked jitstressregs2 R2R Build & Test:** "test Ubuntu Checked jitstressregs2 R2R"
+- **Ubuntu x64 Release jitstressregs3 R2R Build & Test:** "test Ubuntu Release jitstressregs3 R2R"
+- **Ubuntu x64 Checked jitstressregs3 R2R Build & Test:** "test Ubuntu Checked jitstressregs3 R2R"
+- **Ubuntu x64 Release jitstressregs4 R2R Build & Test:** "test Ubuntu Release jitstressregs4 R2R"
+- **Ubuntu x64 Checked jitstressregs4 R2R Build & Test:** "test Ubuntu Checked jitstressregs4 R2R"
+- **Ubuntu x64 Release jitstressregs8 R2R Build & Test:** "test Ubuntu Release jitstressregs8 R2R"
+- **Ubuntu x64 Checked jitstressregs8 R2R Build & Test:** "test Ubuntu Checked jitstressregs8 R2R"
+- **Ubuntu x64 Release jitstressregsx10 R2R Build & Test:** "test Ubuntu Release jitstressregsx10 R2R"
+- **Ubuntu x64 Checked jitstressregsx10 R2R Build & Test:** "test Ubuntu Checked jitstressregsx10 R2R"
+- **Ubuntu x64 Release jitstressregsx80 R2R Build & Test:** "test Ubuntu Release jitstressregsx80 R2R"
+- **Ubuntu x64 Checked jitstressregsx80 R2R Build & Test:** "test Ubuntu Checked jitstressregsx80 R2R"
+- **Ubuntu x64 Release JITMinOpts R2R Build & Test:** "test Ubuntu Release JITMinOpts R2R"
+- **Ubuntu x64 Checked JITMinOpts R2R Build & Test:** "test Ubuntu Checked JITMinOpts R2R"
+- **Ubuntu x64 Release ForceRelocs R2R Build & Test:** "test Ubuntu Release ForceRelocs R2R"
+- **Ubuntu x64 Checked ForceRelocs R2R Build & Test:** "test Ubuntu x64 Checked ForceRelocs R2R"
+- **Ubuntu x64 Checked JIT MinOpts Build & Test:** "test Ubuntu minopts"
+- **Ubuntu x64 Checked JITStress=1 Build & Test:** "test Ubuntu jitstress1"
+- **Ubuntu x64 Checked JITStress=2 Build & Test:** "test Ubuntu jitstress2"
+- **Ubuntu x64 Checked Jit ForceRelocs Build & Test:** "test Ubuntu forcerelocs"
+- **Ubuntu x64 Checked JITStressRegs=1 Build & Test:** "test Ubuntu jitstressregs1"
+- **Ubuntu x64 Checked JITStressRegs=2 Build & Test:** "test Ubuntu jitstressregs2"
+- **Ubuntu x64 Checked JITStressRegs=3 Build & Test:** "test Ubuntu jitstressregs3"
+- **Ubuntu x64 Checked JITStressRegs=4 Build & Test:** "test Ubuntu jitstressregs4"
+- **Ubuntu x64 Checked JITStressRegs=8 Build & Test:** "test Ubuntu jitstressregs8"
+- **Ubuntu x64 Checked JITStressRegs=0x10 Build & Test:** "test Ubuntu jitstressregs0x10"
+- **Ubuntu x64 Checked JITStressRegs=0x80 Build & Test:** "test Ubuntu jitstressregs0x80"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=1 Build & Test:** "test Ubuntu jitstress2_jitstressregs1"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=2 Build & Test:** "test Ubuntu jitstress2_jitstressregs2"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=3 Build & Test:** "test Ubuntu jitstress2_jitstressregs3"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=4 Build & Test:** "test Ubuntu jitstress2_jitstressregs4"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=8 Build & Test:** "test Ubuntu jitstress2_jitstressregs8"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=0x10 Build & Test:** "test Ubuntu jitstress2_jitstressregs0x10"
+- **Ubuntu x64 Checked JitStress=2 JITStressRegs=0x80 Build & Test:** "test Ubuntu jitstress2_jitstressregs0x80"
+- **Ubuntu x64 Checked GCStress=0x3 Build & Test:** "test Ubuntu gcstress0x3"
+- **Ubuntu x64 Checked GCStress=0xc Build & Test:** "test Ubuntu gcstress0xc"
+- **Ubuntu x64 Checked zapdisable Build & Test:** "test Ubuntu zapdisable"
+- **Ubuntu x64 Checked Heap Verify 1 Build & Test:** "test Ubuntu heapverify1"
+- **Ubuntu x64 Checked GCStress=0xc zapdisable Build & Test:** "test Ubuntu gcstress0xc_zapdisable"
+- **Ubuntu x64 Checked GCStress=0xc JitStress=2 zapdisable Build & Test:** "test Ubuntu gcstress0xc_zapdisable_jitstress2"
+- **Ubuntu x64 Checked GCStress=0xc zapdisable Heap Verify 1 Build & Test:** "test Ubuntu gcstress0xc_zapdisable_heapverify1"
+- **Ubuntu x64 Checked GCStress=0xc JitStress=1 Build & Test:** "test Ubuntu gcstress0xc_jitstress1"
+- **Ubuntu x64 Checked GCStress=0xc JitStress=2 Build & Test:** "test Ubuntu gcstress0xc_jitstress2"
+- **Ubuntu x64 Checked GCStress=0xc MinOpts Heap Verify 1 Build & Test:** "test Ubuntu gcstress0xc_minopts_heapverify1"
+- **Ubuntu x64 Checked Long-Running GC Build & Test:**: "test Ubuntu Checked longgc"
+- **Ubuntu x64 Formatting:**: "test Ubuntu formatting"
+- **Ubuntu x64 Checked CoreFX Baseline Build & Test:** "test Ubuntu corefx_baseline"
+- **Ubuntu x64 Checked CoreFX MinOpts Build & Test:** "test Ubuntu corefx_minopts"
+- **Ubuntu x64 Checked CoreFX JitStress=1 Build & Test:** "test Ubuntu corefx_jitstress1"
+- **Ubuntu x64 Checked CoreFX JitStress=2 Build & Test:** "test Ubuntu corefx_jitstress2"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=1 Build & Test:** "test Ubuntu corefx_jitstressregs1"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=2 Build & Test:** "test Ubuntu corefx_jitstressregs2"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=3 Build & Test:** "test Ubuntu corefx_jitstressregs3"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=4 Build & Test:** "test Ubuntu corefx_jitstressregs4"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=8 Build & Test:** "test Ubuntu corefx_jitstressregs8"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=0x10 Build & Test:** "test Ubuntu corefx_jitstressregs0x10"
+- **Ubuntu x64 Checked CoreFX JitStressRegs=0x80 Build & Test:** "test Ubuntu corefx_jitstressregs0x80"
+- **Ubuntu arm64 Release Cross Build:** "test Ubuntu arm64"
+- **Ubuntu15.10 x64 Release Priority 0 Build:** "test Ubuntu15.10"
+- **OSX x64 Release Priority 1 Build & Test:** "test OSX pri1"
+- **OSX x64 Release IL RoundTrip Build & Test:** "test OSX ilrt"
+- **OSX x64 Release Long-Running GC Build & Test:**: "test OSX Release longgc"
+- **OSX x64 Release Ready-To-Run Priority 0 Build & Test:** "test OSX Release r2r"
+- **OSX x64 Checked Ready-To-Run Priority 0 Build & Test:** "test OSX Checked r2r"
+- **OSX x64 Release Ready-To-Run Priority 1 Build & Test:** "test OSX Release pri1r2r"
+- **OSX x64 Checked Ready-To-Run Priority 1 Build & Test:** "test OSX Checked pri1r2r"
+- **OSX x64 Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test OSX Release gcstress15_pri1r2r"
+- **OSX x64 Checked GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test OSX Checked gcstress15_pri1r2r"
+- **OSX x64 Release jitstress1 R2R Build & Test:** "test OSX x64 Release jitstress1 R2R"
+- **OSX x64 Checked jitstress1 R2R Build & Test:** "test OSX x64 Checked jitstress1 R2R"
+- **OSX x64 Release jitstress2 R2R Build & Test:** "test OSX x64 Release jitstress2 R2R"
+- **OSX x64 Checked jitstress2 R2R Build & Test:** "test OSX x64 Checked jitstress2 R2R"
+- **OSX x64 Release jitstressregs1 R2R Build & Test:** "test OSX x64 Release jitstressregs1 R2R"
+- **OSX x64 Checked jitstressregs1 R2R Build & Test:** "test OSX x64 Checked jitstressregs1 R2R"
+- **OSX x64 Release jitstressregs2 R2R Build & Test:** "test OSX x64 Release jitstressregs2 R2R"
+- **OSX x64 Checked jitstressregs2 R2R Build & Test:** "test OSX x64 Checked jitstressregs2 R2R"
+- **OSX x64 Release jitstressregs3 R2R Build & Test:** "test OSX x64 Release jitstressregs3 R2R"
+- **OSX x64 Checked jitstressregs3 R2R Build & Test:** "test OSX x64 Checked jitstressregs3 R2R"
+- **OSX x64 Release jitstressregs4 R2R Build & Test:** "test OSX x64 Release jitstressregs4 R2R"
+- **OSX x64 Checked jitstressregs4 R2R Build & Test:** "test OSX x64 Checked jitstressregs4 R2R"
+- **OSX x64 Release jitstressregs8 R2R Build & Test:** "test OSX x64 Release jitstressregs8 R2R"
+- **OSX x64 Checked jitstressregs8 R2R Build & Test:** "test OSX x64 Checked jitstressregs8 R2R"
+- **OSX x64 Release jitstressregsx10 R2R Build & Test:** "test OSX x64 Release jitstressregsx10 R2R"
+- **OSX x64 Checked jitstressregsx10 R2R Build & Test:** "test OSX x64 Checked jitstressregsx10 R2R"
+- **OSX x64 Release jitstressregsx80 R2R Build & Test:** "test OSX x64 Release jitstressregsx80 R2R"
+- **OSX x64 Checked jitstressregsx80 R2R Build & Test:** "test OSX x64 Checked jitstressregsx80 R2R"
+- **OSX x64 Release JITMinOpts R2R Build & Test:** "test OSX x64 Release JITMinOpts R2R"
+- **OSX x64 Checked JITMinOpts R2R Build & Test:** "test OSX x64 Checked JITMinOpts R2R"
+- **OSX x64 Release ForceRelocs R2R Build & Test:** "test OSX x64 Release ForceRelocs R2R"
+- **OSX x64 Checked ForceRelocs R2R Build & Test:** "test OSX x64 Checked ForceRelocs R2R"
+- **OSX x64 Checked JIT MinOpts Build & Test:** "test OSX minopts"
+- **OSX x64 Checked JITStress=1 Build & Test:** "test OSX jitstress1"
+- **OSX x64 Checked JITStress=2 Build & Test:** "test OSX jitstress2"
+- **OSX x64 Checked Jit ForceRelocs Build & Test:** "test OSX forcerelocs"
+- **OSX x64 Checked JITStressRegs=1 Build & Test:** "test OSX jitstressregs1"
+- **OSX x64 Checked JITStressRegs=2 Build & Test:** "test OSX jitstressregs2"
+- **OSX x64 Checked JITStressRegs=3 Build & Test:** "test OSX jitstressregs3"
+- **OSX x64 Checked JITStressRegs=4 Build & Test:** "test OSX jitstressregs4"
+- **OSX x64 Checked JITStressRegs=8 Build & Test:** "test OSX jitstressregs8"
+- **OSX x64 Checked JITStressRegs=0x10 Build & Test:** "test OSX jitstressregs0x10"
+- **OSX x64 Checked JITStressRegs=0x80 Build & Test:** "test OSX jitstressregs0x80"
+- **OSX x64 Checked JitStress=2 JITStressRegs=1 Build & Test:** "test OSX jitstress2_jitstressregs1"
+- **OSX x64 Checked JitStress=2 JITStressRegs=2 Build & Test:** "test OSX jitstress2_jitstressregs2"
+- **OSX x64 Checked JitStress=2 JITStressRegs=3 Build & Test:** "test OSX jitstress2_jitstressregs3"
+- **OSX x64 Checked JitStress=2 JITStressRegs=4 Build & Test:** "test OSX jitstress2_jitstressregs4"
+- **OSX x64 Checked JitStress=2 JITStressRegs=8 Build & Test:** "test OSX jitstress2_jitstressregs8"
+- **OSX x64 Checked JitStress=2 JITStressRegs=0x10 Build & Test:** "test OSX jitstress2_jitstressregs0x10"
+- **OSX x64 Checked JitStress=2 JITStressRegs=0x80 Build & Test:** "test OSX jitstress2_jitstressregs0x80"
+- **OSX x64 Checked GCStress=0x3 Build & Test:** "test OSX gcstress0x3"
+- **OSX x64 Checked GCStress=0xc Build & Test:** "test OSX gcstress0xc"
+- **OSX x64 Checked zapdisable Build & Test:** "test OSX zapdisable"
+- **OSX x64 Checked Heap Verify 1 Build & Test:** "test OSX heapverify1"
+- **OSX x64 Checked GCStress=0xc zapdisable Build & Test:** "test OSX gcstress0xc_zapdisable"
+- **OSX x64 Checked GCStress=0xc JitStress=2 zapdisable Build & Test:** "test OSX gcstress0xc_zapdisable_jitstress2"
+- **OSX x64 Checked GCStress=0xc zapdisable Heap Verify 1 Build & Test:** "test OSX gcstress0xc_zapdisable_heapverify1"
+- **OSX x64 Checked GCStress=0xc JitStress=1 Build & Test:** "test OSX gcstress0xc_jitstress1"
+- **OSX x64 Checked GCStress=0xc JitStress=2 Build & Test:** "test OSX gcstress0xc_jitstress2"
+- **OSX x64 Checked GCStress=0xc MinOpts Heap Verify 1 Build & Test:** "test OSX gcstress0xc_minopts_heapverify1"
+- **OSX x64 Checked Long-Running GC Build & Test:**: "test OSX Checked longgc"
+- **OSX x64 Checked CoreFX Baseline Build & Test:** "test OSX corefx_baseline"
+- **OSX x64 Checked CoreFX MinOpts Build & Test:** "test OSX corefx_minopts"
+- **OSX x64 Checked CoreFX JitStress=1 Build & Test:** "test OSX corefx_jitstress1"
+- **OSX x64 Checked CoreFX JitStress=2 Build & Test:** "test OSX corefx_jitstress2"
+- **OSX x64 Checked CoreFX JitStressRegs=1 Build & Test:** "test OSX corefx_jitstressregs1"
+- **OSX x64 Checked CoreFX JitStressRegs=2 Build & Test:** "test OSX corefx_jitstressregs2"
+- **OSX x64 Checked CoreFX JitStressRegs=3 Build & Test:** "test OSX corefx_jitstressregs3"
+- **OSX x64 Checked CoreFX JitStressRegs=4 Build & Test:** "test OSX corefx_jitstressregs4"
+- **OSX x64 Checked CoreFX JitStressRegs=8 Build & Test:** "test OSX corefx_jitstressregs8"
+- **OSX x64 Checked CoreFX JitStressRegs=0x10 Build & Test:** "test OSX corefx_jitstressregs0x10"
+- **OSX x64 Checked CoreFX JitStressRegs=0x80 Build & Test:** "test OSX corefx_jitstressregs0x80"
+- **CentOS x64 Release Priority 1 Build & Test:** "test CentOS7.1 pri1"
+- **CentOS x64 Release Ready-To-Run Priority 0 Build & Test:** "test CentOS7.1 Release r2r"
+- **CentOS x64 Checked Ready-To-Run Priority 0 Build & Test:** "test CentOS7.1 Checked r2r"
+- **CentOS x64 Release Ready-To-Run Priority 1 Build & Test:** "test CentOS7.1 Release pri1r2r"
+- **CentOS x64 Checked Ready-To-Run Priority 1 Build & Test:** "test CentOS7.1 Checked pri1r2r"
+- **CentOS x64 Release GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test CentOS7.1 Release gcstress15_pri1r2r"
+- **CentOS x64 Checked GCStress=15 Ready-To-Run Priority 1 Build & Test:** "test CentOS7.1 Checked gcstress15_pri1r2r"
+- **CentOS x64 Release jitstress1 R2R Build & Test:** "test CentOS x64 Release jitstress1 R2R"
+- **CentOS x64 Checked jitstress1 R2R Build & Test:** "test CentOS x64 Checked jitstress1 R2R"
+- **CentOS x64 Release jitstress2 R2R Build & Test:** "test CentOS x64 Release jitstress2 R2R"
+- **CentOS x64 Checked jitstress2 R2R Build & Test:** "test CentOS x64 Checked jitstress2 R2R"
+- **CentOS x64 Release jitstressregs1 R2R Build & Test:** "test CentOS x64 Release jitstressregs1 R2R"
+- **CentOS x64 Checked jitstressregs1 R2R Build & Test:** "test CentOS x64 Checked jitstressregs1 R2R"
+- **CentOS x64 Release jitstressregs2 R2R Build & Test:** "test CentOS x64 Release jitstressregs2 R2R"
+- **CentOS x64 Checked jitstressregs2 R2R Build & Test:** "test CentOS x64 Checked jitstressregs2 R2R"
+- **CentOS x64 Release jitstressregs3 R2R Build & Test:** "test CentOS x64 Release jitstressregs3 R2R"
+- **CentOS x64 Checked jitstressregs3 R2R Build & Test:** "test CentOS x64 Checked jitstressregs3 R2R"
+- **CentOS x64 Release jitstressregs4 R2R Build & Test:** "test CentOS x64 Release jitstressregs4 R2R"
+- **CentOS x64 Checked jitstressregs4 R2R Build & Test:** "test CentOS x64 Checked jitstressregs4 R2R"
+- **CentOS x64 Release jitstressregs8 R2R Build & Test:** "test CentOS x64 Release jitstressregs8 R2R"
+- **CentOS x64 Checked jitstressregs8 R2R Build & Test:** "test CentOS x64 Checked jitstressregs8 R2R"
+- **CentOS x64 Release jitstressregsx10 R2R Build & Test:** "test CentOS x64 Release jitstressregsx10 R2R"
+- **CentOS x64 Checked jitstressregsx10 R2R Build & Test:** "test CentOS x64 Checked jitstressregsx10 R2R"
+- **CentOS x64 Release jitstressregsx80 R2R Build & Test:** "test CentOS x64 Release jitstressregsx80 R2R"
+- **CentOS x64 Checked jitstressregsx80 R2R Build & Test:** "test CentOS x64 Checked jitstressregsx80 R2R"
+- **CentOS x64 Release JITMinOpts R2R Build & Test:** "test CentOS x64 Release JITMinOpts R2R"
+- **CentOS x64 Checked JITMinOpts R2R Build & Test:** "test CentOS x64 Checked JITMinOpts R2R"
+- **CentOS x64 Release ForceRelocs R2R Build & Test:** "test CentOS x64 Release ForceRelocs R2R"
+- **CentOS x64 Checked ForceRelocs R2R Build & Test:** "test CentOS x64 Checked ForceRelocs R2R"
+- **OpenSUSE x64 Release Priority 0 Build:** "test OpenSUSE13.2"
+- **OpenSUSE x64 Release Priority 1 Build & Test:** "test OpenSUSE13.2 pri1"
+- **Debian x64 Release Priority 0 Build:** "test Debian8.2"
+- **Debian x64 Release Priority 1 Build & Test:** "test Debian8.2 pri1"
+- **RedHat x64 Release Priority 0 Build:** "test RHEL7.2"
+- **RedHat x64 Release Priority 1 Build & Test:** "test RHEL7.2 pri1"
diff --git a/Documentation/project-docs/clr-complus-conf-docgen.sh b/Documentation/project-docs/clr-complus-conf-docgen.sh
new file mode 100755
index 0000000000..2ee3f9bfc0
--- /dev/null
+++ b/Documentation/project-docs/clr-complus-conf-docgen.sh
@@ -0,0 +1,105 @@
+#!/usr/bin/env bash
+
+# This script generates documentation about the various configuration options that
+# are available and how to use them.
+
+# Requires git, GNU bash and GNU m4 to run.
+
+#################################
+# Print script usage
+#################################
+
+if [ ! -r "$1" -o -z "$2" ]; then
+ echo "usage: $0 <path to clrconfigvalues.h> <output file>"
+ exit 1;
+fi
+
+#################################
+# Intro section of the document
+#################################
+
+read -r -d '' INTROSECTION << "EOF"
+
+There are two primary ways to configure runtime behavior: CoreCLR hosts can pass in key-value string pairs during runtime initialization, or users can set special variables in the environment or registry. Today, the set of configuration options that can be set via the former method is relatively small, but moving forward, we expect to add more options there. Each set of options is described below.
+
+EOF
+
+#################################
+# Host configuration knobs section of the document
+#
+# Contains information about the key-value pairs that can be
+# passed in by a host during CoreCLR initialization.
+#################################
+
+read -r -d '' HOSTCONFIGURATIONKNOBSSECTION << "EOF"
+
+## Host Configuration Knobs
+
+These can be passed in by a host during initialization. Note that the values are all passed in as strings, so if the type is boolean, the value would be the string "true" or "false", and if it's a numeric value, it would be in the form "123".
+
+Name | Description | Type
+-----|-------------|------
+System.GC.Concurrent|Enable concurrent GC|boolean
+System.GC.Server|Enable server GC|boolean
+System.GC.RetainVM|Put segments that should be deleted on a standby list for future use instead of releasing them back to the OS|boolean
+System.Threading.ThreadPool.MinThreads|Override MinThreads for the ThreadPool worker pool|numeric
+System.Threading.ThreadPool.MaxThreads|Override MaxThreads for the ThreadPool worker pool|numeric
+
+EOF
+
+#################################
+# CLRConfig section of the document
+#
+# This section contains a table of COMPlus configurations that's
+# generated based on the contents of the clrconfigvalues.h header.
+#################################
+
+CLRCONFIGSECTIONTITLE="## Environment/Registry Configuration Knobs"
+DATE=`date +%D`;
+COMMIT=`git rev-parse --short HEAD`
+GENERATEDTABLEINFO="This table is machine-generated from commit $COMMIT on ${DATE}. It might be out of date."
+
+read -r -d '' CLRCONFIGSECTIONCONTENTS << "EOF"
+When using these configurations from environment variables, the variables need to have the `COMPlus_` prefix in their names. e.g. To set DumpJittedMethods to 1, add the environment variable `COMPlus_DumpJittedMethods=1`.
+
+See also [Setting configuration variables](../building/viewing-jit-dumps.md#setting-configuration-variables) for more information.
+
+Name | Description | Type | Class | Default Value | Flags
+-----|-------------|------|-------|---------------|-------
+EOF
+
+#################################
+# M4 script for processing macros
+#################################
+
+read -r -d '' M4SCRIPT << "EOF"
+changequote(`"', `"')
+define("CONFIG_DWORD_INFO", "`$2` | $4 | DWORD | patsubst("$1", "_.*", "") | $3 | ")dnl
+define("RETAIL_CONFIG_DWORD_INFO", "`$2` | $4 | DWORD | patsubst("$1", "_.*", "") | $3 | ")dnl
+define("CONFIG_DWORD_INFO_DIRECT_ACCESS", "`$2` | $3 | DWORD | patsubst("$1", "_.*", "") | | ")dnl
+define("RETAIL_CONFIG_DWORD_INFO_DIRECT_ACCESS", "`$2` | $3 | DWORD | patsubst("$1", "_.*", "") | | ")dnl
+define("CONFIG_STRING_INFO", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | ")dnl
+define("RETAIL_CONFIG_STRING_INFO", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | ")dnl
+define("CONFIG_STRING_INFO_DIRECT_ACCESS", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | ")dnl
+define("RETAIL_CONFIG_STRING_INFO_DIRECT_ACCESS", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | ")dnl
+define("CONFIG_DWORD_INFO_EX", "`$2` | $4 | DWORD | patsubst("$1", "_.*", "") | $3 | patsubst(patsubst("$5", "CLRConfig::", ""), "|", "/")")dnl
+define("RETAIL_CONFIG_DWORD_INFO_EX", "`$2` | $4 | DWORD | patsubst("$1", "_.*", "") | $3 | patsubst(patsubst("$5", "CLRConfig::", ""), "|", "/")")dnl
+define("CONFIG_STRING_INFO_EX", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | patsubst(patsubst("$4", "CLRConfig::", ""), "|", "/")")dnl
+define("RETAIL_CONFIG_STRING_INFO_EX", "`$2` | $3 | STRING | patsubst("$1", "_.*", "") | | patsubst(patsubst("$4", "CLRConfig::", ""), "|", "/")")dnl
+define("W", "$1")dnl
+dnl
+
+EOF
+
+#################################
+# Write contents to file
+#################################
+
+cat <(echo "$INTROSECTION") <(echo)\
+ <(echo "$HOSTCONFIGURATIONKNOBSSECTION") <(echo)\
+ <(echo "$CLRCONFIGSECTIONTITLE") <(echo)\
+ <(echo "$GENERATEDTABLEINFO") > "$2";
+
+cat <(echo "$M4SCRIPT") \
+ <(echo "$CLRCONFIGSECTIONCONTENTS") <(cat "$1" | sed "/^\/\//d" | sed "/^#/d" | sed "s/\\\\\"/'/g" | sed "/^$/d" ) \
+ | m4 | sed "s/;$//" >> "$2"; \ No newline at end of file
diff --git a/Documentation/project-docs/clr-configuration-knobs.md b/Documentation/project-docs/clr-configuration-knobs.md
new file mode 100644
index 0000000000..63f094b8ee
--- /dev/null
+++ b/Documentation/project-docs/clr-configuration-knobs.md
@@ -0,0 +1,809 @@
+There are two primary ways to configure runtime behavior: CoreCLR hosts can pass in key-value string pairs during runtime initialization, or users can set special variables in the environment or registry. Today, the set of configuration options that can be set via the former method is relatively small, but moving forward, we expect to add more options there. Each set of options is described below.
+
+## Host Configuration Knobs
+
+These can be passed in by a host during initialization. Note that the values are all passed in as strings, so if the type is boolean, the value would be the string "true" or "false", and if it's a numeric value, it would be in the form "123".
+
+Name | Description | Type
+-----|-------------|------
+System.GC.Concurrent|Enable concurrent GC|boolean
+System.GC.Server|Enable server GC|boolean
+System.GC.RetainVM|Put segments that should be deleted on a standby list for future use instead of releasing them back to the OS|boolean
+System.Threading.ThreadPool.MinThreads|Override MinThreads for the ThreadPool worker pool|numeric
+System.Threading.ThreadPool.MaxThreads|Override MaxThreads for the ThreadPool worker pool|numeric
+
+## Environment/Registry Configuration Knobs
+
+This table is machine-generated from commit 82ed770 on 05/31/16. It might be out of date.
+
+When using these configurations from environment variables, the variables need to have the `COMPlus_` prefix in their names. e.g. To set DumpJittedMethods to 1, add the environment variable `COMPlus_DumpJittedMethods=1`.
+
+See also [Setting configuration variables](../building/viewing-jit-dumps.md#setting-configuration-variables) for more information.
+
+Name | Description | Type | Class | Default Value | Flags
+-----|-------------|------|-------|---------------|-------
+`ADBreakOnCannotUnload` | Used to troubleshoot failures to unload appdomain (e.g. someone sitting in unmanged code). In some cases by the time we throw the appropriate exception the thread has moved from the offending call. This setting allows in an instrumented build to stop exactly at the right moment. | DWORD | INTERNAL | 0 |
+`AddRejitNops` | Control for the profiler rejit feature infrastructure | DWORD | UNSUPPORTED | |
+`ADDumpSB` | Not used | DWORD | INTERNAL | 0 |
+`ADForceSB` | Forces sync block creation for all objects | DWORD | INTERNAL | 0 |
+`ADLogMemory` | Superseded by test hooks | DWORD | INTERNAL | 0 |
+`ADTakeDHSnapShot` | Superseded by test hooks | DWORD | INTERNAL | 0 |
+`ADTakeSnapShot` | Superseded by test hooks | DWORD | INTERNAL | 0 |
+`EnableFullDebug` | Heavy-weight checking for AD boundary violations (AD leaks) | DWORD | INTERNAL | |
+`DisableMSIPeek` | Disable MSI check in Fusion | DWORD | INTERNAL | 0 |
+`MsiPeekForbid` | Assert on MSI calls | DWORD | INTERNAL | 0 |
+`ADULazyMemoryRelease` | On by default. Turned off in cases when people try to catch memory leaks, in which case AD unload should be immediately followed by GC) | DWORD | EXTERNAL | 1 |
+`ADURetryCount` | Controls timeout of AD unload. Used for workarounds when machine is too slow, there are network issues etc. | DWORD | EXTERNAL | |
+`APPDOMAIN_MANAGER_ASM` | Legacy method to specify the assembly containing the AppDomainManager to use for the default domain | STRING | EXTERNAL | | DontPrependCOMPlus_ / IgnoreHKLM / IgnoreHKCU
+`APPDOMAIN_MANAGER_TYPE` | LegacyMethod to specify the type containing the AppDomainManager to use for the default domain | STRING | EXTERNAL | | DontPrependCOMPlus_ / IgnoreHKLM / IgnoreHKCU
+`appDomainManagerAssembly` | Config file switch to specify the assembly for the default AppDomainManager. | STRING | EXTERNAL | | IgnoreEnv / IgnoreHKLM / IgnoreHKCU
+`appDomainManagerType` | Config file switch to specify the type for the default AppDomainManager. | STRING | EXTERNAL | | IgnoreEnv / IgnoreHKLM / IgnoreHKCU
+`AppDomainAgilityChecked` | Used to detect AD boundary violations (AD leaks) | DWORD | INTERNAL | |
+`AppDomainNoUnload` | Not used | DWORD | INTERNAL | 0 |
+`TargetFrameworkMoniker` | Allows the test team to specify what TargetFrameworkMoniker to use. | STRING | INTERNAL | | IgnoreHKLM / IgnoreHKCU / IgnoreConfigFiles / IgnoreWindowsQuirkDB
+`AppContextSwitchOverrides` | Allows default switch values defined in AppContext to be overwritten by values in the Config | STRING | INTERNAL | | IgnoreEnv / IgnoreHKLM / IgnoreHKCU / IgnoreWindowsQuirkDB / ConfigFile_ApplicationFirst
+`FinalizeOnShutdown` | When enabled, on shutdown, blocks all user threads and calls finalizers for all finalizable objects, including live objects | DWORD | EXTERNAL | DEFAULT_FinalizeOnShutdown |
+`ARMEnabled` | Set it to 1 to enable ARM | DWORD | UNSUPPORTED | (DWORD)0 |
+`designerNamespaceResolution` | Set it to 1 to enable DesignerNamespaceResolve event for WinRT types | DWORD | EXTERNAL | FALSE | IgnoreEnv / IgnoreHKLM / IgnoreHKCU / FavorConfigFile
+`GetAssemblyIfLoadedIgnoreRidMap` | Used to force loader to ignore assemblies cached in the rid-map | DWORD | INTERNAL | 0 | REGUTIL_default
+`BCLCorrectnessWarnings` | Flag a few common correctness bugs in the library with additional runtime checks. | DWORD | INTERNAL | |
+`BCLPerfWarnings` | Flag some performance-related problems via asserts when people mis-use the library. | DWORD | INTERNAL | |
+`TimeSpan_LegacyFormatMode` | Flag to enable System.TimeSpan legacy (.NET Framework 3.5 and earlier) ToString behavior. | DWORD | EXTERNAL | 0 |
+`CompatSortNLSVersion` | Determines the version of desired sorting behavior for AppCompat. | DWORD | EXTERNAL | 0 |
+`NetFx45_CultureAwareComparerGetHashCode_LongStrings` | Opt in to use the new (as of v4.5) constant space hash algorithm for strings | DWORD | EXTERNAL | 0 |
+`DisableUserPreferredFallback` | Resource lookups should be dependent only on the CurrentUICulture, not a user-defined list of preferred languages nor the OS preferred fallback language. Intended to avoid falling back to a right-to-left language, which is undisplayable in console apps. | DWORD | EXTERNAL | 0 |
+`relativeBindForResources` | Enables probing for satellite assemblies only next to the parent assembly | DWORD | EXTERNAL | 0 |
+`NetFx45_LegacyManagedDeflateStream` | Flag to enable legacy managed implementation of the deflater used by System.IO.Compression.DeflateStream. | DWORD | EXTERNAL | 0 |
+`DateTime_NetFX35ParseMode` | Flag to enable the .NET 3.5 System.DateTime Token Replacement Policy | DWORD | EXTERNAL | 0 |
+`ThrowUnobservedTaskExceptions` | Flag to propagate unobserved task exceptions on the finalizer thread. | DWORD | EXTERNAL | 0 |
+`EnableAmPmParseAdjustment` | Flag to enable the .NET 4.0 DateTimeParse to correctly parse AM/PM cases | DWORD | EXTERNAL | 0 |
+`UseRandomizedStringHashAlgorithm` | Flag to use a string hashing algorithm who's behavior differs between AppDomains | DWORD | EXTERNAL | 0 |
+`Windows8ProfileAPICheckFlag` | Windows 8 Profile API check behavior (non-W8P framework APIs cannot be accessed through Reflection and RefEmit). 0: normal (only check in non-dev-mode APPX). 1: always check. 2: never check. | DWORD | INTERNAL | 0 |
+`BreakOnBadExit` | | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`BreakOnClassBuild` | Very useful for debugging class layout code. | STRING | INTERNAL | |
+`BreakOnClassLoad` | Very useful for debugging class loading code. | STRING | INTERNAL | |
+`BreakOnComToClrNativeInfoInit` | Throws an assert when native information about a COM -> CLR call are about to be gathered. | STRING | INTERNAL | |
+`BreakOnDebugBreak` | allows an assert in debug builds when a user break is hit | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnDILoad` | allows an assert when the DI is loaded | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnDumpToken` | Breaks when using internal logging on a particular token value. | DWORD | INTERNAL | 0xffffffff | REGUTIL_default
+`BreakOnEELoad` | | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`BreakOnEEShutdown` | | DWORD | INTERNAL | 0 |
+`BreakOnExceptionInGetThrowable` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnFinalizeTimeOut` | Triggers a debug break on the finalizer thread when it has exceeded the maximum wait time | DWORD | UNSUPPORTED | 0 |
+`BreakOnFindMethod` | Breaks in findMethodInternal when it searches for the specified token. | DWORD | INTERNAL | 0 |
+`BreakOnFirstPass` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnHR` | Debug.cpp, IfFailxxx use this macro to stop if hr matches | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnInstantiation` | Very useful for debugging generic class instantiation. | STRING | INTERNAL | |
+`BreakOnInteropStubSetup` | Throws an assert when marshaling stub for the given method is about to be built. | STRING | INTERNAL | |
+`BreakOnInteropVTableBuild` | Specifies a type name for which an assert should be thrown when building interop v-table. | STRING | INTERNAL | | REGUTIL_default
+`BreakOnMethodName` | Very useful for debugging method override placement code. | STRING | INTERNAL | |
+`BreakOnNGenRegistryAccessCount` | Breaks on the Nth' root store write | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`BreakOnNotify` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnRetailAssert` | Used for debugging 'retail' asserts (fatal errors) | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnSecondPass` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnSO` | | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`BreakOnStructMarshalSetup` | Throws an assert when field marshalers for the given type with layout are about to be created. | STRING | INTERNAL | |
+`BreakOnUEF` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`BreakOnUncaughtException` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`CseBinarySearch` | Sets internal jit constants for CSE | STRING | INTERNAL | | REGUTIL_default
+`CseMax` | Sets internal jit constants for CSE | STRING | INTERNAL | | REGUTIL_default
+`CseOn` | Internal Jit control of CSE | STRING | UNSUPPORTED | | REGUTIL_default
+`CseStats` | Collects CSE statistics | STRING | INTERNAL | | REGUTIL_default
+`D::FCE` | allows an assert when crawling the managed stack for an exception handler | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakIfLocksUnavailable` | allows an assert when the debugger can't take a lock | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakOnErr` | allows an assert when we get a failing hresult | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakOnMapPatchToDJI` | allows an assert when mapping a patch to an address | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakOnRawInt3` | allows an assert for test coverage for debug break or other int3 breaks | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakOnSendBreakpoint` | allows an assert when sending a breakpoint to the right side | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgBreakOnSetIP` | allows an assert when setting the IP | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgCheckInt3` | asserts if the debugger explicitly writes int3 instead of calling SetUnmanagedBreakpoint | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgDACAssertOnMismatch` | allows an assert when the mscordacwks and mscorwks dll versions don't match | DWORD | INTERNAL | |
+`DbgDACEnableAssert` | Enables extra validity checking in DAC - assumes target isn't corrupt | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgDACSkipVerifyDlls` | allows disabling the check to ensure mscordacwks and mscorwks dll versions match | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgDelayHelper` | varies the wait in the helper thread startup for testing race between threads | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgDisableDynamicSymsCompat` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgDisableTargetConsistencyAsserts` | allows explicitly testing with corrupt targets | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgEnableMixedModeDebuggingInternalOnly` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgExtraThreads` | allows extra unmanaged threads to run and throw debug events for stress testing | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgExtraThreadsCantStop` | allows extra unmanaged threads in can't stop region to run and throw debug events for stress testing | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgExtraThreadsIB` | allows extra in-band unmanaged threads to run and throw debug events for stress testing | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgExtraThreadsOOB` | allows extra out of band unmanaged threads to run and throw debug events for stress testing | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgFaultInHandleIPCEvent` | allows testing the unhandled event filter | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgInjectFEE` | allows injecting a fatal execution error for testing Watson | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgLeakCheck` | allows checking for leaked Cordb objects | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgNo2ndChance` | allows breaking on (and catching bogus) 2nd chance exceptions | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgNoDebugger` | allows breaking if we don't want to lazily initialize the debugger | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgNoForceContinue` | used to force a continue on longhorn | DWORD | UNSUPPORTED | 1 | REGUTIL_default
+`DbgNoOpenMDByFile` | allows opening MD by memory for perf testing | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgOOBinFEEE` | allows forcing oob breakpoints when a fatal error occurs | DWORD | INTERNAL | 0 |
+`DbgPackShimPath` | CoreCLR path to dbgshim.dll - we are trying to figure out if we can remove this | STRING | EXTERNAL | |
+`DbgPingInterop` | allows checking for deadlocks in interop debugging | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgRace` | allows pausing for native debug events to get hijicked | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgRedirect` | allows for redirecting the event pipeline | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`DbgRedirectApplication` | Specifies the auxillary debugger application to launch. | STRING | EXTERNAL | |
+`DbgRedirectAttachCmd` | Specifies command parameters for attaching the auxillary debugger. | STRING | EXTERNAL | |
+`DbgRedirectCommonCmd` | Specifies a command line format string for the auxillary debugger. | STRING | EXTERNAL | |
+`DbgRedirectCreateCmd` | Specifies command parameters when creating the auxillary debugger. | STRING | EXTERNAL | |
+`DbgShortcutCanary` | allows a way to force canary to fail to be able to test failure paths | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgSkipMEOnStep` | turns off MethodEnter checks | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgSkipVerCheck` | allows different RS and LS versions (for servicing work) | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgTC` | allows checking boundary compression for offset mappings | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgTransportFaultInject` | allows injecting a fault for testing the debug transport | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgTransportLog` | turns on logging for the debug transport | DWORD | INTERNAL | |
+`DbgTransportLogClass` | mask to control what is logged in DbgTransportLog | DWORD | INTERNAL | |
+`DbgTransportProxyAddress` | allows specifying the transport proxy address | STRING | UNSUPPORTED | | REGUTIL_default
+`DbgTrapOnSkip` | allows breaking when we skip a breakpoint | DWORD | INTERNAL | 0 | REGUTIL_default
+`DbgWaitTimeout` | specifies the timeout value for waits | DWORD | INTERNAL | 1 | REGUTIL_default
+`DbgWFDETimeout` | specifies the timeout value for wait when waiting for a debug event | DWORD | UNSUPPORTED | 25 | REGUTIL_default
+`RaiseExceptionOnAssert` | Raise a first chance (if set to 1) or second chance (if set to 2) exception on asserts. | DWORD | INTERNAL | 0 | REGUTIL_default
+`DebugBreakOnAssert` | If DACCESS_COMPILE is defined, break on asserts. | DWORD | INTERNAL | 0 | REGUTIL_default
+`DebugBreakOnVerificationFailure` | Halts the jit on verification failure | DWORD | INTERNAL | 0 | REGUTIL_default
+`DebuggerBreakPoint` | allows counting various debug events | STRING | INTERNAL | | REGUTIL_default
+`DebugVerify` | Control for tracing in peverify | STRING | INTERNAL | | REGUTIL_default
+`EncApplyChanges` | allows breaking when ApplyEditAndContinue is called | DWORD | INTERNAL | 0 |
+`EnCBreakOnRemapComplete` | allows breaking after N RemapCompletes | DWORD | INTERNAL | 0 | REGUTIL_default
+`EnCBreakOnRemapOpportunity` | allows breaking after N RemapOpportunities | DWORD | INTERNAL | 0 | REGUTIL_default
+`EncDumpApplyChanges` | allows dumping edits in delta metadata and il files | DWORD | INTERNAL | 0 |
+`EncFixupFieldBreak` | Unlikely that this is used anymore. | DWORD | INTERNAL | 0 |
+`EncJitUpdatedFunction` | allows breaking when an updated function is jitted | DWORD | INTERNAL | 0 |
+`EnCResolveField` | allows breaking when computing the address of an EnC-added field | DWORD | INTERNAL | 0 |
+`EncResumeInUpdatedFunction` | allows breaking when execution resumes in a new EnC version of a function | DWORD | INTERNAL | 0 |
+`DbgAssertOnDebuggeeDebugBreak` | If non-zero causes the managed-only debugger to assert on unhandled breakpoints in the debuggee | DWORD | INTERNAL | 0 | REGUTIL_default
+`UNSUPPORTED_DbgDontResumeThreadsOnUnhandledException` | If non-zero, then don't try to unsuspend threads after continuing a 2nd-chance native exception | DWORD | UNSUPPORTED | 0 |
+`DbgSkipStackCheck` | Skip the stack pointer check during stackwalking | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`IntentionallyCorruptDataFromTarget` | Intentionally fakes bad data retrieved from target to try and break dump generation. | DWORD | INTERNAL | 0 |
+`UNSUPPORTED_Debugging_RequiredVersion` | The lowest ICorDebug version we should attempt to emulate, or 0 for default policy. Use 2 for CLRv2, 4 for CLRv4, etc. | DWORD | UNSUPPORTED | 0 |
+`MiniMdBufferCapacity` | The max size of the buffer to store mini metadata information for triage- and mini-dumps. | DWORD | INTERNAL | 64 * 1024 |
+`ConditionalContracts` | ?If ENABLE_CONTRACTS_IMPL is defined, sets whether contracts are conditional. | DWORD | INTERNAL | |
+`ConsistencyCheck` | | DWORD | INTERNAL | 0 |
+`ContinueOnAssert` | If set, doesn't break on asserts. | DWORD | INTERNAL | 0 | REGUTIL_default
+`disableStackOverflowProbing` | | DWORD | UNSUPPORTED | 0 | FavorConfigFile
+`EnforceEEThreadNotRequiredContracts` | Indicates whether to enforce EE_THREAD_NOT_REQUIRED contracts (not enforced by default for perf reasons). Only applicable in dbg/chk builds--EE_THREAD_NOT_REQUIRED contracts never enforced in ret builds. | DWORD | INTERNAL | 0 |
+`InjectFatalError` | | DWORD | INTERNAL | |
+`InjectFault` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SuppressChecks` | | DWORD | INTERNAL | |
+`SuppressLockViolationsOnReentryFromOS` | 64 bit OOM tests re-enter the CLR via RtlVirtualUnwind. This indicates whether to suppress resulting locking violations. | DWORD | INTERNAL | 0 |
+`TestHooks` | Used by tests to get test an insight on various CLR workings | STRING | INTERNAL | |
+`AssertOnFailFast` | | DWORD | INTERNAL | |
+`legacyCorruptedStateExceptionsPolicy` | Enabled Pre-V4 CSE behaviour | DWORD | UNSUPPORTED | 0 | FavorConfigFile
+`SuppressLostExceptionTypeAssert` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`FailFastOnCorruptedStateException` | Failfast if a CSE is encountered | DWORD | UNSUPPORTED | 0 | FavorConfigFile
+`FastGCCheckStack` | | DWORD | INTERNAL | 0 |
+`FastGCStress` | reduce the number of GCs done by enabling GCStress | DWORD | INTERNAL | |
+`GCBreakOnOOM` | Does a DebugBreak at the soonest time we detect an OOM | DWORD | UNSUPPORTED | |
+`gcConcurrent` | Enables/Disables concurrent GC | DWORD | UNSUPPORTED | (DWORD)-1 |
+`gcConservative` | Enables/Disables conservative GC | DWORD | UNSUPPORTED | 0 |
+`gcServer` | Enables server GC | DWORD | UNSUPPORTED | 0 |
+`GcCoverage` | specify a method or regular expression of method names to run with GCStress | STRING | INTERNAL | |
+`SkipGcCoverage` | specify a list of assembly names to skip with GC Coverage | STRING | INTERNAL | |
+`gcForceCompact` | When set to true, always do compacting GC | DWORD | UNSUPPORTED | |
+`GCgen0size` | Specifies the smallest gen0 size | DWORD | UNSUPPORTED | |
+`GCStressMix` | Specifies whether the GC mix mode is enabled or not | DWORD | INTERNAL | 0 |
+`GCStressStep` | Specifies how often StressHeap will actually do a GC in GCStressMix mode | DWORD | INTERNAL | 1 |
+`GCStressMaxFGCsPerBGC` | Specifies how many FGCs will occur during one BGC in GCStressMix mode | DWORD | INTERNAL | ~0U |
+`StatsUpdatePeriod` | Specifies the interval, in seconds, at which to update the statistics | DWORD | UNSUPPORTED | 60 |
+`SuspendTimeLog` | Specifies the name of the log file for suspension statistics | STRING | UNSUPPORTED | |
+`GCMixLog` | Specifies the name of the log file for GC mix statistics | STRING | UNSUPPORTED | |
+`GCLatencyMode` | Specifies the GC latency mode - batch, interactive or low latency (note that the same thing can be specified via API which is the supported way) | DWORD | INTERNAL | |
+`GCConfigLogEnabled` | Specifies if you want to turn on config logging in GC | DWORD | UNSUPPORTED | 0 |
+`GCLogEnabled` | Specifies if you want to turn on logging in GC | DWORD | UNSUPPORTED | 0 |
+`GCLogFile` | Specifies the name of the GC log file | STRING | UNSUPPORTED | |
+`GCConfigLogFile` | Specifies the name of the GC config log file | STRING | UNSUPPORTED | |
+`GCLogFileSize` | Specifies the GC log file size | DWORD | UNSUPPORTED | 0 |
+`GCCompactRatio` | Specifies the ratio compacting GCs vs sweeping | DWORD | UNSUPPORTED | 0 |
+`GCPollType` | | DWORD | EXTERNAL | |
+`NewGCCalc` | | STRING | EXTERNAL | | REGUTIL_default
+`GCprnLvl` | Specifies the maximum level of GC logging | DWORD | UNSUPPORTED | |
+`GCRetainVM` | When set we put the segments that should be deleted on a standby list (instead of releasing them back to the OS) which will be considered to satisfy new segment requests (note that the same thing can be specified via API which is the supported way) | DWORD | UNSUPPORTED | 0 |
+`GCSegmentSize` | Specifies the managed heap segment size | DWORD | UNSUPPORTED | |
+`GCLOHCompact` | Specifies the LOH compaction mode | DWORD | UNSUPPORTED | |
+`gcAllowVeryLargeObjects` | allow allocation of 2GB+ objects on GC heap | DWORD | EXTERNAL | 0 |
+`GCStress` | trigger GCs at regular intervals | DWORD | EXTERNAL | 0 | REGUTIL_default
+`GcStressOnDirectCalls` | whether to trigger a GC on direct calls | DWORD | INTERNAL | 0 | REGUTIL_default
+`GCStressStart` | start GCStress after N stress GCs have been attempted | DWORD | EXTERNAL | 0 |
+`GCStressStartAtJit` | start GCStress after N items are jitted | DWORD | INTERNAL | 0 |
+`GCtraceEnd` | Specifies the index of the GC when the logging should end | DWORD | UNSUPPORTED | |
+`GCtraceFacility` | Specifies where to log to (this allows you to log to console, the stress log or a normal CLR log (good when you need to correlate the GC activities with other CLR activities) | DWORD | INTERNAL | |
+`GCtraceStart` | Specifies the index of the GC when the logging should start | DWORD | UNSUPPORTED | |
+`gcTrimCommitOnLowMemory` | When set we trim the committed space more aggressively for the ephemeral seg. This is used for running many instances of server processes where they want to keep as little memory committed as possible | DWORD | EXTERNAL | |
+`BGCSpinCount` | Specifies the bgc spin count | DWORD | UNSUPPORTED | 140 |
+`BGCSpin` | Specifies the bgc spin time | DWORD | UNSUPPORTED | 2 |
+`HeapVerify` | When set verifies the integrity of the managed heap on entry and exit of each GC | DWORD | UNSUPPORTED | |
+`SetupGcCoverage` | This doesn't appear to be a config flag | STRING | EXTERNAL | | REGUTIL_default
+`GCNumaAware` | Specifies if to enable GC NUMA aware | DWORD | UNSUPPORTED | 1 |
+`GCCpuGroup` | Specifies if to enable GC to support CPU groups | DWORD | EXTERNAL | 0 |
+`IBCPrint` | | STRING | INTERNAL | | REGUTIL_default
+`IBCPrint3` | | STRING | INTERNAL | | REGUTIL_default
+`ConvertIbcData` | Converts between v1 and v2 IBC data | DWORD | UNSUPPORTED | 1 | REGUTIL_default
+`DisableHotCold` | Master hot/cold splitting switch in Jit64 | DWORD | UNSUPPORTED | |
+`DisableIBC` | Disables the use of IBC data | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`UseIBCFile` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`DumpJittedMethods` | Prints all jitted methods to the console | DWORD | INTERNAL | 0 | REGUTIL_default
+`Jit64Range` | | STRING | INTERNAL | | REGUTIL_default
+`JitAlignLoops` | Aligns loop targets to 8 byte boundaries | DWORD | UNSUPPORTED | |
+`JitCloneLoops` | If 0, don't clone. Otherwise clone loops for optimizations. | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitAssertOnMaxRAPasses` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitBreak` | Stops in the importer when compiling a specified method | STRING | INTERNAL | | REGUTIL_default
+`JitBreakEmit` | | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitBreakEmitOutputInstr` | | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitBreakMorphTree` | | DWORD | INTERNAL | 0xFFFFFFFF | REGUTIL_default
+`JitBreakOnBadCode` | | DWORD | INTERNAL | |
+`JitBreakOnUnsafeCode` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitCanUseSSE2` | | DWORD | INTERNAL | |
+`JitDebugBreak` | | STRING | INTERNAL | | REGUTIL_default
+`JitDebuggable` | | DWORD | INTERNAL | |
+`JitDefaultFill` | In debug builds, initialize the memory allocated by the nra with this byte. | DWORD | INTERNAL | 0xDD | REGUTIL_default
+`JitDirectAlloc` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitEnableNoWayAssert` | | DWORD | INTERNAL | INTERNAL_JitEnableNoWayAssert_Default | REGUTIL_default
+`JitDisasm` | Dumps disassembly for specified method | STRING | INTERNAL | | REGUTIL_default
+`JitDoubleAlign` | | DWORD | INTERNAL | |
+`JitDump` | Dumps trees for specified method | STRING | INTERNAL | | REGUTIL_default
+`JitDumpIR` | Dumps trees (in linear IR form) for specified method | STRING | INTERNAL | | REGUTIL_default
+`JitDumpIRFormat` | Comma separated format control for JitDumpIR, values = {types | locals | ssa | valnums | kinds | flags | nodes | nolists | nostmts | noleafs | trees | dataflow} | STRING | INTERNAL | | REGUTIL_default
+`JitDumpIRPhase` | Phase control for JitDumpIR, values = {* | phasename} | STRING | INTERNAL | | REGUTIL_default
+`JitDumpVerboseTrees` | Enable more verbose tree dumps | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDumpVerboseSsa` | Produce especially verbose dump output for SSA | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDumpBeforeAfterMorph` | If 1, display each tree before/after morphing | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDumpFg` | Dumps Xml/Dot Flowgraph for specified method | STRING | INTERNAL | | REGUTIL_default
+`JitDumpFgDir` | Directory for Xml/Dot flowgraph dump(s) | STRING | INTERNAL | | REGUTIL_default
+`JitDumpFgFile` | Filename for Xml/Dot flowgraph dump(s) | STRING | INTERNAL | | REGUTIL_default
+`JitDumpFgPhase` | Phase-based Xml/Dot flowgraph support. Set to the short name of a phase to see the flowgraph after that phase. Leave unset to dump after COLD-BLK (determine first cold block) or set to * for all phases | STRING | INTERNAL | | REGUTIL_default
+`JitDumpFgDot` | Set to non-zero to emit Dot instead of Xml Flowgraph dump | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDumpLevel` | | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDumpASCII` | Uses only ASCII characters in tree dumps | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDumpTerseLsra` | Produce terse dump output for LSRA | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDumpToDebugger` | Output JitDump output to the debugger | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitEmitPrintRefRegs` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitExclude` | | STRING | INTERNAL | | REGUTIL_default
+`JitForceFallback` | Set to non-zero to test NOWAY assert by forcing a retry | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoForceFallback` | Set to non-zero to prevent NOWAY assert testing. Overrides COMPlus_JitForceFallback and JIT stress flags. | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitExpensiveDebugCheckLevel` | Level indicates how much checking beyond the default to do in debug builds (currently 1-2) | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitForceProcedureSplitting` | | STRING | INTERNAL | | REGUTIL_default
+`JitForceVer` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitFramed` | Forces EBP frames | DWORD | UNSUPPORTED | |
+`JitFullyInt` | Forces Fully interruptable code | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitGCChecks` | | DWORD | INTERNAL | |
+`JitGCDump` | | STRING | INTERNAL | | REGUTIL_default
+`JitGCInfoLogging` | If true, prints GCInfo-related output to standard output. | DWORD | INTERNAL | 0 |
+`JitGCStress` | GC stress mode for jit | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitHalt` | Emits break instruction into jitted code | STRING | INTERNAL | | REGUTIL_default
+`JitHashHalt` | Same as JitHalt, but for a method hash | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitHashBreak` | Same as JitBreak, but for a method hash | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitHashDump` | Same as JitDump, but for a method hash | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitHashDumpIR` | Same as JitDumpIR, but for a method hash | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`JitHeartbeat` | | DWORD | INTERNAL | 0 |
+`JitHelperLogging` | | DWORD | INTERNAL | 0 |
+`JitImportBreak` | | STRING | INTERNAL | | REGUTIL_default
+`JitInclude` | | STRING | INTERNAL | | REGUTIL_default
+`JitInlineAdditionalMultiplier` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`JitInlineSIMDMultiplier` | | DWORD | INTERNAL | 3 | REGUTIL_default
+`JitInlinePrintStats` | | DWORD | INTERNAL | (DWORD)0 | REGUTIL_default
+`JITInlineSize` | | DWORD | INTERNAL | |
+`JitLateDisasm` | | STRING | INTERNAL | | REGUTIL_default
+`JITLateDisasmTo` | | STRING | INTERNAL | | REGUTIL_default
+`JITMaxTempAssert` | | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitMaxUncheckedOffset` | | DWORD | INTERNAL | (DWORD)8 | REGUTIL_default
+`JITMinOpts` | Forces MinOpts | DWORD | UNSUPPORTED | |
+`JITMinOptsBbCount` | Internal jit control of MinOpts | DWORD | INTERNAL | |
+`JITMinOptsCodeSize` | Internal jit control of MinOpts | DWORD | INTERNAL | |
+`JITMinOptsInstrCount` | Internal jit control of MinOpts | DWORD | INTERNAL | |
+`JITMinOptsLvNumcount` | Internal jit control of MinOpts | DWORD | INTERNAL | |
+`JITMinOptsLvRefcount` | Internal jit control of MinOpts | DWORD | INTERNAL | |
+`JITBreakOnMinOpts` | Halt if jit switches to MinOpts | DWORD | INTERNAL | |
+`JITMinOptsName` | Forces MinOpts for a named function | STRING | INTERNAL | | REGUTIL_default
+`JitName` | Primary Jit to use | STRING | EXTERNAL | |
+`AltJitName` | Alternative Jit to use, will fall back to primary jit. | STRING | EXTERNAL | | REGUTIL_default
+`AltJit` | Enables AltJit and selectively limits it to the specified methods. | STRING | EXTERNAL | | REGUTIL_default
+`AltJitExcludeAssemblies` | Do not use AltJit on this semicolon-delimited list of assemblies. | STRING | EXTERNAL | | REGUTIL_default
+`AltJitLimit` | Max number of functions to use altjit for (decimal) | DWORD | INTERNAL | 0 | REGUTIL_default
+`RunAltJitCode` | If non-zero, and the compilation succeeds for an AltJit, then use the code. If zero, then we always throw away the generated code and fall back to the default compiler. | DWORD | INTERNAL | 1 | REGUTIL_default
+`StackSamplingEnabled` | Is stack sampling based tracking of evolving hot methods enabled. | DWORD | UNSUPPORTED | 0 |
+`StackSamplingAfter` | When to start sampling (for some sort of app steady state), i.e., initial delay for sampling start in milliseconds. | DWORD | UNSUPPORTED | 0 |
+`StackSamplingEvery` | How frequent should thread stacks be sampled in milliseconds. | DWORD | UNSUPPORTED | 100 |
+`StackSamplingNumMethods` | Number of evolving methods to track as hot and JIT them in the background at a given point of execution. | DWORD | UNSUPPORTED | 32 |
+`AltJitNgen` | Enables AltJit for NGEN and selectively limits it to the specified methods. | STRING | INTERNAL | | REGUTIL_default
+`JitNoCMOV` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`UseRyuJIT` | Set to 1 by .NET 4.6 installer to indicate RyuJIT should be used, not JIT64. | DWORD | INTERNAL | 0 | IgnoreEnv / IgnoreHKCU / IgnoreConfigFiles
+`useLegacyJit` | Set to 1 to do all JITing with compatjit.dll. Only applicable to x64. | DWORD | EXTERNAL | 0 |
+`DisableNativeImageLoadList` | Refuse to load native images corresponding to one of the assemblies on this semicolon-delimited list of assembly names. | STRING | EXTERNAL | | REGUTIL_default
+`JitValNumCSE` | Enables ValNum CSE for the specified methods | STRING | INTERNAL | | REGUTIL_default
+`JitLexicalCSE` | Enables Lexical CSE for the specified methods | STRING | INTERNAL | | REGUTIL_default
+`JitNoCSE` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoCSE2` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoHoist` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoInline` | Disables inlining of all methods | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitAggressiveInlining` | Aggressive inlining of all methods | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoProcedureSplitting` | Disallow procedure splitting for specified methods | STRING | INTERNAL | | REGUTIL_default
+`JitNoProcedureSplittingEH` | Disallow procedure splitting for specified methods if they contain exception handling | STRING | INTERNAL | | REGUTIL_default
+`JitNoRegLoc` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoStructPromotion` | Disables struct promotion in Jit32 | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoUnroll` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoMemoryBarriers` | If 1, don't generate memory barriers | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitNoRngChks` | If 1, don't generate range checks | DWORD | PRIVATE | 0 |
+`JitOptimizeType` | | DWORD | EXTERNAL | |
+`JitOrder` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDiffableDasm` | Make the disassembly diff-able | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitSlowDebugChecksEnabled` | Turn on slow debug checks | DWORD | INTERNAL | 1 | REGUTIL_default
+`JITPInvokeCheckEnabled` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JITPInvokeEnabled` | | DWORD | INTERNAL | 1 |
+`JitPrintInlinedMethods` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`JitTelemetry` | If non-zero, gather JIT telemetry data | DWORD | EXTERNAL | 1 |
+`JitRange` | | STRING | INTERNAL | | REGUTIL_default
+`JITRequired` | | DWORD | INTERNAL | (unsigned)-1 | REGUTIL_default
+`JITRoundFloat` | | DWORD | INTERNAL | |
+`JitSkipArrayBoundCheck` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitStackChecks` | | DWORD | INTERNAL | |
+`JitStackProbes` | | DWORD | INTERNAL | |
+`JitStress` | Internal Jit stress mode: 0 = no stress, 2 = all stress, other = vary stress based on a hash of the method and this value | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitStressBBProf` | Internal Jit stress mode | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitStressFP` | Internal Jit stress mode | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitStressModeNames` | Internal Jit stress mode: stress using the given set of stress mode names, e.g. STRESS_REGS, STRESS_TAILCALL | STRING | INTERNAL | | REGUTIL_default
+`JitStressModeNamesNot` | Internal Jit stress mode: do NOT stress using the given set of stress mode names, e.g. STRESS_REGS, STRESS_TAILCALL | STRING | INTERNAL | | REGUTIL_default
+`JitStressOnly` | Internal Jit stress mode: stress only the specified method(s) | STRING | INTERNAL | | REGUTIL_default
+`JitStressRange` | Internal Jit stress mode | STRING | INTERNAL | | REGUTIL_default
+`JitStressRegs` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitStressBiasedCSE` | Internal Jit stress mode: decimal bias value between (0,100) to perform CSE on a candidate. 100% = All CSEs. 0% = 0 CSE. (> 100) means no stress. | DWORD | INTERNAL | 0x101 | REGUTIL_default
+`JitStrictCheckForNonVirtualCallToVirtualMethod` | | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitTimeLogFile` | If set, gather JIT throughput data and write to this file. | STRING | INTERNAL | |
+`JitTimeLogCsv` | If set, gather JIT throughput data and write to a CSV file. This mode must be used in internal retail builds. | STRING | INTERNAL | |
+`JitFuncInfoLogFile` | If set, gather JIT function info and write to this file. | STRING | INTERNAL | |
+`JitUnwindDump` | Dump the unwind codes for the method | STRING | INTERNAL | |
+`JitEHDump` | Dump the EH table for the method, as reported to the VM | STRING | INTERNAL | |
+`JitVerificationDisable` | | DWORD | INTERNAL | |
+`JitLockWrite` | Force all volatile writes to be 'locked' | DWORD | INTERNAL | 0 |
+`TailCallMax` | | STRING | INTERNAL | | REGUTIL_default
+`TailCallOpt` | | STRING | EXTERNAL | | REGUTIL_default
+`TailcallStress` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`TailCallLoopOpt` | Convert recursive tail calls to loops | DWORD | EXTERNAL | 1 |
+`NetFx40_PInvokeStackResilience` | Makes P/Invoke resilient against mismatched signature and calling convention (significant perf penalty). | DWORD | EXTERNAL | (DWORD)-1 |
+`JitDoSsa` | Perform Static Single Assignment (SSA) numbering on the variables | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoEarlyProp` | Perform Early Value Propagataion | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoValueNumber` | Perform value numbering on method expressions | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoLoopHoisting` | Perform loop hoisting on loop invariant values | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoCopyProp` | Perform copy propagation on variables that appear redundant | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoAssertionProp` | Perform assertion propagation optimization | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitDoRangeAnalysis` | Perform range check analysis | DWORD | INTERNAL | 1 | REGUTIL_default
+`JitSsaStress` | Perturb order of processing of blocks in SSA; 0 = no stress; 1 = use method hash; * = supplied value as random hash | DWORD | INTERNAL | 0 | REGUTIL_default
+`AltJitAssertOnNYI` | Controls the AltJit behavior of NYI stuff | DWORD | INTERNAL | 0 |
+`AltJitAssertOnNYI` | Controls the AltJit behavior of NYI stuff | DWORD | INTERNAL | 1 |
+`AltJitSkipOnAssert` | If AltJit hits an assert, fall back to the fallback JIT. Useful in conjunction with COMPlus_ContinueOnAssert=1 | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitLargeBranches` | Force using the largest conditional branch format | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitSplitFunctionSize` | On ARM, use this as the maximum function/funclet size for creating function fragments (and creating multiple RUNTIME_FUNCTION entries) | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitRegisterFP` | Control FP enregistration | DWORD | EXTERNAL | 3 | REGUTIL_default
+`JitELTHookEnabled` | On ARM, setting this will emit Enter/Leave/TailCall callbacks | DWORD | INTERNAL | 0 |
+`JitComponentUnitTests` | Run JIT component unit tests | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitMemStats` | Display JIT memory usage statistics | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitLoopHoistStats` | Display JIT loop hoisting statistics | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitDebugLogLoopCloning` | In debug builds log places where loop cloning optimizations are performed on the fast path. | DWORD | INTERNAL | 0 | REGUTIL_default
+`JitVNMapSelLimit` | If non-zero, assert if # of VNF_MapSelect applications considered reaches this | DWORD | patsubst(INTERNAL_JitVNMapSelLimit, _.*, ) | 0 | patsubst(patsubst(CLRConfig::REGUTIL_default, CLRConfig::, ), |, /)
+`JitVNMapSelBudget` | Max # of MapSelect's considered for a particular top-level invocation. | DWORD | patsubst(INTERNAL_JitVNMapSelBudget, _.*, ) | 100 |
+`FeatureSIMD` | Enable SIMD support with companion SIMDVector.dll | DWORD | EXTERNAL | EXTERNAL_FeatureSIMD_Default | REGUTIL_default
+`EnableAVX` | Enable AVX instruction set for wide operations as default | DWORD | EXTERNAL | EXTERNAL_JitEnableAVX_Default | REGUTIL_default
+`JitEnablePCRelAddr` | Whether absolute addr be encoded as PC-rel offset by RyuJIT where possible | DWORD | INTERNAL | 1 | REGUTIL_default
+`MultiCoreJitProfile` | If set, use the file to store/control multi-core JIT. | STRING | INTERNAL | |
+`MultiCoreJitProfileWriteDelay` | Set the delay after which the multi-core JIT profile will be written to disk. | DWORD | INTERNAL | 12 |
+`JitFunctionTrace` | If non-zero, print JIT start/end logging | DWORD | INTERNAL | 0 |
+`HashTableSize` | Size of Hashtable | DWORD | INTERNAL | 500 | REGUTIL_default
+`LargeSymCount` | Large Sym Count Size | DWORD | INTERNAL | 100000 | REGUTIL_default
+`Interpret` | Selectively uses the interpreter to execute the specified methods | STRING | INTERNAL | | REGUTIL_default
+`InterpretExclude` | Excludes the specified methods from the set selected by 'Interpret' | STRING | INTERNAL | | REGUTIL_default
+`InterpreterMethHashMin` | Only interpret methods selected by 'Interpret' whose hash is at least this value. or after nth | DWORD | INTERNAL | 0 |
+`InterpreterMethHashMax` | If non-zero, only interpret methods selected by 'Interpret' whose hash is at most this value | DWORD | INTERNAL | UINT32_MAX |
+`InterpreterStubMin` | Only interpret methods selected by 'Interpret' whose stub num is at least this value. | DWORD | INTERNAL | 0 |
+`InterpreterStubMax` | If non-zero, only interpret methods selected by 'Interpret' whose stub number is at most this value. | DWORD | INTERNAL | UINT32_MAX |
+`InterpreterJITThreshold` | The number of times a method should be interpreted before being JITted | DWORD | INTERNAL | 10 |
+`InterpreterDoLoopMethods` | If set, don't check for loops, start by interpreting *all* methods | DWORD | INTERNAL | 0 |
+`InterpreterUseCaching` | If non-zero, use the caching mechanism. | DWORD | INTERNAL | 1 | REGUTIL_default
+`InterpreterLooseRules` | If non-zero, allow ECMA spec violations required by managed C++. | DWORD | INTERNAL | 1 | REGUTIL_default
+`InterpreterPrintPostMortem` | Prints summary information about the execution to the console | DWORD | INTERNAL | 0 |
+`InterpreterLogFile` | If non-null, append interpreter logging to this file, else use stdout | STRING | INTERNAL | | REGUTIL_default
+`DumpInterpreterStubs` | Prints all interpreter stubs that are created to the console | DWORD | INTERNAL | 0 |
+`TraceInterpreterEntries` | Logs entries to interpreted methods to the console | DWORD | INTERNAL | 0 |
+`TraceInterpreterIL` | Logs individual instructions of interpreted methods to the console | DWORD | INTERNAL | 0 |
+`TraceInterpreterOstack` | Logs operand stack after each IL instruction of interpreted methods to the console | DWORD | INTERNAL | 0 |
+`TraceInterpreterVerbose` | Logs interpreter progress with detailed messages to the console | DWORD | INTERNAL | 0 |
+`TraceInterpreterJITTransition` | Logs when the interpreter determines a method should be JITted | DWORD | INTERNAL | 0 |
+`InterpreterFallback` | Fallback to the interpreter when the JIT compiler fails | DWORD | INTERNAL | 0 |
+`APIThreadStress` | Used to test Loader for race conditions | DWORD | INTERNAL | |
+`ForceLog` | Fusion flag to enforce assembly binding log. Heavily used and documented in MSDN and BLOGS. | DWORD | EXTERNAL | |
+`LoaderOptimization` | Controls code sharing behavior | DWORD | EXTERNAL | |
+`CoreClrBinderLog` | Debug flag that enabled detailed log for new binder (similar to stress logging). | STRING | INTERNAL | |
+`DisableIJWVersionCheck` | Don't perform the new version check that prevents unsupported IJW in-proc SxS. | DWORD | EXTERNAL | 0 |
+`EnableFastBindClosure` | If set to >0 the binder uses CFastAssemblyBindingClosure instances | DWORD | UNSUPPORTED | 0 |
+`DisableFXClosureWalk` | Disable full closure walks even in the presence of FX binding redirects | DWORD | INTERNAL | 0 |
+`TagAssemblyNames` | Enable CAssemblyName::_tag field for more convenient debugging. | DWORD | INTERNAL | 0 |
+`WinMDPath` | Path for Windows WinMD files | STRING | INTERNAL | |
+`LoaderHeapCallTracing` | Loader heap troubleshooting | DWORD | INTERNAL | 0 | REGUTIL_default
+`CodeHeapReserveForJumpStubs` | Percentage of code heap to reserve for jump stubs | DWORD | INTERNAL | 2 |
+`NGenReserveForJumpStubs` | Percentage of ngen image size to reserve for jump stubs | DWORD | INTERNAL | 0 |
+`BreakOnOutOfMemoryWithinRange` | Break before out of memory within range exception is thrown | DWORD | INTERNAL | 0 |
+`LogEnable` | Turns on the traditional CLR log. | DWORD | INTERNAL | |
+`LogFacility` | Specifies a facility mask for CLR log. (See 'loglf.h'; VM interprets string value as hex number.) Also used by stresslog. | DWORD | INTERNAL | |
+`LogFacility2` | Specifies a facility mask for CLR log. (See 'loglf.h'; VM interprets string value as hex number.) Also used by stresslog. | DWORD | INTERNAL | |
+`logFatalError` | Specifies whether EventReporter logs fatal errors in the Windows event log. | DWORD | EXTERNAL | 1 |
+`LogFile` | Specifies a file name for the CLR log. | STRING | INTERNAL | | REGUTIL_default
+`LogFileAppend` | Specifies whether to append to or replace the CLR log file. | DWORD | INTERNAL | |
+`LogFlushFile` | Specifies whether to flush the CLR log file file on each write. | DWORD | INTERNAL | |
+`LogLevel` | 4=10 msgs, 9=1000000, 10=everything | DWORD | EXTERNAL | |
+`LogPath` | ?Fusion debug log path. | STRING | INTERNAL | |
+`LogToConsole` | Writes the CLR log to console. | DWORD | INTERNAL | |
+`LogToDebugger` | Writes the CLR log to debugger (OutputDebugStringA). | DWORD | INTERNAL | |
+`LogToFile` | Writes the CLR log to a file. | DWORD | INTERNAL | |
+`LogWithPid` | Appends pid to filename for the CLR log. | DWORD | INTERNAL | |
+`FusionLogFileNamesIncludePid` | Fusion logging will append process id to log filenames. | DWORD | EXTERNAL | 0 | REGUTIL_default
+`MD_ApplyDeltaBreak` | ASSERT when appplying EnC | DWORD | INTERNAL | 0 | REGUTIL_default
+`AssertOnBadImageFormat` | ASSERT when invalid MD read | DWORD | INTERNAL | |
+`MD_DeltaCheck` | ? Some checks of GUID when applying EnC? | DWORD | INTERNAL | 1 | REGUTIL_default
+`MD_EncDelta` | ? Forces EnC Delta format in MD | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_ForceNoColDesSharing` | ? ? Don't know - the only usage I could find is #if 0 | DWORD | patsubst(INTERNAL_MD_ForceNoColDesSharing, _.*, ) | 0 | patsubst(patsubst(CLRConfig::REGUTIL_default, CLRConfig::, ), |, /)
+`MD_KeepKnownCA` | ? Something with known CAs? | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_MiniMDBreak` | ASSERT when creating CMiniMdRw class | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_PreSaveBreak` | ASSERT when calling CMiniMdRw::PreSave | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_RegMetaBreak` | ASSERT when creating RegMeta class | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_RegMetaDump` | ? Dump MD in 4 functions? | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_TlbImp_BreakOnErr` | ASSERT when importing TLB into MD | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_TlbImp_BreakOnTypeImport` | ASSERT when importing a type from TLB | STRING | INTERNAL | | (LookupOptions) (REGUTIL_default / DontPrependCOMPlus_)
+`MD_UseMinimalDeltas` | ? Some MD modifications when applying EnC? | DWORD | INTERNAL | 1 | REGUTIL_default
+`MD_WinMD_Disable` | Never activate the WinMD import adapter | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_WinMD_AssertOnIllegalUsage` | ASSERT if a WinMD import adapter detects a tool incompatibility | DWORD | INTERNAL | 0 | REGUTIL_default
+`MD_PreserveDebuggerMetadataMemory` | Save all versions of metadata memory in the debugger when debuggee metadata is updated | DWORD | EXTERNAL | 0 | REGUTIL_default
+`MDA` | Config string to determine which MDAs to enable | STRING | EXTERNAL | | REGUTIL_default
+`MDAValidateFramework` | If set, validate the XML schema for MDA | STRING | INTERNAL | | REGUTIL_default
+`SpinInitialDuration` | Hex value specifying the first spin duration | DWORD | EXTERNAL | 0x32 | EEConfig_default
+`SpinBackoffFactor` | Hex value specifying the growth of each successive spin duration | DWORD | EXTERNAL | 0x3 | EEConfig_default
+`SpinLimitProcCap` | Hex value specifying the largest value of NumProcs to use when calculating the maximum spin duration | DWORD | EXTERNAL | 0xFFFFFFFF | EEConfig_default
+`SpinLimitProcFactor` | Hex value specifying the multiplier on NumProcs to use when calculating the maximum spin duration | DWORD | EXTERNAL | 0x4E20 | EEConfig_default
+`SpinLimitConstant` | Hex value specifying the constant to add when calculating the maximum spin duration | DWORD | EXTERNAL | 0x0 | EEConfig_default
+`SpinRetryCount` | Hex value specifying the number of times the entire spin process is repeated (when applicable) | DWORD | EXTERNAL | 0xA | EEConfig_default
+`NgenBind_UseTimestamp` | Use timestamp to validate a native image | DWORD | INTERNAL | 0 |
+`NgenBind_UseTimestampList` | | STRING | INTERNAL | |
+`NgenBind_UseTimestampExcludeList` | | STRING | INTERNAL | |
+`NgenBind_ZapForbid` | Assert if an assembly succeeds in binding to a native image | DWORD | INTERNAL | 0 |
+`NgenBind_ZapForbidExcludeList` | | STRING | INTERNAL | |
+`NgenBind_ZapForbidList` | | STRING | INTERNAL | |
+`NgenBind_OptimizeNonGac` | Skip loading IL image outside of GAC when NI can be loaded | DWORD | EXTERNAL | 0 |
+`SymDiffDump` | Used to create the map file while binding the assembly. Used by SemanticDiffer | DWORD | INTERNAL | 0 | REGUTIL_default
+`NGen_JitName` | | STRING | EXTERNAL | | REGUTIL_default
+`NGEN_USE_PRIVATE_STORE` | | DWORD | EXTERNAL | -1 | REGUTIL_default
+`NGENBreakOnInjectPerAssemblyFailure` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NGENBreakOnInjectTransientFailure` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NGENBreakOnWorker` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGenClean` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGenCompileWorkerHang` | If set to 1, NGen compile worker process hangs forever | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGenDeferAllCompiles` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGenDependencyWorkerHang` | If set to 1, NGen dependency walk worker process hangs forever | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NgenDisasm` | Same as JitDisasm, but for ngen | STRING | INTERNAL | | REGUTIL_default
+`NgenDump` | Same as JitDump, but for ngen | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpIR` | Same as JitDumpIR, but for ngen | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpIRFormat` | Same as JitDumpIRFormat, but for ngen | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpIRPhase` | Same as JitDumpIRPhase, but for ngen | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpFg` | Ngen Xml Flowgraph support | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpFgDir` | Ngen Xml Flowgraph support | STRING | INTERNAL | | REGUTIL_default
+`NgenDumpFgFile` | Ngen Xml Flowgraph support | STRING | INTERNAL | | REGUTIL_default
+`NGenFramed` | same as JitFramed, but for ngen | DWORD | UNSUPPORTED | -1 | REGUTIL_default
+`NgenGCDump` | | STRING | INTERNAL | | REGUTIL_default
+`NgenHashDump` | same as JitHashDump, but for ngen | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`NgenHashDumpIR` | same as JitHashDumpIR, but for ngen | DWORD | INTERNAL | (DWORD)-1 | REGUTIL_default
+`NGENInjectFailuresServiceOnly` | | DWORD | INTERNAL | 1 | REGUTIL_default
+`NGENInjectPerAssemblyFailure` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NGENInjectTransientFailure` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NGenLocalWorker` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGenMaxLogSize` | The maximum size ngen.log and ngen_service.log files can grow to. | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGenLogVerbosity` | Default ngen log verbosity level | DWORD | EXTERNAL | 2 | REGUTIL_default
+`NGenOnlyOneMethod` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NgenOrder` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`CheckNGenImageTimeStamp` | Used to skip ngen timestamp check when switching compilers around. | DWORD | EXTERNAL | 1 | REGUTIL_default
+`NGenRegistryAccessCount` | | DWORD | EXTERNAL | -1 | REGUTIL_default
+`NGenStressDelete` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGenUninstallKeep` | Semicolon-delimited list of assemblies to keep during 'ngen uninstall *' | STRING | INTERNAL | |
+`NgenUnwindDump` | Dump the unwind codes for the method | STRING | INTERNAL | |
+`NgenEHDump` | Dump the EH table for the method, as reported to the VM | STRING | INTERNAL | |
+`NGENUseService` | | DWORD | EXTERNAL | 1 | REGUTIL_default
+`NGenWorkerCount` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`partialNGenStress` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`ZapDoNothing` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`HardPrejitEnabled` | | DWORD | EXTERNAL | |
+`EnableHardbinding` | Enables the use of hardbinding | DWORD | INTERNAL | 0 | REGUTIL_default
+`WorkerRetryNgenFailures` | If set to 1, The Ngen worker will retry once when ngen fails | DWORD | INTERNAL | 0 | REGUTIL_default
+`NgenForceFailureMask` | Bitmask used to control which locations will check and raise the failure (defaults to bits: -1) | DWORD | INTERNAL | -1 | REGUTIL_default
+`NgenForceFailureCount` | If set to >0 and we have IBC data we will force a failure after we reference an IBC data item <value> times | DWORD | INTERNAL | 0 | REGUTIL_default
+`NgenForceFailureKind` | If set to 1, We will throw a TypeLoad exception; If set to 2, We will cause an A/V | DWORD | INTERNAL | 1 | REGUTIL_default
+`NGenEnableCreatePdb` | If set to >0 ngen.exe displays help on, recognizes createpdb in the command line | DWORD | UNSUPPORTED | 0 |
+`NGenSimulateDiskFull` | If set to 1, ngen will throw a Disk full exception in ZapWriter.cpp:Save() | DWORD | INTERNAL | 0 |
+`NGenAssemblyUsageLog` | Directory to store ngen usage logs in. | STRING | INTERNAL | |
+`NGenAssemblyUsageLogRefreshInterval` | Interval to update usage log timestamp (seconds) | DWORD | INTERNAL | 24 * 60 * 60 |
+`AppLocalAutongenNGenDisabled` | Autongen disable flag. | DWORD | INTERNAL | 0 |
+`PartialNGen` | Generate partial NGen images | DWORD | INTERNAL | -1 |
+`NgenAllowMscorlibSoftbind` | Disable forced hard-binding to mscorlib | DWORD | INTERNAL | 0 |
+`RegistryRoot` | Redirects all registry access under HKLM\Software to a specified alternative | STRING | UNSUPPORTED | | REGUTIL_default
+`AssemblyPath` | Redirects v2 GAC access to a specified alternative path | STRING | UNSUPPORTED | | REGUTIL_default
+`AssemblyPath2` | Redirects v4 GAC access to a specified alternative path | STRING | UNSUPPORTED | | REGUTIL_default
+`NicPath` | Redirects NIC access to a specified alternative | STRING | UNSUPPORTED | | REGUTIL_default
+`NGenTaskDelayStart` | Use NGen Task delay start trigger, instead of critical idle task | DWORD | INTERNAL | 0 |
+`Ningen` | Enable no-impact ngen | DWORD | INTERNAL | 1 |
+`Ningen` | Enable no-impact ngen | DWORD | INTERNAL | 0 |
+`NoASLRForNgen` | Turn off IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE bit in generated ngen images. Makes nidump output repeatable from run to run. | DWORD | INTERNAL | 0 |
+`NgenAllowOutput` | If set to 1, the NGEN worker will bind to the parent console, thus allowing stdout output to work | DWORD | EXTERNAL | 0 | REGUTIL_default
+`CrossGenAssumeInputSigned` | CrossGen should assume that its input assemblies will be signed before deployment | DWORD | INTERNAL | 1 |
+`NGENServiceAbortIdleWorkUnderDebugger` | Determines whether the Ngen service will abort idle-time tasks while under a debugger. Off by default. Allows for single-machine debugging of the idle-time logic. | DWORD | INTERNAL | 1 | REGUTIL_default
+`NGENServiceAggressiveHardDiskIdleTimeout` | This flag was intended as a backstop for HDD idle time detection (i.e. even if the hard disk is not idle, proceed with the compilation of the high-priority assemblies after the specified timeout). The current implementation compiles high-priority assemblies regardless of the state of the machine. | DWORD | EXTERNAL | 1*60*60*1000 | REGUTIL_default
+`NGENServiceAggressiveWorkWaitTimeout` | This flag was intended as a backstop for machine idle time detection (i.e. even if the machine is not idle, proceed with the compilation of the high-priority assemblies after the specified timeout). The current implementation compiles high-priority assemblies regardless of the state of the machine. | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NGENServiceBreakOnStart` | Determines whether the Ngen service will call DebugBreak in its start routing. Off by default. Marginally useful for debugging service startup (there are other techniques as well). | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGENServiceConservative` | Determines whether the Ngen service will avoid compiling low-priority assemblies if multiple sessions exist on the machine and it can't determine their state. Off by default. | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGenServiceDebugLog` | Configures the level of debug logging. | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGENServiceIdleBatteryThreshold` | When a battery-powered system is below the threshold, Ngen will not process low-priority assemblies. | DWORD | UNSUPPORTED | 50 | REGUTIL_default
+`NGENServiceIdleDebugInfo` | Determines whether the Ngen service will print the idle-time detection criteria to the debug log. Off by default. Ignored if NGenServiceDebugLog is 0. | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGENServiceIdleDiskLogic` | Determines if the Ngen service will use hard disk idle time for its machine idle time heuristics. | DWORD | UNSUPPORTED | 1 | REGUTIL_default
+`NGENServiceIdleDiskThreshold` | The amount of time after which a disk is declared idle. | DWORD | UNSUPPORTED | 80 | REGUTIL_default
+`NGENServiceIdleNoInputPeriod` | The amount of time after which the machine is declared idle if no input was received. | DWORD | UNSUPPORTED | 5*60*1000 | REGUTIL_default
+`NGENServicePassiveExceptInputTimeout` | The amount of time after which only input state is considered for idle time detection (input backstop mode, which ignores everything except input). | DWORD | UNSUPPORTED | 15*60*60*1000 | REGUTIL_default
+`NGENServicePassiveHardDiskIdleTimeout` | The amount of time after which the state of the hard disk is ignored for idle time detection. | DWORD | UNSUPPORTED | 36*60*60*1000 | REGUTIL_default
+`NGENServicePassiveWorkWaitTimeout` | The amount of time after which the machine is declared idle and low priority assemblies are compiled no matter what the actual state is (absolute backstop mode: declaring the machine as idle disregarding the actual state). | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`NGENServicePolicy` | The policy that will be used for the machine (client or server). By default, it's determined from the OS SKU. | DWORD | UNSUPPORTED | |
+`NGENServiceRestrictWorkersPrivileges` | Determines if worker processes are launched with restricted tokens. | DWORD | UNSUPPORTED | 1 |
+`NGENServiceSynchronization` | Determines if multiple services coordinate themselves so that only one service is working at a time. | DWORD | UNSUPPORTED | 1 | REGUTIL_default
+`NGENServiceTestHookDll` | The name of a module used for testing in-process | STRING | UNSUPPORTED | |
+`NGENServiceWaitAggressiveWork` | Specifies how often the service will check the machine state when trying to do high-priority work. | STRING | UNSUPPORTED | |
+`NGENServiceWaitPassiveWork` | Specifies how often the service will check the machine state when trying to do low-priority work. | DWORD | UNSUPPORTED | 1*60*1000 | REGUTIL_default
+`NGENServiceWaitWorking` | While working, the Ngen service polls the state of the machine for changes (another service trying to do higher priority work, the Ngen command line tool trying to do work, machine coming out of idle state). This variable controls the frequency of the polling. | DWORD | UNSUPPORTED | 1000 | REGUTIL_default
+`NGENServiceWorkerPriority` | The process priority class for workers. | DWORD | UNSUPPORTED | |
+`EnableMultiproc` | Turns on multiproc ngen | DWORD | EXTERNAL | 1 | REGUTIL_default
+`SvcRetryNgenFailures` | If set to 1, The Ngen service will retry once when ngen fails | DWORD | EXTERNAL | 1 | REGUTIL_default
+`NGenTaskDelayStartAmount` | Number of seconds to delay for ngen update /queue /delay | DWORD | INTERNAL | 5 * 60 | REGUTIL_default
+`NGenProtectedProcess_FeatureEnabled` | Run ngen as PPL (protected process) if needed. Set to 0 to disable the feature for compat with older Win8 builds. | DWORD | INTERNAL | -1 | IgnoreConfigFiles
+`NGenProtectedProcess_RequiredList` | Semicolon-separated list of assembly names that are required to be ngen'd in PPL process. Each name in the list is matched as prefix or suffix of assembly name/assembly file name. | STRING | INTERNAL | | IgnoreConfigFiles
+`NGenProtectedProcess_ForbiddenList` | Semicolon-separated list of assembly names that are forbidden to be ngen'd in PPL process. Each name in the list is matched as prefix or suffix of assembly name/assembly file name. | STRING | INTERNAL | | IgnoreConfigFiles
+`NGenCopyFromRepository_SetCachedSigningLevel` | Support for test tree ngen.exe flag /CopyFromRepository to also vouch for the output NIs. | DWORD | INTERNAL | 0 | IgnoreConfigFiles
+`performanceScenario` | Activates a set of workload-specific default values for performance settings | STRING | EXTERNAL | |
+`ProcessNameFormat` | Used by corperfmonext.dll to determine whether to decorate an instance name with the corresponding PID and runtime ID | DWORD | EXTERNAL | (DWORD)-1 | IgnoreHKLM / IgnoreHKCU / IgnoreConfigFiles
+`COR_ENABLE_PROFILING` | Flag to indicate whether profiling should be enabled for the currently running process. | DWORD | EXTERNAL | 0 | DontPrependCOMPlus_ / IgnoreConfigFiles
+`COR_PROFILER` | Specifies GUID of profiler to load into currently running process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`COR_PROFILER_PATH` | Specifies the path to the DLL of profiler to load into currently running process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`COR_PROFILER_PATH_32` | Specifies the path to the DLL of profiler to load into currently running 32 bits process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`COR_PROFILER_PATH_64` | Specifies the path to the DLL of profiler to load into currently running 64 bits process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`CORECLR_ENABLE_PROFILING` | CoreCLR only: Flag to indicate whether profiling should be enabled for the currently running process. | DWORD | EXTERNAL | 0 | DontPrependCOMPlus_ / IgnoreConfigFiles
+`CORECLR_PROFILER` | CoreCLR only: Specifies GUID of profiler to load into currently running process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`CORECLR_PROFILER_PATH` | CoreCLR only: Specifies the path to the DLL of profiler to load into currently running process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`CORECLR_PROFILER_PATH_32` | CoreCLR only: Specifies the path to the DLL of profiler to load into currently running 32 process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`CORECLR_PROFILER_PATH_64` | CoreCLR only: Specifies the path to the DLL of profiler to load into currently running 64 process | STRING | EXTERNAL | | DontPrependCOMPlus_
+`ProfAPI_ProfilerCompatibilitySetting` | Specifies the profiler loading policy (the default is not to load a V2 profiler in V4) | STRING | EXTERNAL | | REGUTIL_default / TrimWhiteSpaceFromStringValue
+`AttachThreadAlwaysOn` | Forces profapi attach thread to be created on startup, instead of on-demand. | DWORD | EXTERNAL | |
+`MsBetweenAttachCheck` | | DWORD | EXTERNAL | 500 |
+`ProfAPIMaxWaitForTriggerMs` | Timeout in ms for profilee to wait for each blocking operation performed by trigger app. | DWORD | EXTERNAL | 5*60*1000 |
+`ProfAPI_DetachMinSleepMs` | The minimum time, in millseconds, the CLR will wait before checking whether a profiler that is in the process of detaching is ready to be unloaded. | DWORD | EXTERNAL | 0 |
+`ProfAPI_DetachMaxSleepMs` | The maximum time, in millseconds, the CLR will wait before checking whether a profiler that is in the process of detaching is ready to be unloaded. | DWORD | EXTERNAL | 0 |
+`ProfAPI_EnableRejitDiagnostics` | Enable extra dumping to stdout of rejit structures | DWORD | INTERNAL | 0 |
+`ProfAPI_AttachProfilerMinTimeoutInMs` | Timeout in ms for the minimum time out value of AttachProfiler | DWORD | EXTERNAL | 10*1000 |
+`ProfAPIFault` | Test-only bitmask to inject various types of faults in the profapi code | DWORD | INTERNAL | 0 |
+`TestOnlyAllowedEventMask` | Test-only bitmask to allow profiler tests to override CLR enforcement of COR_PRF_ALLOWABLE_AFTER_ATTACH and COR_PRF_MONITOR_IMMUTABLE | DWORD | INTERNAL | 0 |
+`ProfAPI_TestOnlyEnableICorProfilerInfo` | Test-only flag to allow attaching profiler tests to call ICorProfilerInfo interface, which would otherwise be disallowed for attaching profilers | DWORD | INTERNAL | 0 |
+`TestOnlyEnableObjectAllocatedHook` | Test-only flag that forces CLR to initialize on startup as if ObjectAllocated callback were requested, to enable post-attach ObjectAllocated functionality. | DWORD | INTERNAL | 0 |
+`TestOnlyEnableSlowELTHooks` | Test-only flag that forces CLR to initialize on startup as if slow-ELT were requested, to enable post-attach ELT functionality. | DWORD | INTERNAL | 0 |
+`ETWEnabled` | This flag is used on OSes < Vista to enable/disable ETW. It is disabled by default | DWORD | EXTERNAL | 0 | REGUTIL_default
+`ETWEnabled` | This flag is used on OSes >= Vista to enable/disable ETW. It is enabled by default | DWORD | EXTERNAL | 1 | REGUTIL_default
+`ETW_ObjectAllocationEventsPerTypePerSec` | Desired number of GCSampledObjectAllocation ETW events to be logged per type per second. If 0, then the default built in to the implementation for the enabled event (e.g., High, Low), will be used. | STRING | UNSUPPORTED | | REGUTIL_default
+`ProfAPI_ValidateNGENInstrumentation` | This flag enables additional validations when using the IMetaDataEmit APIs for NGEN'ed images to ensure only supported edits are made. | DWORD | UNSUPPORTED | 0 |
+`PerfMapEnabled` | This flag is used on Linux to enable writing /tmp/perf-$pid.map. It is disabled by default | DWORD | EXTERNAL | 0 | REGUTIL_default
+`EnableIEHosting` | Allow activation of IE hosting | DWORD | UNSUPPORTED | |
+`NoGuiFromShim` | Turn off GUI in shim | DWORD | UNSUPPORTED | |
+`OnlyUseLatestCLR` | Big red switch for loading CLR | DWORD | UNSUPPORTED | |
+`FailOnInProcSxS` | Fails the process when a second runtime is loaded in-process | DWORD | UNSUPPORTED | |
+`UseLegacyV2RuntimeActivationPolicyDefaultValue` | Modifies the default value | DWORD | UNSUPPORTED | |
+`ErrorDialog` | Allow showing UI on error | DWORD | UNSUPPORTED | |
+`Fod` | Test the Feature On Demand installation | DWORD | UNSUPPORTED | |
+`FodPath` | Name of executable for Feature On Demand mockup | STRING | UNSUPPORTED | |
+`FodArgs` | Command line arguments to pass to the FOD process | STRING | UNSUPPORTED | |
+`FodLaunchAsync` | Whether to launch FOD asynchronously. | DWORD | UNSUPPORTED | |
+`FodConservativeMode` | Whether to be conservative wrt Fod launch. | DWORD | UNSUPPORTED | |
+`ApplicationMigrationRuntimeActivationConfigPath` | Provides a path in which to look for configuration files to be used for runtime activation, for application migration scenarios, before looking next to the EXE itself. | DWORD | EXTERNAL | |
+`TestOnlyEnsureImmersive` | Test-only flag used to indicate that it is expected that a process should be running as immersive. | DWORD | INTERNAL | |
+`EnableCoreClrHost` | Enables hosting coreclr from desktop mscoreei.dll to run windows store apps | DWORD | INTERNAL | |
+`AptcaAssemblyBreak` | Sets a breakpoint when checking if an assembly is APTCA or not | STRING | INTERNAL | | REGUTIL_default
+`AptcaAssemblySharingBreak` | Sets a breakpoint when checking if we can code share an assembly | STRING | INTERNAL | |
+`AptcaAssemblySharingDomainBreak` | Sets a breakpoint only in the specified domain when checking if we can code share an assembly | DWORD | INTERNAL | 0 |
+`DefaultSecurityRuleSet` | Overrides the security rule set that assemblies which don't explicitly select their own rule set should use | DWORD | INTERNAL | 0 |
+`legacyCasPolicy` | Enable CAS policy for the process - for test use only, official access to this switch is through NetFx40_LegacySecurityPolicy. | DWORD | EXTERNAL | 0 |
+`loadFromRemoteSources` | Enable loading from zones that are not MyComputer when not in CAS mode. | DWORD | EXTERNAL | 0 |
+`LogTransparencyErrors` | Add an entry to the CLR log file for all transparency errors, rather than throwing an exception | DWORD | UNSUPPORTED | 0 |
+`NetFx40_LegacySecurityPolicy` | Enable CAS policy for the process. | DWORD | EXTERNAL | 0 |
+`NGenForPartialTrust` | Force NGEN to generate code for assemblies that could be used in partial trust. | DWORD | INTERNAL | 0 |
+`TransparencyFieldBreak` | Sets a breakpoint when figuring out the transparency of a specific field | STRING | INTERNAL | | REGUTIL_default
+`TransparencyMethodBreak` | Sets a breakpoint when figuring out the transparency of a specific method | STRING | INTERNAL | | REGUTIL_default
+`TransparencyTypeBreak` | Sets a breakpoint when figuring out the transparency of a specific type | STRING | INTERNAL | | REGUTIL_default
+`AlwaysInsertCallout` | Always insert security access/transparency/APTCA callouts | DWORD | INTERNAL | 0 |
+`DisableAnonymouslyHostedDynamicMethodCreatorSecurityCheck` | Disables security checks for anonymously hosted dynamic methods based on their creator's security. | DWORD | UNSUPPORTED | 0 |
+`unsafeTypeForwarding` | Enable unsafe type forwarding between unrelated assemblies | DWORD | EXTERNAL | 0 |
+`SOBreakOnProbeDuringSO` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SODumpViolationsDir` | | STRING | INTERNAL | | REGUTIL_default
+`SODumpViolationsStackTraceLength` | | DWORD | INTERNAL | |
+`SOEnableBackoutStackValidation` | | DWORD | INTERNAL | |
+`SOEnableDefaultRWValidation` | | DWORD | INTERNAL | |
+`SOEnableStackProtectionInDebugger` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SOEnableStackProtectionInDebuggerForProbeAtLine` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SOEntryPointProbe` | | DWORD | INTERNAL | |
+`SOInteriorProbe` | | DWORD | INTERNAL | |
+`SOLogger` | | DWORD | INTERNAL | |
+`SOProbeAssertOnOverrun` | | DWORD | INTERNAL | |
+`SOUpdateProbeAtLine` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SOUpdateProbeAtLineAmount` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`SOUpdateProbeAtLineInFile` | | STRING | INTERNAL | | REGUTIL_default
+`StackWalkStressUsingOldImpl` | to be removed | DWORD | INTERNAL | 0 | REGUTIL_default
+`StackWalkStressUsingOS` | to be removed | DWORD | INTERNAL | 0 | REGUTIL_default
+`StartupDelayMS` | | STRING | EXTERNAL | |
+`StressCOMCall` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`StressLog` | Turns on the stress log. | DWORD | UNSUPPORTED | |
+`ForceEnc` | Forces Edit and Continue to be on for all eligable modules. | DWORD | UNSUPPORTED | |
+`StressLogSize` | Stress log size in bytes per thread. | DWORD | UNSUPPORTED | |
+`StressOn` | Enables the STRESS_ASSERT macro that stops runtime quickly (to prevent the clr state from changing significantly before breaking) | DWORD | INTERNAL | |
+`stressSynchronized` | Unknown if or where this is used; unless a test is specifically depending on this, it can be removed. | DWORD | INTERNAL | 0 | REGUTIL_default
+`StressThreadCount` | | DWORD | EXTERNAL | |
+`DiagnosticSuspend` | | DWORD | INTERNAL | 0 |
+`SuspendDeadlockTimeout` | | DWORD | INTERNAL | 40000 |
+`SuspendThreadDeadlockTimeoutMs` | | DWORD | INTERNAL | 2000 |
+`INTERNAL_ThreadSuspendInjection` | Specifies whether to inject activations for thread suspension on Unix | DWORD | INTERNAL | 1 |
+`ThreadPool_ForceMinWorkerThreads` | Overrides the MinThreads setting for the ThreadPool worker pool | DWORD | INTERNAL | 0 |
+`ThreadPool_ForceMaxWorkerThreads` | Overrides the MaxThreads setting for the ThreadPool worker pool | DWORD | INTERNAL | 0 |
+`ThreadPool_DisableStarvationDetection` | Disables the ThreadPool feature that forces new threads to be added when workitems run for too long | DWORD | INTERNAL | 0 |
+`ThreadPool_DebugBreakOnWorkerStarvation` | Breaks into the debugger if the ThreadPool detects work queue starvation | DWORD | INTERNAL | 0 |
+`ThreadPool_EnableWorkerTracking` | Enables extra expensive tracking of how many workers threads are working simultaneously | DWORD | INTERNAL | 0 |
+`Thread_UseAllCpuGroups` | Specifies if to automatically distribute thread across CPU Groups | DWORD | EXTERNAL | 0 |
+`ThreadpoolTickCountAdjustment` | | DWORD | INTERNAL | 0 |
+`HillClimbing_WavePeriod` | | DWORD | INTERNAL | 4 |
+`HillClimbing_TargetSignalToNoiseRatio` | | DWORD | INTERNAL | 300 |
+`HillClimbing_ErrorSmoothingFactor` | | DWORD | INTERNAL | 1 |
+`HillClimbing_WaveMagnitudeMultiplier` | | DWORD | INTERNAL | 100 |
+`HillClimbing_MaxWaveMagnitude` | | DWORD | INTERNAL | 20 |
+`HillClimbing_WaveHistorySize` | | DWORD | INTERNAL | 8 |
+`HillClimbing_Bias` | The 'cost' of a thread. 0 means drive for increased throughput regardless of thread count; higher values bias more against higher thread counts. | DWORD | INTERNAL | 15 |
+`HillClimbing_MaxChangePerSecond` | | DWORD | INTERNAL | 4 |
+`HillClimbing_MaxChangePerSample` | | DWORD | INTERNAL | 20 |
+`HillClimbing_MaxSampleErrorPercent` | | DWORD | INTERNAL | 15 |
+`HillClimbing_SampleIntervalLow` | | DWORD | INTERNAL | 10 |
+`HillClimbing_SampleIntervalHigh` | | DWORD | INTERNAL | 200 |
+`HillClimbing_GainExponent` | The exponent to apply to the gain, times 100. 100 means to use linear gain, higher values will enhance large moves and damp small ones. | DWORD | INTERNAL | 200 |
+`INTERNAL_TypeLoader_InjectInterfaceDuplicates` | Injects duplicates in interface map for all types. | DWORD | INTERNAL | 0 |
+`VirtualCallStubCollideMonoPct` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 0 | REGUTIL_default
+`VirtualCallStubCollideWritePct` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 100 | REGUTIL_default
+`VirtualCallStubDumpLogCounter` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 0 | REGUTIL_default
+`VirtualCallStubDumpLogIncr` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 0 | REGUTIL_default
+`VirtualCallStubLogging` | Worth keeping, but should be moved into '#ifdef STUB_LOGGING' blocks. This goes for most (or all) of the stub logging infrastructure. | DWORD | patsubst(EXTERNAL_VirtualCallStubLogging, _.*, ) | 0 | patsubst(patsubst(CLRConfig::REGUTIL_default, CLRConfig::, ), |, /)
+`VirtualCallStubMissCount` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 100 | REGUTIL_default
+`VirtualCallStubResetCacheCounter` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 0 | REGUTIL_default
+`VirtualCallStubResetCacheIncr` | Used only when STUB_LOGGING is defined, which by default is not. | DWORD | INTERNAL | 0 | REGUTIL_default
+`DisableWatsonForManagedExceptions` | disable Watson and debugger launching for managed exceptions | DWORD | INTERNAL | 0 |
+`ZapBBInstr` | | STRING | INTERNAL | | REGUTIL_default
+`ZapBBInstrDir` | | STRING | EXTERNAL | |
+`ZapDisable` | | DWORD | EXTERNAL | 0 |
+`ZapExclude` | | STRING | INTERNAL | | REGUTIL_default
+`ZapOnly` | | STRING | INTERNAL | | REGUTIL_default
+`ZapRequire` | | DWORD | EXTERNAL | |
+`ZapRequireExcludeList` | | STRING | EXTERNAL | |
+`ZapRequireList` | | STRING | EXTERNAL | |
+`ZapSet` | | STRING | EXTERNAL | | REGUTIL_default
+`ZapLazyCOWPagesEnabled` | | DWORD | INTERNAL | 1 |
+`ZapLazyCOWPagesEnabled` | | DWORD | INTERNAL | 0 |
+`DebugAssertOnMissedCOWPage` | | DWORD | INTERNAL | 1 |
+`ReadyToRun` | Enable/disable use of ReadyToRun native code | DWORD | EXTERNAL | 1 | // On by default for CoreCLR
+`ReadyToRun` | Enable/disable use of ReadyToRun native code | DWORD | EXTERNAL | 0 | // Off by default for desktop
+`EnableEventLog` | Enable/disable use of EnableEventLogging mechanism | DWORD | EXTERNAL | 0 | // Off by default
+`ExposeExceptionsInCOM` | | DWORD | INTERNAL | |
+`PreferComInsteadOfManagedRemoting` | When communicating with a cross app domain CCW, use COM instead of managed remoting. | DWORD | EXTERNAL | 0 |
+`GenerateStubForHost` | Forces the host hook stub to be built for all unmanaged calls, even when not running hosted. | DWORD | INTERNAL | 0 |
+`legacyApartmentInitPolicy` | | DWORD | EXTERNAL | |
+`legacyComHierarchyVisibility` | | DWORD | EXTERNAL | |
+`legacyComVTableLayout` | | DWORD | EXTERNAL | |
+`newComVTableLayout` | | DWORD | EXTERNAL | |
+`PInvokeInline` | | STRING | EXTERNAL | | REGUTIL_default
+`InteropValidatePinnedObjects` | After returning from a managed-to-unmanged interop call, validate GC heap around objects pinned by IL stubs. | DWORD | UNSUPPORTED | 0 |
+`InteropLogArguments` | Log all pinned arguments passed to an interop call | DWORD | EXTERNAL | 0 |
+`LogCCWRefCountChange` | Outputs debug information and calls LogCCWRefCountChange_BREAKPOINT when AddRef or Release is called on a CCW. | STRING | UNSUPPORTED | |
+`EnableRCWCleanupOnSTAShutdown` | Performs RCW cleanup when STA shutdown is detected using IInitializeSpy in classic processes. | DWORD | INTERNAL | 0 |
+`LocalWinMDPath` | Additional path to probe for WinMD files in if a WinRT type is not resolved using the standard paths. | STRING | INTERNAL | |
+`AllowDComReflection` | Allows out of process DCOM clients to marshal blocked reflection types. | DWORD | EXTERNAL | 0 |
+`3gbEatMem` | Testhook: Size of memory (in 64K chunks) to be reserved before CLR starts | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`ActivatePatchSkip` | allows an assert when ActivatePatchSkip is called | DWORD | INTERNAL | 0 | REGUTIL_default
+`AlwaysCallInstantiatingStub` | Forces the Jit to use the instantiating stub for generics | DWORD | INTERNAL | 0 | REGUTIL_default
+`alwaysFlowImpersonationPolicy` | Windows identities should always flow across async points | DWORD | EXTERNAL | FALSE |
+`AlwaysUseMetadataInterfaceMapLayout` | Used for debugging generic interface map layout. | DWORD | INTERNAL | |
+`AssertOnUnneededThis` | While the ConfigDWORD is unnecessary, the contained ASSERT should be kept. This may result in some work tracking down violating MethodDescCallSites. | DWORD | INTERNAL | 0 |
+`AssertStacktrace` | | DWORD | INTERNAL | 1 | REGUTIL_default
+`BuildFlavor` | Choice of build flavor (wks or svr) of CLR | STRING | UNSUPPORTED | |
+`CerLogging` | In vm\\ConstrainedExecutionRegion.cpp. Debug-only logging when we prepare methods, find reliability contract problems, restore stuff from ngen images, etc. | DWORD | INTERNAL | 0 |
+`clearNativeImageStress` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`CLRLoadLogDir` | Enable logging of CLR selection | STRING | INTERNAL | |
+`CONFIG` | Used to specify an XML config file for EEConfig | STRING | EXTERNAL | | REGUTIL_default
+`CopyPropMax` | Sets internal jit constants for CopyProp | STRING | INTERNAL | | REGUTIL_default
+`CPUFamily` | | DWORD | INTERNAL | |
+`CPUFeatures` | | DWORD | INTERNAL | |
+`DeadCodeMax` | Sets internal jit constants for Dead Code elmination | STRING | INTERNAL | | REGUTIL_default
+`DefaultVersion` | Version of CLR to load. | STRING | INTERNAL | |
+`developerInstallation` | Flag to enable DEVPATH binding feature | STRING | EXTERNAL | | // TODO: check special handling
+`shadowCopyVerifyByTimestamp` | Fusion flag to enable quick verification of files in the shadow copy directory by using timestamps. | DWORD | EXTERNAL | 0 | FavorConfigFile / MayHavePerformanceDefault
+`disableFusionUpdatesFromADManager` | Fusion flag to prevent changes to the AppDomainSetup object made by implementations of AppDomainManager.InitializeNewDomain from propagating to Fusion | DWORD | EXTERNAL | 0 | FavorConfigFile
+`disableCachingBindingFailures` | Fusion flag to re-enable Everett bind caching behavior (Whidbey caches failures for sharing) | DWORD | EXTERNAL | 0 | FavorConfigFile
+`enableVerboseInstallLogging` | Fusion flag to enable detailed logging of GAC install operations | DWORD | INTERNAL | 0 |
+`disableCommitThreadStack` | This should only be internal but I believe ASP.Net uses this | DWORD | EXTERNAL | |
+`DisableConfigCache` | Used to disable the 'probabilistic' config cache, which walks through the appropriate config registry keys on init and probabilistically keeps track of which exist. | DWORD | EXTERNAL | 0 | REGUTIL_default
+`DisableStackwalkCache` | | DWORD | EXTERNAL | |
+`DoubleArrayToLargeObjectHeap` | Controls double[] placement | DWORD | UNSUPPORTED | |
+`DumpConfiguration` | Dumps runtime properties of xml configuration files to the log. | DWORD | INTERNAL | 0 |
+`DumpOnClassLoad` | Dumps information about loaded class to log. | STRING | INTERNAL | |
+`EnableInternetHREFexes` | Part of security work related to locking down Internet No-touch deployment. It's not clear what happens to NTD in v4, but if it's till there the setting is needed | DWORD | EXTERNAL | 0 | (LookupOptions) (REGUTIL_default / IgnoreEnv / IgnoreHKCU)
+`enforceFIPSPolicy` | Causes crypto algorithms which have not been FIPS certified to throw an exception if they are used on a machine that requriess FIPS enforcement | DWORD | EXTERNAL | |
+`ExpandAllOnLoad` | | DWORD | INTERNAL | |
+`FORCE_ASSEMREF_DUPCHECK` | ? Has comment: Allow Avalon to use the SecurityCriticalAttribute ? but WHY? | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`ForcedRuntime` | Verify version of CLR loaded | STRING | INTERNAL | |
+`ForceRelocs` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`GenerateLongJumpDispatchStubRatio` | Useful for testing VSD on AMD64 | DWORD | INTERNAL | |
+`generatePublisherEvidence` | If set, when the CLR loads an assembly that has an Authenticode signature we will verify that signature to generate Publisher evidence, at the expense of network hits and perf. | DWORD | EXTERNAL | |
+`HashStack` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`HostManagerConfig` | | DWORD | INTERNAL | (DWORD)-1 |
+`HostTestADUnload` | Alows setting Rude unload as default | DWORD | INTERNAL | 0 |
+`HostTestThreadAbort` | | DWORD | INTERNAL | 0 |
+`IgnoreDllMainReturn` | Don't check the return value of DllMain if this is set | DWORD | UNSUPPORTED | 0 | ConfigFile_ApplicationFirst
+`IJWEntrypointCompatMode` | Makes us run managed EP from DllMain. Basically brings the buggy behavior back. | DWORD | EXTERNAL | 1 | REGUTIL_default
+`InstallRoot` | Directory with installed CLRs | STRING | INTERNAL | |
+`InvokeHalt` | Throws an assert when the given method is invoked through reflection. | STRING | INTERNAL | |
+`legacyHMACMode` | v2.0 of the CLR shipped with a bug causing HMAC-SHA-384 and HMAC-SHA-512 to be calculated incorrectly. Orcas fixes this bug, but the config flag is added so that code which must verify v2.0 RTM HMACs can still interop with them. | DWORD | EXTERNAL | |
+`legacyImpersonationPolicy` | Windows identities should never flow across async points | DWORD | EXTERNAL | FALSE |
+`legacyLoadMscorsnOnStartup` | Force mscorsn.dll to load when the VM starts | DWORD | UNSUPPORTED | |
+`legacyNullReferenceExceptionPolicy` | | DWORD | UNSUPPORTED | |
+`legacyUnhandledExceptionPolicy` | | DWORD | UNSUPPORTED | |
+`legacyVirtualMethodCallVerification` | | DWORD | EXTERNAL | |
+`ManagedLogFacility` | ?Log facility for managed code using the log | DWORD | INTERNAL | |
+`MaxStackDepth` | | DWORD | INTERNAL | |
+`MaxStubUnwindInfoSegmentSize` | | DWORD | INTERNAL | |
+`MaxThreadRecord` | | DWORD | INTERNAL | |
+`MergeCriticalAttributes` | | DWORD | EXTERNAL | 1 | REGUTIL_default
+`MessageDebugOut` | | DWORD | INTERNAL | 0 |
+`MscorsnLogging` | Enables strong name logging | DWORD | INTERNAL | 0 | REGUTIL_default
+`NativeImageRequire` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NestedEhOom` | | DWORD | INTERNAL | 0 | REGUTIL_default
+`NO_SO_NOT_MAINLINE` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NoGuiOnAssert` | | DWORD | INTERNAL | INTERNAL_NoGuiOnAssert_Default | REGUTIL_default
+`NoProcedureSplitting` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`NoStringInterning` | Disallows string interning. I see no value in it anymore. | DWORD | INTERNAL | 1 | REGUTIL_default
+`NotifyBadAppCfg` | Whether to show a message box for bad application config file. | DWORD | EXTERNAL | |
+`PauseOnLoad` | Stops in SystemDomain::init. I think it can be removed. | DWORD | INTERNAL | |
+`PerfAllocsSizeThreshold` | Log facility LF_GCALLOC logs object allocations. This flag controls which ones also log stacktraces. Predates ClrProfiler. | DWORD | INTERNAL | 0x3FFFFFFF |
+`PerfNumAllocsThreshold` | Log facility LF_GCALLOC logs object allocations. This flag controls which ones also log stacktraces. Predates ClrProfiler. | DWORD | INTERNAL | 0x3FFFFFFF |
+`PerfTypesToLog` | Log facility LF_GCALLOC logs object allocations. This flag controls which ones also log stacktraces. Predates ClrProfiler. | STRING | INTERNAL | |
+`PEVerify` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`Prepopulate1` | | DWORD | EXTERNAL | 1 |
+`PrestubGC` | | STRING | INTERNAL | |
+`PrestubHalt` | | STRING | INTERNAL | |
+`RepositoryDir` | | STRING | EXTERNAL | | REGUTIL_default
+`RepositoryFlags` | | DWORD | EXTERNAL | |
+`RestrictedGCStressExe` | | STRING | EXTERNAL | |
+`ReturnSourceTypeForTesting` | allows returning the (internal only) source type of an IL to Native mapping for debugging purposes | DWORD | INTERNAL | 0 | REGUTIL_default
+`RSStressLog` | allows turning on logging for RS startup | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`SafeHandleStackTraces` | Debug-only ability to get a stack trace attached to every SafeHandle instance at creation time, for tracking down handle corruption problems. | DWORD | INTERNAL | |
+`SaveThreadInfo` | | DWORD | INTERNAL | |
+`SaveThreadInfoMask` | | DWORD | INTERNAL | |
+`SBDumpOnNewIndex` | Used for Syncblock debugging. It's been a while since any of those have been used. | DWORD | INTERNAL | 0 |
+`SBDumpOnResize` | Used for Syncblock debugging. It's been a while since any of those have been used. | DWORD | INTERNAL | 0 |
+`SBDumpStyle` | Used for Syncblock debugging. It's been a while since any of those have been used. | DWORD | INTERNAL | 0 |
+`ShimDatabaseVersion` | Force using shim database version in registry | STRING | UNSUPPORTED | |
+`SleepOnExit` | Used for lrak detection. I'd say deprecated by umdh. | DWORD | UNSUPPORTED | 0 |
+`StubLinkerUnwindInfoVerificationOn` | | DWORD | INTERNAL | |
+`SuccessExit` | | DWORD | UNSUPPORTED | 0 | REGUTIL_default
+`SupressAllowUntrustedCallerChecks` | Disable APTCA | DWORD | INTERNAL | 0 |
+`SymbolReadingPolicy` | Specifies when PDBs may be read | DWORD | EXTERNAL | |
+`TestDataConsistency` | allows ensuring the left side is not holding locks (and may thus be in an inconsistent state) when inspection occurs | DWORD | UNSUPPORTED | FALSE |
+`ThreadGuardPages` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`Timeline` | | DWORD | EXTERNAL | 0 | REGUTIL_default
+`TlbImpShouldBreakOnConvFunction` | | STRING | INTERNAL | | REGUTIL_default
+`TlbImpSkipLoading` | | DWORD | INTERNAL | |
+`TotalStressLogSize` | Total stress log size in bytes. | DWORD | UNSUPPORTED | |
+`TraceIUnknown` | | DWORD | EXTERNAL | |
+`TraceWrap` | | DWORD | EXTERNAL | |
+`TURNOFFDEBUGINFO` | | DWORD | EXTERNAL | |
+`UseGenericTlsGetters` | | DWORD | EXTERNAL | 0 |
+`useLegacyIdentityFormat` | Fusion flag to switch between Whidbey and Everett textual identity parser (have semantic differences) | DWORD | EXTERNAL | 0 | FavorConfigFile
+`UseMethodDataCache` | Used during feature development; may now be removed. | DWORD | EXTERNAL | FALSE |
+`UseNewCrossDomainRemoting` | Forces the managed remoting stack to be used even for cross-domain remoting if set to 0 (default is 1) | DWORD | EXTERNAL | |
+`UseParentMethodData` | Used during feature development; may now be removed. | DWORD | EXTERNAL | TRUE |
+`VerifierOff` | | DWORD | INTERNAL | |
+`VerifyAllOnLoad` | | DWORD | EXTERNAL | |
+`Version` | Version of CLR to load. | STRING | INTERNAL | |
+`ShimHookLibrary` | Path to a DLL that should be notified when shim loads the runtime DLL. | STRING | INTERNAL | |
diff --git a/Documentation/project-docs/contributing-workflow.md b/Documentation/project-docs/contributing-workflow.md
new file mode 100644
index 0000000000..5c91a49bae
--- /dev/null
+++ b/Documentation/project-docs/contributing-workflow.md
@@ -0,0 +1,107 @@
+Contribution Workflow
+=====================
+
+You can contribute to .NET Core with issues and PRs. Simply filing issues for problems you encounter is a great way to contribute. Contributing implementations is greatly appreciated.
+
+Getting Started
+===============
+
+If you are looking at getting your feet wet with some simple (but still beneficial) changes, check out _up for grabs_ issues on the [CoreCLR](https://github.com/dotnet/coreclr/labels/up-for-grabs) and [CoreFX](https://github.com/dotnet/corefx/labels/up%20for%20grabs) repos.
+
+For new ideas, please always start with an issue before starting development of an implementation. See [project priorities](project-priorities.md) to understand the Microsoft team's approach to engagement on general improvements to the product. Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/master/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
+
+You do not need to file an issue for trivial changes (e.g. typo fixes). Just create a PR for those changes.
+
+Making a change
+===============
+
+Make a quality change. Consider and document (preferably with tests) as many usage scenarios as you can to ensure that your change will work correctly in the miriad of ways it might get used.
+
+There are several issues to keep in mind when making a change.
+
+Managed Code Compatibility
+--------------------------
+Please review [Breaking Changes](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md) before making changes to managed code. Please pay the most attention to changes that affect the [Public Contract](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md#bucket-1-public-contract).
+
+Typos
+-----
+Typos are embarrassing! We will accept most PRs that fix typos. In order to make it easier to review your PR, please focus on a given component with your fixes or on one type of typo across the entire repository. If it's going to take >30 mins to review your PR, then we will probably ask you to chunk it up.
+
+Coding Style Changes
+--------------------
+
+We intend to bring dotnet/corefx in to full conformance with the style guidelines described in [Coding Style](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md). We plan to do that with tooling, in a holistic way. In the meantime, please:
+
+* **DO NOT** send PRs for style changes.
+* **DO** give priority to the current style of the project or file you're changing even if it diverges from the general guidelines.
+
+Commit Messages
+---------------
+
+Please format commit messages as follows (based on this [excellent post](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)):
+
+```
+Summarize change in 50 characters or less
+
+Provide more detail after the first line. Leave one blank line below the
+summary and wrap all lines at 72 characters or less.
+
+If the change fixes an issue, leave another blank line after the final
+paragraph and indicate which issue is fixed in the specific format
+below.
+
+Fix #42
+```
+
+Also do your best to factor commits appropriately, i.e not too large with unrelated
+things in the same commit, and not too small with the same small change applied N
+times in N different commits. If there was some accidental reformatting or whitespace
+changes during the course of your commits, please rebase them away before submitting
+the PR.
+
+PR - CI Process
+===============
+
+The [dotnet continuous integration](http://dotnet-ci.cloudapp.net/) (CI) system will automatically perform the required builds and run tests (including the ones you are expected to run) for PRs. Builds and test runs must be clean.
+
+If the CI build fails for any reason, the PR issue will be updated with a link that can be used to determine the cause of the failure.
+
+There is currently minimal test coverage for Linux and OS X builds that can be used by the dotnet CI. We are working to improve that so that more issues can be caught in CI, as is the case with Windows.
+
+PR Feedback
+===========
+
+Microsoft team and community members will provide feedback on your change. Community feedback is highly valued. You will often see the absence of team feedback if the community has already provided good review feedback.
+
+1 or more Microsoft team members will review every PR prior to merge. They will often reply with "LGTM, modulo comments". That means that the PR will be merged once the feedback is resolved. "LGTM" == "looks good to me".
+
+There are lots of thoughts and [approaches](https://github.com/antlr/antlr4-cpp/blob/master/CONTRIBUTING.md#emoji) for how to efficiently discuss changes. It is best to be clear and explicit with your feedback. Please be patient with people who might not understand the finer details about your approach to feedback.
+
+Suggested Workflow
+==================
+
+We use and recommend the following workflow:
+
+1. Create an issue for your work.
+ - You can skip this step for trivial changes.
+ - Reuse an existing issue on the topic, if there is one.
+ - Use [CODE_OWNERS.TXT](https://github.com/dotnet/coreclr/blob/CODE_OWNERS.TXT) to find relevant maintainers and @ mention them to ask for feedback on your issue.
+ - Get agreement from the team and the community that your proposed change is a good one.
+ - If your change adds a new API, follow the [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
+ - Clearly state that you are going to take on implementing it, if that's the case. You can request that the issue be assigned to you. Note: The issue filer and the implementer don't have to be the same person.
+2. Create a personal fork of the repository on GitHub (if you don't already have one).
+3. Create a branch off of master (`git checkout -b mybranch`).
+ - Name the branch so that it clearly communicates your intentions, such as issue-123 or githubhandle-issue.
+ - Branches are useful since they isolate your changes from incoming changes from upstream. They also enable you to create multiple PRs from the same fork.
+4. Make and commit your changes.
+ - Please follow our [Commit Messages](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/contributing-workflow.md#commit-messages) guidance.
+5. Add new tests corresponding to your change, if applicable.
+6. Build the repository with your changes.
+ - Make sure that the builds are clean.
+ - Make sure that the tests are all passing, including your new tests.
+7. Create a pull request (PR) against the upstream repository's **master** branch.
+ - Push your changes to your fork on GitHub (if you haven't already).
+
+Note: It is OK for your PR to include a large number of commits. Once your change is accepted, you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged.
+
+Note: It is OK to create your PR as "[WIP]" on the upstream repo before the implementation is done. This can be useful if you'd like to start the feedback process concurrent with your implementation. State that this is the case in the initial PR comment.
diff --git a/Documentation/project-docs/contributing.md b/Documentation/project-docs/contributing.md
new file mode 100644
index 0000000000..f099bf93bf
--- /dev/null
+++ b/Documentation/project-docs/contributing.md
@@ -0,0 +1,166 @@
+Contributing to .NET Core
+=========================
+
+The .NET Core team maintains several guidelines for contributing to the .NET Core repos, which are provided below. Many of these are straightforward, while others may seem subjective. A .NET Core team member will be happy to explain why a guideline is defined as it is.
+
+Contribution Guidelines
+=======================
+
+- [Copyright](#copyright) describes the licensing practices for the project.
+- [General Contribution Guidance](#general-contribution-guidance) describes general contribution guidance, including more subjective stylistic guidelines.
+- [Contribution Bar](#contribution-bar) describes the bar that the team uses to accept changes.
+- [Contribution Workflow](contributing-workflow.md) describes the workflow that the team uses for considering and accepting changes.
+- [Garbage Collection Guidelines](garbage-collector-guidelines.md) for changes that affect the GC.
+- [Performance Guidelines](performance-guidelines.md) for changes in performance critical code or that otherwise affect performance.
+- [Porting the JIT](https://github.com/dotnet/coreclr/pull/2214#issuecomment-161850464) to other chip architectures.
+
+General Contribution Guidance
+=============================
+
+There are several issues to keep in mind when making a change.
+
+Managed Code Compatibility
+--------------------------
+Please review [Breaking Changes](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md) before making changes to managed code. Please pay the most attention to changes that affect the [Public Contract](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md#bucket-1-public-contract).
+
+Typos
+-----
+Typos are embarrassing! We will accept most PRs that fix typos. In order to make it easier to review your PR, please focus on a given component with your fixes or on one type of typo across the entire repository. If it's going to take >30 mins to review your PR, then we will probably ask you to chunk it up.
+
+Commit Messages
+---------------
+
+Please format commit messages as follows (based on this [excellent post](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)):
+
+```
+Summarize change in 50 characters or less
+
+Provide more detail after the first line. Leave one blank line below the
+summary and wrap all lines at 72 characters or less.
+
+If the change fixes an issue, leave another blank line after the final
+paragraph and indicate which issue is fixed in the specific format
+below.
+
+Fix #42
+```
+
+Also do your best to factor commits appropriately, i.e not too large with unrelated
+things in the same commit, and not too small with the same small change applied N
+times in N different commits. If there was some accidental reformatting or whitespace
+changes during the course of your commits, please rebase them away before submitting
+the PR.
+
+DOs and DON'Ts
+--------------
+
+* **DO** follow our [coding style](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md) (C# code-specific)
+* **DO** give priority to the current style of the project or file you're changing even if it diverges from the general guidelines.
+* **DO** include tests when adding new features. When fixing bugs, start with
+ adding a test that highlights how the current behavior is broken.
+* **DO** keep the discussions focused. When a new or related topic comes up
+ it's often better to create new issue than to side track the discussion.
+* **DO** blog and tweet (or whatever) about your contributions, frequently!
+
+* **DO NOT** send PRs for style changes.
+* **DON'T** surprise us with big pull requests. Instead, file an issue and start
+ a discussion so we can agree on a direction before you invest a large amount
+ of time.
+* **DON'T** commit code that you didn't write. If you find code that you think is a good fit to add to .NET Core, file an issue and start a discussion before proceeding.
+* **DON'T** submit PRs that alter licensing related files or headers. If you believe there's a problem with them, file an issue and we'll be happy to discuss it.
+* **DON'T** add API additions without filing an issue and discussing with us first. See [API Review Process](https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/api-review-process.md).
+
+Contribution "Bar"
+==================
+
+Project maintainers will merge changes that align with [project priorities](project-priorities.md) and/or improve the product significantly for a broad set of apps. Proposals must also satisfy the published [guidelines for .NET Core](#contribution-guidelines).
+
+Maintainers will not merge changes that have narrowly-defined benefits, due to compatibility risk. The CoreCLR codebase is used by several Microsoft products (e.g. Windows Phone, ASP.NET Core, .NET Framework 4.x) to enable execution of managed code. Changes to the open source codebase can become part of these products, but are first reviewed and tested to ensure they are correct for those products and will not inadvertently break applications. We may revert changes if they are found to be breaking.
+
+Contributing Ports
+------------------
+
+We encourage ports of CoreCLR to other platforms. Linux and OS X ports are in progress and have a lot of momentum behind them. There is also interest in a [FreeBSD port](https://github.com/dotnet/coreclr/issues/455) (and OpenBSD and NetBSD).
+
+Ports have a weaker contribution bar, since they do not contribute to compatibility risk with existing Microsoft products on Windows. For ports, we are primarily looking for functionally correct implementations.
+
+Contributing to mscorlib library
+--------------------------------
+
+Most managed code changes should be made in the [CoreFX](https://github.com/dotnet/corefx) repo. We have moved and are continuing to move many mscorlib types to CoreFX. Please use the following general rule-of-thumb for choosing the right repo to make your change (start by creating an issue):
+
+- The type or concept doesn't yet exist in .NET Core -> choose CoreFX.
+- The type exists in both CoreCLR and CoreFX repo -> choose CoreFX.
+- The type exists in CoreCLR only -> choose CoreCLR.
+- In doubt -> choose CoreFX.
+
+Please see [Breaking Changes](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md) to understand our requirements on changes that could impact compatibility. Please pay the most attention to changes that affect the [Public Contract](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-changes.md#bucket-1-public-contract). We will not accept changes that break compatibility.
+
+Copyright
+=========
+
+The .NET Core copyright is held by ".NET Foundation and Contributors". See [.NET Foundation](http://www.dotnetfoundation.org/).
+
+Source License
+--------------
+
+The .NET Core project uses multiple licenses for the various project repositories. Most projects use the [MIT License](https://opensource.org/licenses/MIT) for code and the [Creative Commons Attribution 4.0 International Public License (CC-BY)](https://creativecommons.org/licenses/by/4.0/) license for documentation. The [Apache 2 License](https://opensource.org/licenses/Apache-2.0) is also used.
+
+See the license file at the root of project repositories for the specific license, such as with the following examples:
+
+- [CoreCLR](https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT) [(MIT)](https://opensource.org/licenses/MIT).
+- [Roslyn](https://github.com/dotnet/roslyn/blob/master/License.txt) [(Apache 2)](https://opensource.org/licenses/Apache-2.0).
+- [core-docs](https://github.com/dotnet/core-docs/blob/master/license.txt) [(CC-BY)](https://creativecommons.org/licenses/by/4.0/).
+
+Binary License
+--------------
+
+Microsoft produces a distribution of .NET Core licensed under the [.NET Library License](https://www.microsoft.com/net/dotnet_library_license.htm). Other groups or companies may produce their own distributions of .NET Core.
+
+File Headers
+------------
+
+The following file header is the used for .NET Core. Please use it for new files.
+
+```
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+```
+
+- See [class.cpp](../../src/vm/class.cpp) for an example of the header in a C++ file.
+- See [List.cs](https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/List.cs) for an example of the header in a C# file.
+
+Copying Files from Other Projects
+---------------------------------
+
+.NET Core uses some files from other projects, typically where a binary distribution does not exist or would be inconvenient.
+
+The following rules must be followed for PRs that include files from another project:
+
+- The license of the file is [permissive](https://en.wikipedia.org/wiki/Permissive_free_software_licence).
+- The license of the file is left in-tact.
+- The contribution is correctly attributed in the [3rd party notices](../../THIRD-PARTY-NOTICES) file in the repository, as needed.
+
+See [IdnMapping.cs](../../src/mscorlib/src/System/Globalization/IdnMapping.cs) for an example of a file copied from another project and attributed in the [CoreCLR 3rd party notices](../../THIRD-PARTY-NOTICES) file.
+
+Porting Files from Other Projects
+---------------------------------
+
+There are many good algorithms implemented in other languages that would benefit the .NET Core project. The rules for porting a Java file to C# , for example, are the same as would be used for copying the same file, as described above.
+
+[Clean-room](https://en.wikipedia.org/wiki/Clean_room_design) implementations of existing algorithms that are not permissively licensed will generally not be accepted. If you want to create or nominate such an implementation, please create an issue to discuss the idea.
+
+Contributor License Agreement
+-----------------------------
+
+You must sign a [.NET Foundation Contribution License Agreement (CLA)](http://cla2.dotnetfoundation.org) before your PR will be merged. This is a one-time requirement for projects in the .NET Foundation. You can read more about [Contribution License Agreements (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) on Wikipedia.
+
+The agreement: [net-foundation-contribution-license-agreement.pdf](https://cla2.dotnetfoundation.org/cladoc/net-foundation-contribution-license-agreement.pdf)
+
+You don't have to do this up-front. You can simply clone, fork, and submit your pull-request as usual. When your pull-request is created, it is classified by a CLA bot. If the change is trivial (e.g. you just fixed a typo), then the PR is labelled with `cla-not-required`. Otherwise it's classified as `cla-required`. Once you signed a CLA, the current and all future pull-requests will be labelled as `cla-signed`.
+
+Patents
+=======
+
+Microsoft has issued a [Patent Promise for .NET Libraries and Runtime Components](https://github.com/dotnet/coreclr/blob/master/PATENTS.TXT).
diff --git a/Documentation/project-docs/developer-guide.md b/Documentation/project-docs/developer-guide.md
new file mode 100644
index 0000000000..a3f6a21047
--- /dev/null
+++ b/Documentation/project-docs/developer-guide.md
@@ -0,0 +1,28 @@
+Developer Guide
+===============
+
+This guide provides instructions (mostly as links) on how to build the repo and implement improvements. It will expand over time.
+
+Building the repository
+=======================
+
+The CoreCLR repo can be built from a regular, non-admin command prompt. The build produces CoreCLR (multiple native binaries), the mscorlib managed library and the accompanying tests. The repo can be built for the following platforms, using the provided instructions.
+
+| Chip | Windows | Linux | OS X |
+| :---- | :-----: | :---: | :--: |
+| x64 | &#x25CF;| &#x25D2;| &#x25D2; |
+| x86 | &#x25EF;| &#x25EF;| &#x25EF;|
+| ARM32 | &#x25EF; | &#x25EF;| &#x25EF; |
+| | [Instructions](../building/windows-instructions.md) | [Instructions](../building/linux-instructions.md) | [Instructions](../building/osx-instructions.md) |
+
+The CoreCLR build and test suite is a work in progress, as are the [building and testing instructions](../README.md). The .NET Core team and the community are improving Linux and OS X support on a daily basis and are adding more tests for all platforms. See [CoreCLR Issues](https://github.com/dotnet/coreclr/issues) to find out about specific work items or report issues.
+
+Understanding the TFS-Git Mirror
+================================
+
+The Microsoft team maintains a Microsoft-internal TFS server of CoreCLR. An automated system is used to flow changes in/out of GitHub. The mirroring infrastructure uses the following hint files to mirror a given TFS folder into GitHub and back:
+
+1. `.gitmirror` - any folder containing this file will **only** have its contained files mirrored. Subfolders are **not** mirrored.
+2. `.gitmirrorall` - any folder containing this file will have all of its files **and** subfolders mirrored recursively. The subfolders do not need to have any hint files.
+
+Thus, if you add a new folder to be included as part of the CoreCLR build, it will also need to have one of the two hint files mentioned above.
diff --git a/Documentation/project-docs/dotnet-filenames.md b/Documentation/project-docs/dotnet-filenames.md
new file mode 100644
index 0000000000..e12f05b18f
--- /dev/null
+++ b/Documentation/project-docs/dotnet-filenames.md
@@ -0,0 +1,11 @@
+.NET Filename Encyclopedia
+===
+
+.NET has had many mysterious filenames over time. This document defines their purpose.
+
+- coreclr.dll: The implementation of CoreCLR.
+- clr.dll: The implemenation of the .NET Framework CLR since the .NET Framework 4.
+- mscorwks.dll: The .NET Framework CLR implementation up until version 2/3.5. It was called "wks" (pronounced "works") because it originally contained the client or "workstation" GC. Up until the .NET Framework 2, there was another variant of the CLR that contained the "server" GC, called mscorsvr.dll. In the .NET Framework 2 release, the workstation and server GC were merged together in a single implementation, in mscorwks.dll, while mscorsvr.dll was deprecated.
+- mscorsvr.dll: See mscorwks.dll.
+- mscordacwks: A variant of mscorwks.dll (for the .NET Framework CLR), used only/primarily while debugging. It contains the "DAC" version of the VM implementation.
+- mscordaccore.dll: A variant of coreclr.dll (for .NET Core), used only/primarily while debugging. It contains the "DAC" version of the VM implementation.
diff --git a/Documentation/project-docs/dotnet-standards.md b/Documentation/project-docs/dotnet-standards.md
new file mode 100644
index 0000000000..452c703f0a
--- /dev/null
+++ b/Documentation/project-docs/dotnet-standards.md
@@ -0,0 +1,69 @@
+.NET Standards
+==============
+
+There was a very early realization by the founders of .NET that they were creating a new programming technology that had broad applicability across operating systems and CPU types and that advanced the state of the art of late 1990s (when the .NET project started at Microsoft) programming language implementation techniques. This led to considering and then pursuing standardization as an important pillar of establishing .NET in the industry.
+
+The key addition to the state of the art was support for multiple programming languages with a single language runtime, hence the name _Common Language Runtime_. There were many other smaller additions, such as value types, a simple exception model and attributes. Generics and language integrated query were later added to that list.
+
+Looking back, standardization was quite effective, leading to .NET having a strong presence on iOS and Android, with the Unity and Xamarin offerings, both of which use the Mono runtime. The same may end up being true for .NET on Linux.
+
+The various .NET standards have been made meaningful by the collaboration of multiple companies and industry experts that have served on the working groups that have defined the standards. In addition (and most importantly), the .NET standards have been implemented by multiple commercial (ex: Unity IL2CPP, .NET Native) and open source (ex: Mono) implementors. The presence of multiple implementations proves the point of standardization.
+
+ECMA 334 - C#
+=============
+
+The C# language was standardized as [ECMA 334](http://www.ecma-international.org/publications/standards/Ecma-334.htm) in 2002 and approved as [ISO/IEC 23270](http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=42926) in 2003.
+
+**ECMA 334 Resources**
+
+- [ECMA 334 Standard Overview](http://www.ecma-international.org/publications/standards/Ecma-334.htm)
+- [ECMA 334 Standard (PDF)](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-334.pdf)
+
+ECMA 335 - CLI
+==============
+
+[Common Language Infrastructure](http://en.wikipedia.org/wiki/Common_Language_Infrastructure) - the formalized basis of .NET -- was standardized as [ECMA 335](http://www.ecma-international.org/publications/standards/Ecma-335.htm) in 2001 and approved as [ISO/IEC 23271](http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=58046) in 2003. The standards have been since updated, to reflect changes in .NET, such as generics.
+
+**ECMA 335 Resources**
+
+- [ECMA 335 Standard Overview](http://www.ecma-international.org/publications/standards/Ecma-335.htm)
+- [ECMA 335 Standard (PDF)](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf)
+- [Wikipedia entry on CLI](http://en.wikipedia.org/wiki/Common_Language_Infrastructure)
+
+**ECMA 335 Partitions with added Microsoft Specific Implementation Notes**
+
+- [Partition I: Concepts and Architecture](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20I.pdf)
+- [Partition II: Meta Data Definition and Semantics](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20II.pdf)
+- [Partition III: CIL Instruction Set](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20III.pdf)
+- [Partition IV: Profiles and Libraries](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20IV.pdf)
+- [Partition V: Debug Interchange Format](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20V.pdf)
+- [Partition VI: Annexes](http://download.microsoft.com/download/7/3/3/733AD403-90B2-4064-A81E-01035A7FE13C/MS%20Partition%20VI.pdf)
+
+**ECMA Technical Report 084: Information Derived from Partition IV XML File**
+
+- [ECMA TR/84 Report (PDF)](http://www.ecma-international.org/publications/files/ECMA-TR/TR-084.pdf)
+- [ECMA TR/84 Tools and Source Code](http://www.ecma-international.org/publications/files/ECMA-TR/TR-084.zip)
+
+ECMA 372 - C++/CLI
+==================
+
+The C++/CLI language was standardized as [ECMA 372](http://www.ecma-international.org/publications/standards/Ecma-372.htm) in 2005.
+
+EMCA 372 is supported by the .NET Framework, but not .NET Core.
+
+**ECMA 372 Resources**
+
+- [ECMA 372 Standard Overview](http://www.ecma-international.org/publications/standards/Ecma-372.htm)
+- [ECMA 372 Standard (PDF)](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-372.pdf)
+
+Shared Source CLI (SSCLI)
+=========================
+
+[Shared Source CLI](http://en.wikipedia.org/wiki/Shared_Source_Common_Language_Infrastructure) or "Rotor" was a working implementation for the ECMA-334 (C#) and ECMA-335 (Common Language Infrastructure, or CLI) standards. It was released under a shared source license in 2002, primarily to encourage academic research focused on .NET and to demonstrate viability of .NET on diverse platforms. It was last released in 2006, to align with the .NET Framework 2 release. It is no longer relevant, given that [CoreCLR](https://github.com/dotnet/coreclr) has been released as open source on GitHub.
+
+**SSCLI Resources**
+
+- [Wikipedia entry on SSCLI](http://en.wikipedia.org/wiki/Shared_Source_Common_Language_Infrastructure)
+- [The Microsoft Shared Source CLI Implementation](https://msdn.microsoft.com/library/ms973879.aspx)
+- [Shared Source Common Language Infrastructure 2.0 Release ](http://www.microsoft.com/en-us/download/details.aspx?id=4917)
+- [Shared Source CLI 2.0 Infrastructure 2.0 Release - 3rd party provided on GitHub](https://github.com/gbarnett/shared-source-cli-2.0)
diff --git a/Documentation/project-docs/garbage-collector-guidelines.md b/Documentation/project-docs/garbage-collector-guidelines.md
new file mode 100644
index 0000000000..66d4c69b9f
--- /dev/null
+++ b/Documentation/project-docs/garbage-collector-guidelines.md
@@ -0,0 +1,37 @@
+Garbage Collector Requirements
+==============================
+
+The garbage collector is an integral part of the .NET runtime. Changes to the .NET runtime can have significant effects on program correctness and performance. As such, GC has strong implementation and testing requirements.
+
+We strongly recommend that if you want to make a change to GC, that you share your proposal prior to implementation. This will ensure that if there are any questions or concerns, that they are addressed before significant work is done.
+
+# Requirements by Sub-Component #
+
+## Core GC ##
+The native implementation of the GC - including the GCHeap and gc_heap classes.
+
+**Required Testing:** (Instructions for running tests are below)
+
+- **gc_heap class:** Changes to gc_heap requires a 48 hour stress run on a debug build. This helps to ensure correctness of the change given that the GC runs in many different configurations and interacts with many other sub-systems within the runtime. For some simple changes a stress run may not be required. If you believe your change does not manipulate the heap itself, mention this in your pull request and we can tell you if stress is required or not.
+- **GCHeap class:** GCHeap changes generally do not require stress runs, but do require functional testing of the affected code.
+- **Performance changes:** Performance specific changes require a performance test run.
+
+## Managed APIs ##
+Managed APIs in System.GC and System.Runtime.GCSettings. These APIs allow an application developer to view and modify GC options.
+
+Required Testing: Validation of the behavior of the affected APIs.
+
+# Instructions for Testing #
+
+## Stress Testing ##
+Stress testing must run for at least **48 hours** against a debug build.
+
+Instructions for running stress are located in the repo at tests\src\GC\Stress\stress_run_readme.txt.
+
+## Functional Testing ##
+A functional test run executes the same code as a stress run, but only runs for 30 minutes.
+
+Instructions for running stress are located in the repo at tests\src\GC\Stress\stress_run_readme.txt.
+
+## Performance Testing ##
+Coming soon.
diff --git a/Documentation/project-docs/glossary.md b/Documentation/project-docs/glossary.md
new file mode 100644
index 0000000000..6b13ba82d3
--- /dev/null
+++ b/Documentation/project-docs/glossary.md
@@ -0,0 +1,28 @@
+.NET Core Glossary
+===
+
+This glossary defines terms, both common and more niche, that are important to understand when reading .NET Core documents and source code. They are also often used by .NET Core team members and other contributers when conversing on GitHub (issues, PRs), on twitter and other sites.
+
+As much as possible, we should link to the most authoritative and recent source of information for a term. That approach should be the most helpful for people who want to learn more about a topic.
+
+* BOTR: Book Of The Runtime.
+* CLR: Common Language Runtime.
+* COMPlus: An early name for the .NET platform, back when it was envisioned as a successor to the COM platform (hence, "COM+"). Used in various places in the CLR infrastructure, most prominently as a common prefix for the names of internal configuration settings. Note that this is different from the product that eventually ended up being named [COM+](https://msdn.microsoft.com/en-us/library/windows/desktop/ms685978.aspx).
+* COR: [Common Object Runtime](http://www.danielmoth.com/Blog/mscorlibdll.aspx). The name of .NET before it was named .NET.
+* DAC: Data Access Component. An abstraction layer over the internal structures in the runtime.
+* EE: Execution Engine.
+* GC: [Garbage Collector](https://github.com/dotnet/coreclr/blob/master/Documentation/botr/garbage-collection.md).
+* JIT: [Just-in-Time](https://github.com/dotnet/coreclr/blob/master/Documentation/botr/ryujit-overview.md) compiler. RyuJIT is the code name for the next generation Just-in-Time(aka "JIT") for the .NET runtime.
+* LCG: Lightweight Code Generation. An early name for [dynamic methods](https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Reflection/Emit/DynamicMethod.cs).
+* NGen: Native Image Generator.
+* PAL: [Platform Adaptation Layer](http://archive.oreilly.com/pub/a/dotnet/2002/03/04/rotor.html). Provides an abstraction layer between the runtime and the operating system
+* PE: Portable Executable.
+* ProjectN: Codename for the first version of [.NET Native for UWP](https://msdn.microsoft.com/en-us/vstudio/dotnetnative.aspx).
+* ReadyToRun: A flavor of native images - command line switch of [crossgen](../building/crossgen.md).
+* Redhawk: Codename for experimental minimal managed code runtime that evolved into [CoreRT](https://github.com/dotnet/corert/).
+* SOS: [Son of Strike](http://blogs.msdn.com/b/jasonz/archive/2003/10/21/53581.aspx). The debugging extension for DbgEng based debuggers. Uses the DAC as an abstraction layer for its operation.
+* SVR: The CLR used to be built as two variants, with one called "mscorsvr.dll", to mean the "server" version. In particular, it contained the server GC implementation, which was intended for multi-threaded apps capable of taking advantage of multiple processors. In the .NET Framework 2 release, the two variants were merged into "mscorwks.dll". The WKS version was the default, however the SVR version remained available.
+* URT: Universal Runtime. Ancient name for what ended up being .NET, is used in the WinError facility name FACILITY_URT.
+* VSD: [Virtual Stub Dispatch](../botr/virtual-stub-dispatch.md). Technique of using stubs for virtual method invocations instead of the traditional virtual method table.
+* VM: Virtual machine.
+* WKS: The CLR used to be built as two variants, with one called "mscorwks.dll", to mean the "workstation" version. In particular, it contained the client GC implementation, which was intended for single-threaded apps, independent of how many processors were on the machine. In the .NET Framework 2 release, the two variants were merged into "mscorwks.dll". The WKS version was the default, however the SVR version remained available.
diff --git a/Documentation/project-docs/jit-testing.md b/Documentation/project-docs/jit-testing.md
new file mode 100644
index 0000000000..63c6a63dd9
--- /dev/null
+++ b/Documentation/project-docs/jit-testing.md
@@ -0,0 +1,169 @@
+# JIT Testing
+
+We would like to ensure that the CoreCLR contains sufficient test collateral
+and tooling to enable high-quality contributions to RyuJit or LLILC's JIT.
+
+JIT testing is somewhat specialized and can't rely solely on the general
+framework tests or end to end application tests.
+
+This document describes some of the work needed to bring JIT existing tests and
+technology into the CoreCLR, and touches on some areas as that open for
+innovation.
+
+We expect to evolve this document into a road map for the overall JIT testing
+effort, and to spawn a set of issues in the CoreCLR and LLILC repos for
+implementing the needed capabilities.
+
+## Requirements and Assumptions
+
+1. It must be easy to add new tests.
+2. Tests must execute with high throughput. We anticipate needing to run
+thousands of tests to provide baseline level testing for JIT changes.
+3. Tests should generally run on all supported/future chip architectures and
+all OS platforms.
+4. Tests must be partitionable so CI latency is tolerable (test latency goal
+TBD).
+5. Tests in CI can be run on private changes (currently tied to PRs; this may
+be sufficient).
+6. Test strategy harmonious with other .Net repo test strategies.
+7. Test harness behaves reasonably on test failure. Easy to get at repro steps
+for subsequent debugging.
+8. Tests must allow fine-grained inspection of JIT outputs, for instance
+comparing the generated code versus a baseline JIT.
+9. Tests must support collection of various quantitative measurements, eg time
+spent in the JIT, memory used by the JIT, etc.
+10. For now, JIT test assets belong in the CoreCLR repo.
+11. JIT tests use the same basic test xunit harness as existing CoreCLR tests.
+12. JIT special-needs testing will rely on extensions/hooks. Examples below.
+
+## Tasks
+
+Below are some broad task areas that we should consider as part of this plan.
+It seems sensible for Microsoft to focus on opening up the JIT self-host
+(aka JITSH) tests first. A few other tasks are also Microsoft specific and are
+marked with (MS) below.
+
+Other than that the priority, task list, and possibly assigments are open to
+discussion.
+
+### (MS) Bring up equivalent of the JITSH tests
+
+JITSH is a set of roughly 8000 tests that have been traditionally used by
+Microsoft JIT developers as the frontline JIT test suite.
+
+We'll need to subset these tests for various reasons:
+
+1. Some have shallow desktop CLR dependence (e.g. missing cases in string
+formatting).
+2. Some have deep desktop CLR dependence (testing a desktop CLR feature that
+is not present in CoreCLR).
+3. Some require tools not yet available in CoreCLR (ilasm in particular).
+4. Some test windows features and won’t be relevant to other OS platforms.
+5. Some tests may not be able to be freely redistributed.
+
+We have done an internal inventory and identified roughly 1000 tests that
+should be straightforward to port into CoreCLR, and have already started in on
+moving these.
+
+### Test script capabilities
+
+We need to ensure that the CoreCLR repo contains a suitably
+hookable test script. Core testing is driven by xunit but there’s typically a
+wrapper around this (runtest.cmd today) to facilitate test execution.
+
+The proposal is to implement platform-neutral variant of runtest.cmd that
+contains all the existing functionality plus some additional capabilities for
+JIT testing. Initially this will mean:
+
+1. Ability to execute tests with a JIT specified by the user (either as alt
+JIT or as the only JIT)
+2. Ability to pass options through to the JIT (eg for dumping assembly or IR)
+or to the CoreCLR (eg to disable use of ngen images).
+
+### Cache prebuilt test assets
+
+In general we want JIT tests to be built from sources. But given the volume
+of tests it can take a significant amount of time to compile those sources into
+assemblies. This in turn slows down the ability to test the JIT.
+
+Given the volume of tests, we might reach a point where the default CoreCLR
+build does not build all the tests.
+
+So it would be good if there was a regularly scheduled build of CoreCLR that
+would prebuild a matching set of tests and make them available.
+
+### Round out JITSH suite, filling in missing pieces
+
+We need some way to run ILASM. Some suggestions here are to port the existing
+ILASM or find some equivalent we could run instead. We could also prebuild
+IL based tests and deploy as a package. Around 2400 JITSH tests are blocked by
+this.
+
+There are also some VB tests which presumably can be brought over now that VB
+projects can build.
+
+Native/interop tests may or may not require platform-specific adaption.
+
+### (MS) Port the devBVT tests.
+
+devBVT is a broader part of CLR SelfHost that is useful for second-tier testing.
+Not yet clear what porting this entails.
+
+### Leverage peer repo test suites.
+
+We should be able to directly leverage tests provided in peer repo suites, once
+they can run on top of CoreCLR. In particular CoreFx and Roslyn test cases
+could be good initial targets.
+
+Note LLILC is currently working through the remaining issues that prevent it
+from being able to compile all of Roslyn. See the "needed for Roslyn" tags
+on the open LLILC issues.
+
+### Look for other CoreCLR hosted projects.
+
+Similar to the above, as other projects are able to host on CoreCLR we can
+potentially use their tests for JIT testing.
+
+### Porting of existing suites/tools over to our repos.
+
+Tools developed to test JVM Jits might be interesting to port over to .Net.
+Suggestions for best practices or effective techniques are welcome.
+
+### Bring up quantitative measurements.
+
+For Jit testing we'll need various quantitatve assessments of Jit behavior:
+
+1. Time spent jitting
+2. Speed of jitted code
+3. Size of jitted code
+4. Memory utilization by the jit (+ leak detection)
+5. Debug info fidelity
+6. Coverage ?
+
+There will likely be work going on elsewhere to address some of these same
+measurement capabilities, so we should make sure to keep it all in sync.
+
+### Bring up alternate codegen capabilities.
+
+For LLILC, implementing support for crossgen would provide the ability to drive
+lots of IL through the JIT. There is enough similarity between the JIT and
+crossgen paths that this would likely surface issues in both.
+
+Alternatively one can imagine simple test drivers that load up assemblies and
+use reflection to enumerate methods and asks for method bodies to force the JIT
+to generate code for all the methods.
+
+### Bring up stress testing
+
+The value of existing test assets can be leveraged through various stress
+testing modes. These modes use non-standard code generation or runtime
+mechanisms to try an flush out bugs.
+
+1. GC stress. Here the runtime will GC with much higher frequency in an attempt
+to maximize the dependence on the GC info reported by the JIT.
+2. Internal modes in the JIT to try and flush out bugs, eg randomized inlining,
+register allocation stress, volatile stress, randomized block layout, etc.
+
+### Bring up custom testing frameworks and tools.
+
+We should invest in things like random program or IL generation tools.
diff --git a/Documentation/project-docs/linux-performance-tracing.md b/Documentation/project-docs/linux-performance-tracing.md
new file mode 100644
index 0000000000..93d63b42aa
--- /dev/null
+++ b/Documentation/project-docs/linux-performance-tracing.md
@@ -0,0 +1,142 @@
+Performance Tracing on Linux
+============================
+
+When a performance problem is encountered on Linux, these instructions can be used to gather detailed information about what was happening on the machine at the time of the performance problem.
+
+#Required Tools#
+- **perfcollect**: Bash script that automates data collection.
+ - Available at <http://aka.ms/perfcollect>.
+- **PerfView**: Windows-based performance tool that can also analyze trace files collected with Perfcollect.
+ - Available at <http://aka.ms/perfview>.
+
+#Preparing Your Machine#
+Follow these steps to prepare your machine to collect a performance trace.
+
+1. Download Perfcollect.
+
+ > ```bash
+ > curl -OL http://aka.ms/perfcollect
+ > ```
+
+2. Make the script executable.
+
+ > ```bash
+ > chmod +x perfcollect
+ > ```
+
+3. Install tracing prerequisites - these are the actual tracing libraries. For details on prerequisites, see [below](#prerequisites).
+
+ > ```bash
+ > sudo ./perfcollect install
+ > ```
+
+#Collecting a Trace#
+1. Have two shell windows available - one for controlling tracing, referred to as **[Trace]**, and one for running the application, referred to as **[App]**.
+2. **[App]** Setup the application shell - this enables tracing configuration inside of CoreCLR.
+
+ > ```bash
+ > export COMPlus_PerfMapEnabled=1
+ > export COMPlus_EnableEventLog=1
+ > ```
+
+3. **[Trace]** Start collection.
+
+ > ```bash
+ > sudo ./perfcollect collect sampleTrace
+ > ```
+
+ Expected Output:
+
+ > ```bash
+ > Collection started. Press CTRL+C to stop.
+ > ```
+
+4. **[App]** Run the app - let it run as long as you need to in order to capture the performance problem. Generally, you don't need very long. As an example, for a CPU investigation, 5-10 seconds of the high CPU situation is usually enough.
+
+ > ```bash
+ > dotnet run
+ > ```
+
+5. **[Trace]** Stop collection - hit CTRL+C.
+
+ > ```bash
+ > ^C
+ > ...STOPPED.
+ >
+ > Starting post-processing. This may take some time.
+ >
+ > Generating native image symbol files
+ > ...SKIPPED
+ > Saving native symbols
+ > ...FINISHED
+ > Exporting perf.data file
+ > ...FINISHED
+ > Compressing trace files
+ > ...FINISHED
+ > Cleaning up artifacts
+ > ...FINISHED
+ >
+ > Trace saved to sampleTrace.trace.zip
+ > ```
+
+ The compressed trace file is now stored in the current working directory.
+
+#Collecting in a Docker Container#
+Perfcollect can be used to collect data for an application running inside a Docker container. The main thing to know is that collecting a trace requires elevated privileges because the [default seccomp profile](https://docs.docker.com/engine/security/seccomp/) blocks a required syscall - perf_events_open.
+
+In order to use the instructions in this document to collect a trace, spawn a new shell inside the container that is privileged.
+
+>```bash
+>docker exec -it --privileged <container_name> /bin/bash
+>```
+
+Even though the application hosted in the container isn't privileged, this new shell is, and it will have all the privileges it needs to collect trace data. Now, simply follow the instructions in [Collecting a Trace](#collecting-a-trace) using the privileged shell.
+
+If you want to try tracing in a container, we've written a [demo Dockerfile](https://raw.githubusercontent.com/dotnet/corefx-tools/master/src/performance/perfcollect/docker-demo/Dockerfile) that installs all of the performance tracing pre-requisites, sets the environment up for tracing, and starts a sample CPU-bound app.
+
+#Filtering#
+Filtering is implemented on Windows through the latest mechanisms provided with the [EventSource](https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource(v=vs.110).aspx) class.
+
+On Linux those mechanisms are not available yet. Instead, there are two environment variables that exist just on linux to do some basic filtering.
+
+* COMPLUS_EventSourceFilter – filter event sources by name
+* COMPLUS_EventNameFilter – filter events by name
+
+Setting one or both of these variables will only enable collecting events that contain the name you specify as a substring. Strings are treated as case insensitive.
+
+#Viewing a Trace#
+Traces are best viewed using PerfView on Windows. Note that we're currently looking into porting the analysis pieces of PerfView to Linux so that the entire investigation can occur on Linux.
+
+##Open the Trace File##
+1. Copy the trace.zip file from Linux to a Windows machine.
+2. Download PerfView from <http://aka.ms/perfview>.
+3. Run PerfView.exe
+
+ > ```cmd
+ > PerfView.exe <path to trace.zip file>
+ > ```
+
+##Select a View##
+PerfView will display the list of views that are supported based on the data contained in the trace file.
+
+- For CPU investigations, choose **CPU stacks**.
+- For very detailed GC information, choose **GCStats**.
+- For per-process/module/method JIT information, choose **JITStats**.
+- If there is not a view for the information you need, you can try looking for the events in the raw events view. Choose **Events**.
+
+For more details on how to interpret views in PerfView, see help links in the view itself, or from the main window in PerfView choose **Help->Users Guide**.
+
+#Extra Information#
+This information is not strictly required to collect and analyze traces, but is provided for those who are interested.
+
+##Prerequisites##
+Perfcollect will alert users to any prerequisites that are not installed and offer to install them. Prerequisites can be installed automatically by running:
+
+>```bash
+>sudo ./perfcollect install
+>```
+
+The current prerequisites are:
+
+1. perf: Also known as perf_event, the Linux Performance Events sub-system and companion user-mode collection/viewer application. perf is part of the Linux kernel source, but is not usually installed by default.
+2. LTTng: Stands for "Linux Tracing Toolkit Next Generation", and is used to capture event data emitted at runtime by CoreCLR. This data is then used to analyze the behavior of various runtime components such as the GC, JIT and thread pool.
diff --git a/Documentation/project-docs/performance-guidelines.md b/Documentation/project-docs/performance-guidelines.md
new file mode 100644
index 0000000000..f9c5e17c91
--- /dev/null
+++ b/Documentation/project-docs/performance-guidelines.md
@@ -0,0 +1,54 @@
+Performance Requirements
+========================
+
+The .NET runtime supports a wide variety of high performance applications. As such, performance is a key design element for every change. This guidance is designed to share how we collect data and analyze the performance of the runtime.
+
+You may also want to read about [CoreFX performance guidelines](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/performance-guidelines.md).
+
+# Design Phase #
+Make sure to address performance during the design phase of any change. It is much easier to tweak a design to fit performance goals and requirements before implementation has started.
+
+Here are some guidelines about how to think about performance during design:
+
+- **DO** consider the performance of your change across a **wide variety of scenarios**. While one scenario may benefit, others may not or may even regress. Performance changes that penalize many scenarios for the benefit of one scenario are likely to be rejected unless the scenario is sufficiently important.
+- **DO** ensure that any additional complexity, such as caches or tricky logic have a compelling reason for inclusion.
+- **DO** ensure that performance fixes are **pay for play**. This means that in general, whoever pays the cost of the fix also gets the benefit. If scenarios or APIs pay for something that they never use or don't get benefit from, then this is essentially a performance regression.
+- **DO** share your justification for any performance fixes in your pull request so that reviewers understand the trade-off that is being made.
+
+# Cache Considerations #
+A few guidelines to consider if you're planning to add a cache. In addition to their upsides, they also come with downsides:
+
+- Caches are generally additional complexity. Thus there needs to be a **compelling** scenario when adding one.
+- Caches need to be **pay for play**. If there are scenarios that pay the cost but don't benefit, then the cache likely belongs at a different level of abstraction.
+- Prior to adding a cache, analysis of size and lifetime needs to be completed. Things to consider are whether the cache is unbounded in one or more scenarios, whether the lifetime of the cache is much longer than the times when it is useful and whether or not the cache needs any hints in order to be efficient. If any of these considerations are true, likely the cache should be at a different level of abstraction.
+
+# Prototyping #
+If you need to convince yourself that the performance characteristics of a design are acceptable, consider writing a prototype. The prototype should be just enough to be able to run a scenario that meets the scale requirements. You can then capture a performance trace and analyze the results.
+
+# Creating a Microbenchmark #
+A microbenchmark is an application that executes a specific codepath multiple times with the intention of monitoring that codepath's performance. The application usually runs many iterations of the code in question using a fine granularity timer, and then divides the total execution time by the number of iterations to determine the average execution time. You may find times where you'd like to understand the performance of a small piece of code, and in some cases a microbenchmark is the right way to do this.
+
+- **DO** use a microbenchmark when you have an isolated piece of code whose performance you want to analyze.
+- **DO NOT** use a microbenchmark for code that has non-deterministic dependences (e.g. network calls, file I/O etc.)
+- **DO** run all performance testing against retail optimized builds.
+- **DO** run many iterations of the code in question to filter out noise.
+- **DO** minimize the effects of other applications on the performance of the microbenchmark by closing as many unnecessary applications as possible.
+
+# Profiling and Performance Tracing #
+Measuring performance is an important part of ensuring that changes do not regress the performance of a feature or scenario.
+
+Using a profiler allows you to run an existing workload without adding tracing statements or otherwise modifying it, and at the same time, get rich information on how the workload performs.
+
+On the .NET team, we use a tool called **PerfView**, which runs on Windows, and allows for collection of performance data across an entire machine.
+
+Capturing a trace using PerfView will allow you to:
+
+- Investigate CPU usage and blocked time.
+- Understand the performance of various runtime services (GC, JIT, etc.)
+- Compare the performance of a workload by diffing before and after traces.
+- Much, much more.
+
+PerfView is available at the [Microsoft Download Center](http://www.microsoft.com/en-us/download/details.aspx?id=28567 "Microsoft Download Center"). The help documentation is quite substantial and can help you get started. Clicking the blue links throughout PerfView's UI will also take you to the appropriate help topic. It is also recommended that you watch the [PerfView Tutorial Videos](http://channel9.msdn.com/Series/PerfView-Tutorial).
+
+# Additional Help #
+If you have questions, run into any issues, or would like help with any performance related topics, please feel free to post a question. Someone from the .NET performance team will be happy to help.
diff --git a/Documentation/project-docs/profiling-api-status.md b/Documentation/project-docs/profiling-api-status.md
new file mode 100644
index 0000000000..a1f2f17c0e
--- /dev/null
+++ b/Documentation/project-docs/profiling-api-status.md
@@ -0,0 +1,80 @@
+#Status of CoreCLR Profiler APIs
+
+The notes below will help you determine what profiling APIs are safe to use. The .NET Core project started with the codebase from the desktop CoreCLR/Silverlight so all the profiler APIs present there are also present in the code here. However that doesn't automatically imply that they are all working or being actively tested right now. Our goal is to eventually have everything tested and working across all the supported OSes. As we make progress we'll document it here. If you want to use APIs that we haven't tested yet you are welcome to do so, but you need to do your own testing to determine whether they work. If you do test APIs we haven't gotten to yet, we hope you'll add a note below in the Community Tested API section so that everyone can benefit.
+
+#Microsoft Tested APIs:
+
+###Windows
+
+* ICorProfilerCallback:
+ * `Initialize`
+ * `ModuleLoadFinished`
+ * `ModuleUnloadStarted`
+ * `ModuleUnloadFinished`
+ * `ModuleAttachedToAssembly`
+ * `JITCompilationStarted`
+
+* ICorProfilerInfo:
+ * `GetModuleInfo`
+ * `GetModuleMetaData`*
+ * `GetModuleInfo`
+ * `GetModuleInfo2`
+ * `GetFunctionInfo`
+ * `SetILFunctionBody`*
+ * `SetILInstrumentedCodeMap`*
+ * `GetILFunctionBodyAllocator`*
+ * `GetRuntimeInformation`
+ * `SetEventMask`
+
+* The flags tested for SetEventMask are:
+ * `COR_PRF_MONITOR_MODULE_LOADS`
+ * `COR_PRF_MONITOR_JIT_COMPILATION`
+ * `COR_PRF_DISABLE_INLINING`
+
+\* Instrumentation APIs have not been tested on assemblies compiled with Ready2Run technology. Ready2Run is currently used
+ for all Framework assemblies.
+
+###Linux
+###OS X
+
+#Community Tested APIs (please include GitHub handle)
+
+###Windows
+ * IProfilerCallback
+ * ModuleLoadStarted (noahfalk on behalf of one of our vendors)
+ * JITCompilationStarted (noahfalk on behalf of one of our vendors)
+ * IMetaDataEmit
+ * various DefineXXX methods (noahfalk on behalf of one of our vendors)
+ * IMetadataDataDispenserEx
+ * OpenScopeOnMemory (noahfalk on behalf of one of our vendors)
+ * IMetaDataTables (noahfalk on behalf of one of our vendors)
+ * IMetaDataAssemblyEmit
+ * DefineAssemblyRef (noahfalk on behalf of one of our vendors)
+
+###Linux
+###OS X
+
+#APIs definitely known not to work yet
+###Windows
+###Linux
+
+* ICorProfilerInfo:
+ * `SetEnterLeaveFunctionHooks`
+
+* ICorProfilerInfo2:
+ * `SetEnterLeaveFunctionHooks2`
+
+* SetEventMask Flags that currently result in undefined behavior :
+ * `COR_PRF_USE_PROFILE_IMAGES`
+ * `COR_PRF_REQUIRE_PROFILE_IMAGE`
+
+###OS X
+* ICorProfilerInfo:
+ * `SetEnterLeaveFunctionHooks`
+
+* ICorProfilerInfo2:
+ * `SetEnterLeaveFunctionHooks2`
+
+* SetEventMask Flags that currently result in undefined behavior :
+ * `COR_PRF_USE_PROFILE_IMAGES`
+ * `COR_PRF_REQUIRE_PROFILE_IMAGE`
diff --git a/Documentation/project-docs/project-priorities.md b/Documentation/project-docs/project-priorities.md
new file mode 100644
index 0000000000..bb49427227
--- /dev/null
+++ b/Documentation/project-docs/project-priorities.md
@@ -0,0 +1,27 @@
+.NET Core Goals and Priorities
+==============================
+
+Microsoft published .NET Core to GitHub, with the following goals and priorities.
+
+Goals
+-----
+
+- Establish a high-quality open source .NET implementation, with [CoreCLR](https://github.com/dotnet/coreclr) and [CoreFX](https://github.com/dotnet/corefx).
+- Port CoreCLR to Linux and OS X (already supported on Windows).
+- Support the community extending CoreCLR in various ways (e.g. [FreeBSD support](https://github.com/dotnet/coreclr/issues/455)).
+
+Priorities
+----------
+
+The project has the following priorities, set by the .NET Team:
+
+- x64 is the priority chip to support. x86 and ARM32 will follow.
+- Windows, Linux and OS X support have the same priority.
+- Porting is a higher priority (at this time) than new features.
+
+Microsoft Team Engagement
+-------------------------
+
+The Microsoft team will engage on incoming PRs and issues that align with these goals and priorities. The team will also try to engage on other issues as time allows.
+
+The community is encouraged to create a broad range of issues. There may be a significant group of developers that are interested in the same topic. If a strong community viewpoint establishes itself on an issue outside of the core priority, then the team will likely engage on the issue. Engagement does not mean that the Microsoft team will necessarily build a feature, but discuss merits and implementation approaches.
diff --git a/Documentation/project-docs/windows-performance-tracing.md b/Documentation/project-docs/windows-performance-tracing.md
new file mode 100644
index 0000000000..04fab29fec
--- /dev/null
+++ b/Documentation/project-docs/windows-performance-tracing.md
@@ -0,0 +1,14 @@
+Performance Tracing on Windows
+=====================================
+
+Performance tracing on Windows is done using the PerfView, which can be downloaded at <http://aka.ms/Perfview>.
+
+PerfView has significant documentation built-in, which includes:
+
+- Getting started help.
+- Collection and investigation walk-through videos.
+- An extensive users guide.
+
+To get started, download PerfView and use the links on the main screen to get help.
+
+If you have specific questions, please post them in an issue here. \ No newline at end of file