Download symbols in lldb/sos and for portable PDBs on Windows/dbgeng. (#101)
authorMike McLaughlin <mikem@microsoft.com>
Thu, 13 Dec 2018 20:40:29 +0000 (12:40 -0800)
committerGitHub <noreply@github.com>
Thu, 13 Dec 2018 20:40:29 +0000 (12:40 -0800)
* Download symbols in lldb/sos and for portable PDBs on Windows/dbgeng.

Add symbol store support.

Separate the coreclr hosting code.

Use dlopen/dlsym on Linux to host coreclr.

Remove _EFN_ functions and VerifyStackTrace from xplat builds of SOS.

Add native projects for easier Strike development.

Fix packaging and yaml for additional symstore assemblies.

Don't pack dotnet-analyze and dotnet-collect because they currently break the official job.

* Workaround problem in IXCLRDataModule Request that crashes on dynamic
modules. Use the IXCLRDataModule GetFlags to skip them.

* Turn off verbose logging.

32 files changed:
.vsts-dotnet.yml
diagnostics.sln
eng/Versions.props
src/Directory.Build.targets
src/SOS/SOS.NETCore/CMakeLists.txt
src/SOS/SOS.NETCore/SOS.NETCore.csproj
src/SOS/SOS.NETCore/SymbolReader.cs
src/SOS/SOS.NETCore/Tracer.cs [new file with mode: 0644]
src/SOS/Strike/CMakeLists.txt
src/SOS/Strike/Strike.vcxproj [new file with mode: 0644]
src/SOS/Strike/Strike.vcxproj.filters [new file with mode: 0644]
src/SOS/Strike/datatarget.cpp
src/SOS/Strike/exts.cpp
src/SOS/Strike/hostcoreclr.cpp [new file with mode: 0644]
src/SOS/Strike/hostcoreclr.h [new file with mode: 0644]
src/SOS/Strike/sos.def
src/SOS/Strike/sos_unixexports.src
src/SOS/Strike/sosdocsunix.txt
src/SOS/Strike/strike.cpp
src/SOS/Strike/util.cpp
src/SOS/Strike/util.h
src/SOS/Strike/xplat/dbgeng.h
src/SOS/dbgutil/dbgutil.vcxproj [new file with mode: 0644]
src/SOS/debugshim/debugshim.vcxproj [new file with mode: 0644]
src/SOS/gcdump/gcdump.vcxproj [new file with mode: 0644]
src/SOS/gcdump/gcdump.vcxproj.filters [new file with mode: 0644]
src/SOS/lldbplugin/lldbplugin.vcxproj
src/SOS/lldbplugin/lldbplugin.vcxproj.filters [new file with mode: 0644]
src/SOS/lldbplugin/soscommand.cpp
src/Tools/dotnet-analyze/dotnet-analyze.csproj
src/Tools/dotnet-collect/dotnet-collect.csproj
src/inc/arrayholder.h

index 2f8a073869fb330594faf208f17c37bf5dcd25bf..2c1b71e03df398f855df9226be236124bfc4802c 100644 (file)
@@ -215,7 +215,7 @@ phases:
       - agent.os -equals Windows_NT
   variables: 
     _PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
-    _SOSNETCorePath: $(Build.SourcesDirectory)/artifacts/bin/SOS.NETCore/Release/netcoreapp1.0
+    _SOSNETCorePath: $(Build.SourcesDirectory)/artifacts/bin/SOS.NETCore/Release/netcoreapp2.0/publish
     _TeamName: DotNetCore
 
   steps: 
@@ -265,7 +265,7 @@ phases:
     displayName: Copy Windows x64 Artifacts
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/Windows_NT.x64.Release'
     condition: succeeded()
@@ -300,7 +300,7 @@ phases:
     displayName: Copy Windows x86 Artifacts
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/Windows_NT.x86.Release'
     condition: succeeded()
@@ -328,7 +328,7 @@ phases:
     displayName: Copy Extension Gallery Files
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/gallery/x64'
     condition: succeeded()
@@ -345,7 +345,7 @@ phases:
     displayName: Copy Extension Gallery Files
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/gallery/x86'
     condition: succeeded()
@@ -388,7 +388,7 @@ phases:
     displayName: Copy Linux Artifacts
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/Linux.x64.Release'
     condition: succeeded()
@@ -423,7 +423,7 @@ phases:
     displayName: Copy MacOS Artifacts
     inputs:
       sourceFolder: '$(_SOSNETCorePath)'
-      contents: 'SOS.NETCore.dll'
+      contents: '*.dll'
       overWrite: true
       targetFolder: '$(Build.SourcesDirectory)/artifacts/bin/OSX.x64.Release'
     condition: succeeded()
index dbee3a5c7b3cc03d8d5f6e2e778add0bb6382779..324aba897f3014837ca3b5163c357e3b599b76d1 100644 (file)
@@ -27,8 +27,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-collect", "src\Tools
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dump", "src\Tools\dotnet-dump\dotnet-dump.csproj", "{43D41DE9-7CCC-4DCB-A68A-B9099E538125}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Strike", "src\SOS\Strike\Strike.vcxproj", "{41F59D85-FC36-3015-861B-F177863252BC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dbgutil", "src\SOS\dbgutil\dbgutil.vcxproj", "{A9A7C879-C320-3327-BB84-16E1322E17AE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "debugshim", "src\SOS\debugshim\debugshim.vcxproj", "{6A94C5FE-8706-3505-834E-DA16242F3864}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gcdump", "src\SOS\gcdump\gcdump.vcxproj", "{20EBC3C4-917C-402D-B778-9A6E3742BF5A}"
+EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Checked|Any CPU = Checked|Any CPU
+               Checked|ARM = Checked|ARM
+               Checked|ARM64 = Checked|ARM64
+               Checked|x64 = Checked|x64
+               Checked|x86 = Checked|x86
                Debug|Any CPU = Debug|Any CPU
                Debug|ARM = Debug|ARM
                Debug|ARM64 = Debug|ARM64
@@ -39,8 +52,23 @@ Global
                Release|ARM64 = Release|ARM64
                Release|x64 = Release|x64
                Release|x86 = Release|x86
+               RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
+               RelWithDebInfo|ARM = RelWithDebInfo|ARM
+               RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64
+               RelWithDebInfo|x64 = RelWithDebInfo|x64
+               RelWithDebInfo|x86 = RelWithDebInfo|x86
        EndGlobalSection
        GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|ARM.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|ARM64.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|x64.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|x64.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|x86.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Checked|x86.Build.0 = Release|Any CPU
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -61,6 +89,26 @@ Global
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Release|x64.Build.0 = Release|Any CPU
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Release|x86.ActiveCfg = Release|Any CPU
                {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.Release|x86.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.Build.0 = Release|Any CPU
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -81,6 +129,26 @@ Global
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.Build.0 = Release|Any CPU
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.ActiveCfg = Release|Any CPU
                {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM64.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x64.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x64.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x86.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|x86.Build.0 = Release|Any CPU
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -101,6 +169,26 @@ Global
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x64.Build.0 = Release|Any CPU
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x86.ActiveCfg = Release|Any CPU
                {730C1201-1848-4F1E-8C1F-6316FB886C35}.Release|x86.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {730C1201-1848-4F1E-8C1F-6316FB886C35}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|ARM64.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x64.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x64.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x86.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Checked|x86.Build.0 = Release|Any CPU
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -121,6 +209,26 @@ Global
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x64.Build.0 = Release|Any CPU
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x86.ActiveCfg = Release|Any CPU
                {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.Release|x86.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {1532DB3C-7DCD-45C6-B697-62B8378A16A2}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|ARM.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|ARM64.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|x64.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|x64.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|x86.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Checked|x86.Build.0 = Release|Any CPU
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -141,24 +249,60 @@ Global
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Release|x64.Build.0 = Release|Any CPU
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Release|x86.ActiveCfg = Release|Any CPU
                {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.Release|x86.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {365381BB-2A89-4F52-BC66-1BB4A9D514BB}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|Any CPU.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|Any CPU.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM64.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|ARM64.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x64.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x64.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x86.ActiveCfg = Release|x86
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Checked|x86.Build.0 = Release|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|Any CPU.ActiveCfg = Debug|x64
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM.ActiveCfg = Debug|ARM
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM.Build.0 = Debug|ARM
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM64.ActiveCfg = Debug|ARM64
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM64.Build.0 = Debug|ARM64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM.ActiveCfg = Debug|x86
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|ARM64.ActiveCfg = Debug|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x64.ActiveCfg = Debug|x64
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x64.Build.0 = Debug|x64
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x86.ActiveCfg = Debug|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Debug|x86.Build.0 = Debug|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|Any CPU.ActiveCfg = Release|x86
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM.ActiveCfg = Release|ARM
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM.Build.0 = Release|ARM
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM64.ActiveCfg = Release|ARM64
-               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM64.Build.0 = Release|ARM64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM.ActiveCfg = Release|x86
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|ARM64.ActiveCfg = Release|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x64.ActiveCfg = Release|x64
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x64.Build.0 = Release|x64
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x86.ActiveCfg = Release|x86
                {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x86.Build.0 = Release|x86
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM64.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM64.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x64.ActiveCfg = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x64.Build.0 = Release|x64
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x86.ActiveCfg = Release|x86
+               {D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|x86.Build.0 = Release|x86
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|ARM.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|ARM64.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|x64.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|x64.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|x86.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.Checked|x86.Build.0 = Release|Any CPU
                {1576314E-F823-4A24-BC90-22282AB33353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {1576314E-F823-4A24-BC90-22282AB33353}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {1576314E-F823-4A24-BC90-22282AB33353}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -179,6 +323,26 @@ Global
                {1576314E-F823-4A24-BC90-22282AB33353}.Release|x64.Build.0 = Release|Any CPU
                {1576314E-F823-4A24-BC90-22282AB33353}.Release|x86.ActiveCfg = Release|Any CPU
                {1576314E-F823-4A24-BC90-22282AB33353}.Release|x86.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {1576314E-F823-4A24-BC90-22282AB33353}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|ARM.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|ARM64.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|x64.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|x64.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|x86.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.Checked|x86.Build.0 = Release|Any CPU
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -199,6 +363,26 @@ Global
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Release|x64.Build.0 = Release|Any CPU
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Release|x86.ActiveCfg = Release|Any CPU
                {D9972D61-4B43-4007-B983-C02718DD8D33}.Release|x86.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {D9972D61-4B43-4007-B983-C02718DD8D33}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|Any CPU.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|Any CPU.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM64.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|ARM64.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x64.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x64.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x86.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Checked|x86.Build.0 = Release|Any CPU
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|Any CPU.Build.0 = Debug|Any CPU
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -219,6 +403,112 @@ Global
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x64.Build.0 = Release|Any CPU
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x86.ActiveCfg = Release|Any CPU
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.Release|x86.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
+               {43D41DE9-7CCC-4DCB-A68A-B9099E538125}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|Any CPU.ActiveCfg = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|ARM.ActiveCfg = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|ARM64.ActiveCfg = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x64.ActiveCfg = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x64.Build.0 = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Checked|x86.ActiveCfg = Checked|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|Any CPU.ActiveCfg = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|ARM.ActiveCfg = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|ARM64.ActiveCfg = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x64.ActiveCfg = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x64.Build.0 = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Debug|x86.ActiveCfg = Debug|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|Any CPU.ActiveCfg = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|ARM.ActiveCfg = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|ARM64.ActiveCfg = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|x64.ActiveCfg = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|x64.Build.0 = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.Release|x86.ActiveCfg = Release|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+               {41F59D85-FC36-3015-861B-F177863252BC}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|Any CPU.ActiveCfg = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM.ActiveCfg = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|ARM64.ActiveCfg = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x64.ActiveCfg = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x64.Build.0 = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Checked|x86.ActiveCfg = Checked|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|Any CPU.ActiveCfg = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM.ActiveCfg = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|ARM64.ActiveCfg = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x64.ActiveCfg = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x64.Build.0 = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Debug|x86.ActiveCfg = Debug|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|Any CPU.ActiveCfg = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|ARM.ActiveCfg = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|ARM64.ActiveCfg = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|x64.ActiveCfg = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|x64.Build.0 = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.Release|x86.ActiveCfg = Release|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+               {A9A7C879-C320-3327-BB84-16E1322E17AE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|Any CPU.ActiveCfg = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|ARM.ActiveCfg = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|ARM64.ActiveCfg = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|x64.ActiveCfg = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|x64.Build.0 = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Checked|x86.ActiveCfg = Checked|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|Any CPU.ActiveCfg = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|ARM.ActiveCfg = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|ARM64.ActiveCfg = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|x64.ActiveCfg = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|x64.Build.0 = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Debug|x86.ActiveCfg = Debug|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|Any CPU.ActiveCfg = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|ARM.ActiveCfg = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|ARM64.ActiveCfg = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|x64.ActiveCfg = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|x64.Build.0 = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.Release|x86.ActiveCfg = Release|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+               {6A94C5FE-8706-3505-834E-DA16242F3864}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|Any CPU.ActiveCfg = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|ARM.ActiveCfg = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|ARM64.ActiveCfg = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x64.ActiveCfg = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x64.Build.0 = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Checked|x86.ActiveCfg = Checked|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|Any CPU.ActiveCfg = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|ARM.ActiveCfg = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|ARM64.ActiveCfg = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x64.ActiveCfg = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x64.Build.0 = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Debug|x86.ActiveCfg = Debug|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|Any CPU.ActiveCfg = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|ARM.ActiveCfg = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|ARM64.ActiveCfg = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|x64.ActiveCfg = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|x64.Build.0 = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.Release|x86.ActiveCfg = Release|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
        EndGlobalSection
        GlobalSection(SolutionProperties) = preSolution
                HideSolutionNode = FALSE
@@ -235,6 +525,10 @@ Global
                {1576314E-F823-4A24-BC90-22282AB33353} = {B62728C8-1267-4043-B46F-5537BBAEC692}
                {D9972D61-4B43-4007-B983-C02718DD8D33} = {B62728C8-1267-4043-B46F-5537BBAEC692}
                {43D41DE9-7CCC-4DCB-A68A-B9099E538125} = {B62728C8-1267-4043-B46F-5537BBAEC692}
+               {41F59D85-FC36-3015-861B-F177863252BC} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
+               {A9A7C879-C320-3327-BB84-16E1322E17AE} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
+               {6A94C5FE-8706-3505-834E-DA16242F3864} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
+               {20EBC3C4-917C-402D-B778-9A6E3742BF5A} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
        EndGlobalSection
        GlobalSection(ExtensibilityGlobals) = postSolution
                SolutionGuid = {46465737-C938-44FC-BE1A-4CE139EBB5E0}
index 79bbe444f871d2ed8f8fcc6359f7dd4496728e29..0d2beffe8c2302dd9773eeb91cc4e14657549407 100644 (file)
     <MicrosoftNetCompilersVersion>2.8.0-beta6-62830-08</MicrosoftNetCompilersVersion>
 
     <!-- CoreFX -->
-    <SystemReflectionMetadataVersion>1.5.0</SystemReflectionMetadataVersion>
+    <SystemReflectionMetadataVersion>1.6.0</SystemReflectionMetadataVersion>
+    <SystemCollectionsImmutableVersion>1.5.0</SystemCollectionsImmutableVersion>
     <MicrosoftWin32PrimitivesVersion>4.3.0</MicrosoftWin32PrimitivesVersion>
+
+    <!-- Other libs -->
+    <MicrosoftSymbolStoreVersion>1.0.0-dev-63604-01</MicrosoftSymbolStoreVersion>
   </PropertyGroup>
 
   <PropertyGroup>
     <RestoreSources>
       $(RestoreSources);
       https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
+      https://dotnet.myget.org/F/symstore/api/v3/index.json;
       https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
       https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json
     </RestoreSources>
index 177d64c47ad1184620ed8aa48831c96128092cb7..99cacb7123830483d2caf65c1e39dfa4fc82988e 100644 (file)
@@ -1,4 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project>
   <Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" />
+
+  <Target Name="_PublishPackageReferences"
+          AfterTargets="PostBuildEvent"
+          Condition="$(IsPublishable) == 'true'"
+          DependsOnTargets="$(_BeforePublishNoBuildTargets);$(_CorePublishTargets)" />
 </Project>
index 735d541f3f6d1a866495269086070b10d8cbb093..9dcd85b14069707c3b5e424e3a099959bc8473cf 100644 (file)
@@ -1,8 +1,12 @@
 project(SOS.NETCore)
 
 if(NOT ${CLR_MANAGED_BINARY_DIR} STREQUAL "")
-    set(MANAGED_BINDIR ${CLR_MANAGED_BINARY_DIR}/SOS.NETCore/${CLR_BUILD_TYPE}/netcoreapp1.0)
+    set(MANAGED_BINDIR ${CLR_MANAGED_BINARY_DIR}/SOS.NETCore/${CLR_BUILD_TYPE}/netcoreapp2.0/publish)
 
-    install(FILES ${MANAGED_BINDIR}/SOS.NETCore.dll DESTINATION .)
-    install(FILES ${MANAGED_BINDIR}/SOS.NETCore.pdb DESTINATION .)
+    install(FILES ${MANAGED_BINDIR}/SOS.NETCore.dll DESTINATION . )
+    install(FILES ${MANAGED_BINDIR}/SOS.NETCore.pdb DESTINATION . )
+    install(FILES ${MANAGED_BINDIR}/Microsoft.FileFormats.dll DESTINATION . )
+    install(FILES ${MANAGED_BINDIR}/Microsoft.SymbolStore.dll DESTINATION . )
+    install(FILES ${MANAGED_BINDIR}/System.Reflection.Metadata.dll DESTINATION . )
+    install(FILES ${MANAGED_BINDIR}/System.Collections.Immutable.dll DESTINATION . )
 endif()
index 87a7e093655448f456dfcc127e45e58cc440cb08..a4d723675802c9b6851c1bfb71377414a2e61e54 100644 (file)
@@ -1,25 +1,27 @@
 <!-- Copyright (c)  Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information. -->
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
-    <TargetFramework>netcoreapp1.0</TargetFramework>
+    <TargetFramework>netcoreapp2.0</TargetFramework>
     <AssemblyName>SOS.NETCore</AssemblyName>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <NoWarn>;1591;1701</NoWarn>
     <IsPackable>true</IsPackable>
+    <IsPublishable>true</IsPublishable>
     <Description>.NET Core SOS</Description>
     <PackageId>SOS</PackageId>
     <PackageReleaseNotes>$(Description)</PackageReleaseNotes>
     <PackageTags>SOS</PackageTags>
     <IncludeBuildOutput>false</IncludeBuildOutput>
-    <SOSNETCorePath>$(ArtifactsBinDir)\SOS.NETCore\$(Configuration)\netcoreapp1.0\SOS.NETCore.dll</SOSNETCorePath>
+    <SOSNETCoreBinaries>$(ArtifactsBinDir)\SOS.NETCore\$(Configuration)\netcoreapp2.0\publish\*.dll</SOSNETCoreBinaries>
   </PropertyGroup>
   
   <ItemGroup>
     <PackageReference Include="System.Reflection.Metadata" Version="$(SystemReflectionMetadataVersion)" />
+    <PackageReference Include="Microsoft.SymbolStore" Version="$(MicrosoftSymbolStoreVersion)" />
   </ItemGroup>
 
   <ItemGroup>
-    <_PackageFiles Include="$(SOSNETCorePath)">
+    <_PackageFiles Include="$(SOSNETCoreBinaries)">
       <BuildAction>None</BuildAction>
       <PackagePath>tools/win-x64</PackagePath>
     </_PackageFiles>
@@ -28,7 +30,7 @@
       <PackagePath>tools/win-x64</PackagePath>
     </_PackageFiles>
 
-    <_PackageFiles Include="$(SOSNETCorePath)">
+    <_PackageFiles Include="$(SOSNETCoreBinaries)">
       <BuildAction>None</BuildAction>
       <PackagePath>tools/win-x86</PackagePath>
     </_PackageFiles>
@@ -37,7 +39,7 @@
       <PackagePath>tools/win-x86</PackagePath>
     </_PackageFiles>
 
-    <_PackageFiles Include="$(SOSNETCorePath)">
+    <_PackageFiles Include="$(SOSNETCoreBinaries)">
       <BuildAction>None</BuildAction>
       <PackagePath>tools/linux-x64</PackagePath>
     </_PackageFiles>
@@ -54,7 +56,7 @@
       <PackagePath>tools/linux-x64</PackagePath>
     </_PackageFiles>
 
-    <_PackageFiles Include="$(SOSNETCorePath)">
+    <_PackageFiles Include="$(SOSNETCoreBinaries)">
       <BuildAction>None</BuildAction>
       <PackagePath>tools/osx-x64</PackagePath>
     </_PackageFiles>
index 7a4bb521021a32f63bdfd58cfd4c5e604e7aabf7..377014ffc3516c3027bf977bf9b496c4f6b7e203 100644 (file)
@@ -2,14 +2,21 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 // See the LICENSE file in the project root for more information.
 
+using Microsoft.FileFormats.PE;
+using Microsoft.SymbolStore;
+using Microsoft.SymbolStore.KeyGenerators;
+using Microsoft.SymbolStore.SymbolStores;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
+using System.Linq;
 using System.Reflection.Metadata;
 using System.Reflection.Metadata.Ecma335;
 using System.Reflection.PortableExecutable;
 using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading;
 
 namespace SOS
 {
@@ -38,15 +45,8 @@ namespace SOS
             public int size;
             public IntPtr locals;
             public int localsSize;
-
         }
 
-        /// <summary>
-        /// Read memory callback
-        /// </summary>
-        /// <returns>number of bytes read or 0 for error</returns>
-        internal unsafe delegate int ReadMemoryDelegate(ulong address, byte* buffer, int count);
-
         private sealed class OpenedReader : IDisposable
         {
             public readonly MetadataReaderProvider Provider;
@@ -97,7 +97,7 @@ namespace SOS
                 {
                     fixed (byte* p = &buffer[offset])
                     {
-                        int read  = _readMemory(_address + (ulong)Position, p, count);
+                        int read = _readMemory(_address + (ulong)Position, p, count);
                         Position += read;
                         return read;
                     }
@@ -137,16 +137,223 @@ namespace SOS
         }
 
         /// <summary>
-        /// Quick fix for Path.GetFileName which incorrectly handles Windows-style paths on Linux
+        /// Symbol server URLs
         /// </summary>
-        /// <param name="pathName"> File path to be processed </param>
-        /// <returns>Last component of path</returns>
-        private static string GetFileName(string pathName)
+        const string MsdlsymbolServer = "http://msdl.microsoft.com/download/symbols/";
+        const string SymwebSymbolService = "http://symweb.corp.microsoft.com/";
+
+        /// <summary>
+        /// Read memory callback
+        /// </summary>
+        /// <returns>number of bytes read or 0 for error</returns>
+        internal unsafe delegate int ReadMemoryDelegate(ulong address, byte* buffer, int count);
+
+        /// <summary>
+        /// Writeline delegate for symbol store logging
+        /// </summary>
+        /// <param name="message"></param>
+        internal delegate void WriteLine([MarshalAs(UnmanagedType.LPStr)] string message);
+
+        static bool s_symbolCacheAdded = false;
+        static SymbolStore s_symbolStore = null;
+        static ITracer s_tracer = null;
+
+        /// <summary>
+        /// Initializes symbol loading. Adds the symbol server and/or the cache path (if not null) to the list of
+        /// symbol servers. This API can be called more than once to add more servers to search.
+        /// </summary>
+        /// <param name="output">output callback delegate (not used currently)</param>
+        /// <param name="msdl">if true, use the public microsoft server</param>
+        /// <param name="symweb">if true, use symweb internal server and protocol (file.ptr)</param>
+        /// <param name="symbolServerPath">symbol server url (optional)</param>
+        /// <param name="symbolCachePath">symbol cache directory path (optional)</param>
+        /// <param name="windowsSymbolPath">windows symbol path (optional)</param>
+        /// <returns></returns>
+        internal static bool InitializeSymbolStore(WriteLine output, bool msdl, bool symweb, string symbolServerPath, string symbolCachePath, string windowsSymbolPath)
         {
-            int pos = pathName.LastIndexOfAny(new char[] { '/', '\\'});
-            if (pos < 0)
-                return pathName;
-            return pathName.Substring(pos + 1);
+            if (s_tracer == null)
+            {
+                s_tracer = new Tracer(enabled: true, enabledVerbose: false, output);
+            }
+            SymbolStore store = s_symbolStore;
+
+            // Build the symbol stores
+            if (windowsSymbolPath != null)
+            {
+                // Parse the Windows symbol path syntax (srv*, cache*, etc)
+                if (!ParseSymbolPath(ref store, windowsSymbolPath))
+                {
+                    return false;
+                }
+            }
+            else
+            {
+                // Build the symbol stores using the other parameters
+                if (!GetServerSymbolStore(ref store, msdl, symweb, symbolServerPath, symbolCachePath))
+                {
+                    return false;
+                }
+            }
+
+            s_symbolStore = store;
+            return true;
+        }
+
+        /// <summary>
+        /// Parses the Windows debugger symbol path (srv*, cache*, etc.).
+        /// </summary>
+        /// <param name="store">symbol store to chain</param>
+        /// <param name="symbolPath">Windows symbol path</param>
+        /// <returns>if false, error parsing symbol path</returns>
+        private static bool ParseSymbolPath(ref SymbolStore store, string symbolPath)
+        {
+            string[] paths = symbolPath.Split(";", StringSplitOptions.RemoveEmptyEntries);
+
+            foreach (string path in paths.Reverse())
+            {
+                string[] parts = path.Split("*", StringSplitOptions.RemoveEmptyEntries);
+
+                // UNC or directory paths are ignored (paths not prefixed with srv* or cache*).
+                if (parts.Length > 0)
+                {
+                    string symbolServerPath = null;
+                    string symbolCachePath = null;
+                    bool msdl = false;
+
+                    switch (parts[0].ToLowerInvariant())
+                    {
+                        case "srv":
+                            switch (parts.Length)
+                            { 
+                                case 1:
+                                    msdl = true;
+                                    break;
+                                case 2:
+                                    symbolServerPath = parts[1];
+                                    break;
+                                case 3:
+                                    symbolCachePath = parts[1];
+                                    symbolServerPath = parts[2];
+                                    break;
+                                default:
+                                    return false;
+                            }
+                            break;
+
+                        case "cache":
+                            switch (parts.Length)
+                            { 
+                                case 1:
+                                    symbolCachePath = GetDefaultSymbolCache();
+                                    break;
+                                case 2:
+                                    symbolCachePath = parts[1];
+                                    break;
+                                default:
+                                    return false;
+                            }
+                            break;
+
+                        default:
+                            return false;
+                    }
+
+                    // Add the symbol stores to the chain
+                    if (!GetServerSymbolStore(ref store, msdl, false, symbolServerPath, symbolCachePath))
+                    {
+                        return false;
+                    }
+                }
+            }
+
+            return true;
+        }
+
+        private static bool GetServerSymbolStore(ref SymbolStore store, bool msdl, bool symweb, string symbolServerPath, string symbolCachePath)
+        {
+            bool internalServer = false;
+
+            // Add symbol server URL if exists
+            if (symbolServerPath == null)
+            {
+                if (msdl)
+                {
+                    symbolServerPath = MsdlsymbolServer;
+                }
+                else if (symweb)
+                {
+                    symbolServerPath = SymwebSymbolService;
+                    internalServer = true;
+                }
+            }
+            else
+            {
+                // Use the internal symbol store for symweb
+                internalServer = symbolServerPath.Contains("symweb");
+
+                // Make sure the server Uri ends with "/"
+                symbolServerPath = symbolServerPath.TrimEnd('/') + '/';
+            }
+
+            if (symbolServerPath != null)
+            {
+                if (!Uri.TryCreate(symbolServerPath, UriKind.Absolute, out Uri uri) || uri.IsFile)
+                {
+                    return false;
+                }
+
+                // Create symbol server store
+                if (internalServer)
+                {
+                    store = new SymwebHttpSymbolStore(s_tracer, store, uri);
+                }
+                else
+                {
+                    store = new HttpSymbolStore(s_tracer, store, uri);
+                }
+            }
+
+            if (symbolCachePath != null)
+            {
+                store = new CacheSymbolStore(s_tracer, store, symbolCachePath);
+
+                // Don't add the default cache later
+                s_symbolCacheAdded = true;
+            }
+
+            return true;
+        }
+
+        private static string GetDefaultSymbolCache()
+        {
+            var sb = new StringBuilder();
+
+            string environmentVar;
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            {
+                environmentVar = "ProgramData";
+            }
+            else
+            {
+                environmentVar = "HOME";
+            }
+            string userPath = Environment.GetEnvironmentVariable(environmentVar);
+            sb.Append(userPath);
+            sb.Append(Path.DirectorySeparatorChar);
+
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            {
+                sb.Append("dbg");
+                sb.Append(Path.DirectorySeparatorChar);
+                sb.Append("sym");
+            }
+            else
+            {
+                sb.Append(".sos");
+                sb.Append(Path.DirectorySeparatorChar);
+                sb.Append("symbolcache");
+            }
+            return sb.ToString();
         }
 
         /// <summary>
@@ -171,7 +378,7 @@ namespace SOS
             try
             {
                 TargetStream peStream = null;
-                if (assemblyPath == null && loadedPeAddress != 0)
+                if (loadedPeAddress != 0)
                 {
                     peStream = new TargetStream(loadedPeAddress, loadedPeSize, readMemory);
                 }
@@ -366,7 +573,7 @@ namespace SOS
         /// <param name="localIndex">local variable index</param>
         /// <param name="localVarName">local variable name return</param>
         /// <returns>true if name has been found</returns>
-        internal static bool GetLocalVariableByIndex(IntPtr symbolReaderHandle, int methodToken, int localIndex, out string localVarName)
+        private static bool GetLocalVariableByIndex(IntPtr symbolReaderHandle, int methodToken, int localIndex, out string localVarName)
         {
             Debug.Assert(symbolReaderHandle != IntPtr.Zero);
             localVarName = null;
@@ -405,7 +612,8 @@ namespace SOS
             }
             return false;
         }
-        internal static bool GetLocalsInfoForMethod(string assemblyPath, int methodToken, out List<LocalVarInfo> locals)
+
+        private static bool GetLocalsInfoForMethod(string assemblyPath, int methodToken, out List<LocalVarInfo> locals)
         {
             locals = null;
 
@@ -451,8 +659,9 @@ namespace SOS
             return true;
 
         }
+
         /// <summary>
-        /// Returns source name, line numbers and IL offsets for given method token.
+        /// Returns source name, line numbers and IL offsets for given method token. Used by the GDBJIT support.
         /// </summary>
         /// <param name="assemblyPath">file path of the assembly</param>
         /// <param name="methodToken">method token</param>
@@ -557,7 +766,7 @@ namespace SOS
         /// </summary>
         /// <param name="assemblyPath">file path of the assembly or null if the module is in-memory or dynamic</param>
         /// <param name="isFileLayout">type of in-memory PE layout, if true, file based layout otherwise, loaded layout</param>
-        /// <param name="peStream">optional in-memory PE stream</param>
+        /// <param name="peStream">in-memory PE stream</param>
         /// <param name="pdbStream">optional in-memory PDB stream</param>
         /// <returns>reader/provider wrapper instance</returns>
         /// <remarks>
@@ -629,8 +838,7 @@ namespace SOS
             {
                 using (var peReader = new PEReader(peStream, options))
                 {
-                    DebugDirectoryEntry codeViewEntry, embeddedPdbEntry;
-                    ReadPortableDebugTableEntries(peReader, out codeViewEntry, out embeddedPdbEntry);
+                    ReadPortableDebugTableEntries(peReader, out DebugDirectoryEntry codeViewEntry, out DebugDirectoryEntry embeddedPdbEntry);
 
                     // First try .pdb file specified in CodeView data (we prefer .pdb file on disk over embedded PDB
                     // since embedded PDB needs decompression which is less efficient than memory-mapping the file).
@@ -662,19 +870,17 @@ namespace SOS
         {
             // See spec: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md
 
-            codeViewEntry = default(DebugDirectoryEntry);
-            embeddedPdbEntry = default(DebugDirectoryEntry);
+            codeViewEntry = default;
+            embeddedPdbEntry = default;
 
             foreach (DebugDirectoryEntry entry in peReader.ReadDebugDirectory())
             {
                 if (entry.Type == DebugDirectoryEntryType.CodeView)
                 {
-                    const ushort PortableCodeViewVersionMagic = 0x504d;
-                    if (entry.MinorVersion != PortableCodeViewVersionMagic)
+                    if (entry.MinorVersion != ImageDebugDirectory.PortablePDBMinorVersion)
                     {
                         continue;
                     }
-
                     codeViewEntry = entry;
                 }
                 else if (entry.Type == DebugDirectoryEntryType.EmbeddedPortablePdb)
@@ -690,10 +896,11 @@ namespace SOS
             MetadataReaderProvider provider = null;
             try
             {
-                var data = peReader.ReadCodeViewDebugDirectoryData(codeViewEntry);
-
+                CodeViewDebugDirectoryData data = peReader.ReadCodeViewDebugDirectoryData(codeViewEntry);
                 string pdbPath = data.Path;
-                if (assemblyPath != null)
+                Stream pdbStream = null;
+
+                if (assemblyPath != null) 
                 {
                     try
                     {
@@ -704,16 +911,35 @@ namespace SOS
                         // invalid characters in CodeView path
                         return null;
                     }
+                    pdbStream = TryOpenFile(pdbPath);
                 }
 
-                var pdbStream = TryOpenFile(pdbPath);
                 if (pdbStream == null)
                 {
-                    return null;
+                    if (s_symbolStore == null)
+                    {
+                        return null;
+                    }
+                    Debug.Assert(codeViewEntry.MinorVersion == ImageDebugDirectory.PortablePDBMinorVersion);
+                    SymbolStoreKey key = PortablePDBFileKeyGenerator.GetKey(pdbPath, data.Guid);
+
+                    // Add the default symbol cache if it hasn't already been added
+                    if (!s_symbolCacheAdded)
+                    {
+                        s_symbolStore = new CacheSymbolStore(s_tracer, s_symbolStore, GetDefaultSymbolCache());
+                        s_symbolCacheAdded = true;
+                    }
+
+                    SymbolStoreFile symbolStoreFile = s_symbolStore.GetFile(key, CancellationToken.None).GetAwaiter().GetResult();
+                    if (symbolStoreFile == null)
+                    {
+                        return null;
+                    }
+                    pdbStream = symbolStoreFile.Stream;
                 }
 
                 provider = MetadataReaderProvider.FromPortablePdbStream(pdbStream);
-                var reader = provider.GetMetadataReader();
+                MetadataReader reader = provider.GetMetadataReader();
 
                 // Validate that the PDB matches the assembly version
                 if (data.Age == 1 && new BlobContentId(reader.DebugMetadataHeader.Id) == new BlobContentId(data.Guid, codeViewEntry.Stamp))
@@ -778,5 +1004,18 @@ namespace SOS
                 return null;
             }
         }
+
+        /// <summary>
+        /// Quick fix for Path.GetFileName which incorrectly handles Windows-style paths on Linux
+        /// </summary>
+        /// <param name="pathName"> File path to be processed </param>
+        /// <returns>Last component of path</returns>
+        private static string GetFileName(string pathName)
+        {
+            int pos = pathName.LastIndexOfAny(new char[] { '/', '\\'});
+            if (pos < 0)
+                return pathName;
+            return pathName.Substring(pos + 1);
+        }
     }
 }
diff --git a/src/SOS/SOS.NETCore/Tracer.cs b/src/SOS/SOS.NETCore/Tracer.cs
new file mode 100644 (file)
index 0000000..d856a3f
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+using System;
+
+namespace SOS
+{
+    /// <summary>
+    /// Simple trace/logging support.
+    /// </summary>
+    internal sealed class Tracer : Microsoft.SymbolStore.ITracer
+    {
+        readonly bool m_enabled;
+        readonly bool m_enabledVerbose;
+        readonly SymbolReader.WriteLine m_output;
+
+        public Tracer(bool enabled, bool enabledVerbose, SymbolReader.WriteLine output)
+        {
+            m_enabled = enabled;
+            m_enabledVerbose = enabledVerbose;
+            m_output = output;
+        }
+
+        public void WriteLine(string message)
+        {
+            m_output?.Invoke(message);
+        }
+
+        public void WriteLine(string format, params object[] arguments)
+        {
+            WriteLine(string.Format(format, arguments));
+        }
+
+        public void Information(string message)
+        {
+            if (m_enabled)
+            {
+                m_output?.Invoke(message);
+            }
+        }
+
+        public void Information(string format, params object[] arguments)
+        {
+            if (m_enabled)
+            {
+                WriteLine(format, arguments);
+            }
+        }
+
+        public void Warning(string message)
+        {
+            if (m_enabled)
+            {
+                WriteLine("WARNING: " + message); 
+            }
+        }
+            
+        public void Warning(string format, params object[] arguments)
+        {
+            if (m_enabled)
+            {
+                WriteLine("WARNING: " + format, arguments);
+            }
+        }
+
+        public void Error(string message)
+        {
+            WriteLine("ERROR: " + message);
+        }
+
+        public void Error(string format, params object[] arguments)
+        {
+            WriteLine("ERROR: " + format, arguments);
+        }
+
+        public void Verbose(string message)
+        {
+            if (m_enabledVerbose)
+            {
+                WriteLine(message);
+            }
+        }
+
+        public void Verbose(string format, params object[] arguments)
+        {
+            if (m_enabledVerbose)
+            {
+                WriteLine(format, arguments);
+            }
+        }
+    }
+}
index de9a1b644d5845b4d689970c9fbd036905708b0a..17ce8cacbaa2e436f266ae921eb70d246e42071f 100644 (file)
@@ -55,6 +55,7 @@ if(WIN32)
     exts.cpp
     gchist.cpp
     gcroot.cpp
+    hostcoreclr.cpp
     metadata.cpp
     sildasm.cpp
     sos.cpp
@@ -109,6 +110,7 @@ else(WIN32)
     exts.cpp
     gchist.cpp
     gcroot.cpp
+    hostcoreclr.cpp
     metadata.cpp
     sildasm.cpp
     stressLogDump.cpp
diff --git a/src/SOS/Strike/Strike.vcxproj b/src/SOS/Strike/Strike.vcxproj
new file mode 100644 (file)
index 0000000..ca82bf2
--- /dev/null
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Checked|x64">
+      <Configuration>Checked</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="RelWithDebInfo|x64">
+      <Configuration>RelWithDebInfo</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{41F59D85-FC36-3015-861B-F177863252BC}</ProjectGuid>
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+    <Keyword>Win32Proj</Keyword>
+    <Platform>x64</Platform>
+    <ProjectName>Strike</ProjectName>
+    <VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sos.dir\Debug\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sos</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.dll</TargetExt>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Checked\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">sos.dir\Checked\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">sos</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">.dll</TargetExt>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">false</LinkIncremental>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">false</GenerateManifest>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sos.dir\Release\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sos</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.dll</TargetExt>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\RelWithDebInfo\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">sos.dir\RelWithDebInfo\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">sos</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">.dll</TargetExt>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</LinkIncremental>
+    <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</GenerateManifest>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams</AdditionalOptions>
+      <AssemblerListingLocation>Debug/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>Disabled</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>FEATURE_PAL;DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Debug";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR=\"Debug\";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Debug";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>..\..\inc\Debug\corguids.lib;..\debugshim\Debug\debugshim.lib;..\dbgutil\Debug\dbgutil.lib;libcmtd.lib;libcpmtd.lib;libvcruntimed.lib;kernel32.lib;user32.lib;ole32.lib;oleaut32.lib;dbghelp.lib;uuid.lib;version.lib;dbgeng.lib;advapi32.lib;psapi.lib;ntdll.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /NOVCFEATURE</AdditionalOptions>
+      <DataExecutionPrevention>true</DataExecutionPrevention>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <ImportLibrary>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Debug/sos.lib</ImportLibrary>
+      <LargeAddressAware>true</LargeAddressAware>
+      <ModuleDefinitionFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def</ModuleDefinitionFile>
+      <ProgramDataBaseFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Debug/sos.pdb</ProgramDataBaseFile>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <SubSystem>Console</SubSystem>
+      <Version>
+      </Version>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Checked/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Checked";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR=\"Checked\";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Checked";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>..\..\inc\Checked\corguids.lib;..\debugshim\Checked\debugshim.lib;..\dbgutil\Checked\dbgutil.lib;libcmtd.lib;libcpmtd.lib;libvcruntimed.lib;kernel32.lib;user32.lib;ole32.lib;oleaut32.lib;dbghelp.lib;uuid.lib;version.lib;dbgeng.lib;advapi32.lib;psapi.lib;ntdll.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /NOVCFEATURE</AdditionalOptions>
+      <DataExecutionPrevention>true</DataExecutionPrevention>
+      <EnableCOMDATFolding>false</EnableCOMDATFolding>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <ImportLibrary>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Checked/sos.lib</ImportLibrary>
+      <LargeAddressAware>true</LargeAddressAware>
+      <ModuleDefinitionFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def</ModuleDefinitionFile>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ProgramDataBaseFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Checked/sos.pdb</ProgramDataBaseFile>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <SubSystem>Console</SubSystem>
+      <Version>
+      </Version>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Release/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Release";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR=\"Release\";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike;..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="Release";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>..\..\inc\Release\corguids.lib;..\debugshim\Release\debugshim.lib;..\dbgutil\Release\dbgutil.lib;libcmt.lib;libcpmt.lib;libvcruntime.lib;kernel32.lib;user32.lib;ole32.lib;oleaut32.lib;dbghelp.lib;uuid.lib;version.lib;dbgeng.lib;advapi32.lib;psapi.lib;ntdll.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /DEFAULTLIB:ucrt.lib</AdditionalOptions>
+      <DataExecutionPrevention>true</DataExecutionPrevention>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <IgnoreSpecificDefaultLibraries>libucrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <ImportLibrary>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Release/sos.lib</ImportLibrary>
+      <LargeAddressAware>true</LargeAddressAware>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def</ModuleDefinitionFile>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ProgramDataBaseFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Release/sos.pdb</ProgramDataBaseFile>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <SubSystem>Console</SubSystem>
+      <Version>
+      </Version>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>RelWithDebInfo/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="RelWithDebInfo";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR=\"RelWithDebInfo\";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;_TARGET_WIN64_=1;SOS_TARGET_AMD64=1;SOS_TARGET_ARM64=1;STRIKE;USE_STL;FX_VER_INTERNALNAME_STR=SOS.dll;CMAKE_INTDIR="RelWithDebInfo";sos_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>Strike;..\..\pal\prebuilt\inc;..\..\inc;..\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Link>
+      <AdditionalDependencies>..\..\inc\RelWithDebInfo\corguids.lib;..\debugshim\RelWithDebInfo\debugshim.lib;..\dbgutil\RelWithDebInfo\dbgutil.lib;libcmt.lib;libcpmt.lib;libvcruntime.lib;kernel32.lib;user32.lib;ole32.lib;oleaut32.lib;dbghelp.lib;uuid.lib;version.lib;dbgeng.lib;advapi32.lib;psapi.lib;ntdll.lib</AdditionalDependencies>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /DEFAULTLIB:ucrt.lib</AdditionalOptions>
+      <DataExecutionPrevention>true</DataExecutionPrevention>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <IgnoreSpecificDefaultLibraries>libucrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+      <ImportLibrary>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/RelWithDebInfo/sos.lib</ImportLibrary>
+      <LargeAddressAware>true</LargeAddressAware>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>sos.def</ModuleDefinitionFile>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ProgramDataBaseFile>C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/RelWithDebInfo/sos.pdb</ProgramDataBaseFile>
+      <RandomizedBaseAddress>true</RandomizedBaseAddress>
+      <SubSystem>Console</SubSystem>
+      <Version>
+      </Version>
+    </Link>
+    <ProjectReference>
+      <LinkLibraryDependencies>false</LinkLibraryDependencies>
+    </ProjectReference>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="disasm.cpp" />
+    <ClCompile Include="datatarget.cpp" />
+    <ClCompile Include="dllsext.cpp" />
+    <ClCompile Include="eeheap.cpp" />
+    <ClCompile Include="EventCallbacks.cpp" />
+    <ClCompile Include="ExpressionNode.cpp" />
+    <ClCompile Include="exts.cpp" />
+    <ClCompile Include="gchist.cpp" />
+    <ClCompile Include="gcroot.cpp" />
+    <ClCompile Include="metadata.cpp" />
+    <ClCompile Include="sildasm.cpp" />
+    <ClCompile Include="sos.cpp" />
+    <ClCompile Include="stressLogDump.cpp" />
+    <ClCompile Include="strike.cpp" />
+    <ClCompile Include="util.cpp" />
+    <ClCompile Include="vm.cpp" />
+    <ClCompile Include="WatchCmd.cpp" />
+    <ClCompile Include="hostcoreclr.cpp" />
+    <None Include="sos_unixexports.src" />
+    <ResourceCompile Include="Native.rc" />
+    <ClCompile Include="disasmX86.cpp" />
+    <ClCompile Include="disasmARM64.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="data.h" />
+    <ClInclude Include="datatarget.h" />
+    <ClInclude Include="disasm.h" />
+    <ClInclude Include="EventCallbacks.h" />
+    <ClInclude Include="ExpressionNode.h" />
+    <ClInclude Include="exts.h" />
+    <ClInclude Include="hostcoreclr.h" />
+    <ClInclude Include="inc\dbgeng.h" />
+    <ClInclude Include="inc\dbghelp.h" />
+    <ClInclude Include="inc\wdbgexts.h" />
+    <ClInclude Include="ntinfo.h" />
+    <ClInclude Include="platformspecific.h" />
+    <ClInclude Include="sos.h" />
+    <ClInclude Include="sos_md.h" />
+    <ClInclude Include="sos_stacktrace.h" />
+    <ClInclude Include="strike.h" />
+    <ClInclude Include="util.h" />
+    <ClInclude Include="UtilCode.h" />
+    <ClInclude Include="WatchCmd.h" />
+    <ClInclude Include="xplat\dbgeng.h" />
+    <ClInclude Include="xplat\dbghelp.h" />
+    <ClInclude Include="xplat\wdbgexts.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="CMakeLists.txt" />
+    <Text Include="sosdocs.txt" />
+    <Text Include="sosdocsunix.txt" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/src/SOS/Strike/Strike.vcxproj.filters b/src/SOS/Strike/Strike.vcxproj.filters
new file mode 100644 (file)
index 0000000..cd5bb75
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="disasm.cpp" />
+    <ClCompile Include="datatarget.cpp" />
+    <ClCompile Include="dllsext.cpp" />
+    <ClCompile Include="eeheap.cpp" />
+    <ClCompile Include="EventCallbacks.cpp" />
+    <ClCompile Include="ExpressionNode.cpp" />
+    <ClCompile Include="exts.cpp" />
+    <ClCompile Include="gchist.cpp" />
+    <ClCompile Include="gcroot.cpp" />
+    <ClCompile Include="metadata.cpp" />
+    <ClCompile Include="sildasm.cpp" />
+    <ClCompile Include="sos.cpp" />
+    <ClCompile Include="stressLogDump.cpp" />
+    <ClCompile Include="strike.cpp" />
+    <ClCompile Include="util.cpp" />
+    <ClCompile Include="vm.cpp" />
+    <ClCompile Include="WatchCmd.cpp" />
+    <ClCompile Include="disasmX86.cpp" />
+    <ClCompile Include="disasmARM64.cpp" />
+    <ClCompile Include="hostcoreclr.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="data.h" />
+    <ClInclude Include="datatarget.h" />
+    <ClInclude Include="disasm.h" />
+    <ClInclude Include="EventCallbacks.h" />
+    <ClInclude Include="ExpressionNode.h" />
+    <ClInclude Include="exts.h" />
+    <ClInclude Include="ntinfo.h" />
+    <ClInclude Include="platformspecific.h" />
+    <ClInclude Include="sos.h" />
+    <ClInclude Include="sos_md.h" />
+    <ClInclude Include="sos_stacktrace.h" />
+    <ClInclude Include="strike.h" />
+    <ClInclude Include="util.h" />
+    <ClInclude Include="UtilCode.h" />
+    <ClInclude Include="WatchCmd.h" />
+    <ClInclude Include="xplat\dbgeng.h">
+      <Filter>xplat</Filter>
+    </ClInclude>
+    <ClInclude Include="xplat\dbghelp.h">
+      <Filter>xplat</Filter>
+    </ClInclude>
+    <ClInclude Include="xplat\wdbgexts.h">
+      <Filter>xplat</Filter>
+    </ClInclude>
+    <ClInclude Include="inc\dbgeng.h">
+      <Filter>inc</Filter>
+    </ClInclude>
+    <ClInclude Include="inc\dbghelp.h">
+      <Filter>inc</Filter>
+    </ClInclude>
+    <ClInclude Include="inc\wdbgexts.h">
+      <Filter>inc</Filter>
+    </ClInclude>
+    <ClInclude Include="hostcoreclr.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="Native.rc" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="sos_unixexports.src" />
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="xplat">
+      <UniqueIdentifier>{b766b3f8-a753-4134-bf7f-50c4f05b59b1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="inc">
+      <UniqueIdentifier>{406edc67-c8c4-4f19-ad39-c799a63f4c2a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="CMakeLists.txt" />
+    <Text Include="sosdocs.txt" />
+    <Text Include="sosdocsunix.txt" />
+  </ItemGroup>
+</Project>
\ No newline at end of file
index fdf63b06628d59730b6c6fca5fd87d2046f68705..049faa7fd0abe5359785dad3120ac2b386687ca9 100644 (file)
@@ -200,19 +200,19 @@ DataTarget::GetThreadContext(
     hr = g_ExtSystem->GetCurrentThreadId(&ulThreadIDOrig);
     if (FAILED(hr))
     {
-       return hr;
+        return hr;
     }
 
     hr = g_ExtSystem->GetThreadIdBySystemId(threadID, &ulThreadIDRequested);
     if (FAILED(hr))
     {
-       return hr;
+        return hr;
     }
 
     hr = g_ExtSystem->SetCurrentThreadId(ulThreadIDRequested);
     if (FAILED(hr))
     {
-       return hr;
+        return hr;
     }
 
     // Prepare context structure
index 15cb26ab0e53b59adb17dd4d3134f2e363416a73..4f5d97dc33e591e5617e92143f59bd2fbb8ecf51 100644 (file)
@@ -42,6 +42,7 @@ PDEBUG_CLIENT         g_pCallbacksClient;
 
 DebugClient*          g_DebugClient;
 ILLDBServices*        g_ExtServices;    
+bool                  g_palInitialized = false;
 
 #endif // FEATURE_PAL
 
@@ -72,6 +73,15 @@ ExtQuery(PDEBUG_CLIENT client)
 extern "C" HRESULT
 ExtQuery(ILLDBServices* services)
 {
+    // Initialize the PAL in one place and only once.
+    if (!g_palInitialized)
+    {
+        if (PAL_InitializeDLL() != 0)
+        {
+            return E_FAIL;
+        }
+        g_palInitialized = true;
+    }
     g_ExtServices = services;
     DebugClient* client = new DebugClient(services);
     g_DebugClient = client;
diff --git a/src/SOS/Strike/hostcoreclr.cpp b/src/SOS/Strike/hostcoreclr.cpp
new file mode 100644 (file)
index 0000000..e4f2968
--- /dev/null
@@ -0,0 +1,960 @@
+// 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.
+
+// ==++==
+// 
+
+// 
+// ==--==
+#include "sos.h"
+#include "disasm.h"
+#include <dbghelp.h>
+
+#include "corhdr.h"
+#include "cor.h"
+#include "dacprivate.h"
+#include "sospriv.h"
+#include "corerror.h"
+#include "safemath.h"
+
+#include <psapi.h>
+#include <tchar.h>
+#include <limits.h>
+
+#ifdef FEATURE_PAL
+#include <sys/stat.h>
+#include <dlfcn.h>
+#endif // !FEATURE_PAL
+
+#include <coreclrhost.h>
+#include <set>
+#include <string>
+
+#if defined(__APPLE__)
+#include <mach-o/dyld.h>
+#endif
+
+#ifndef IfFailRet
+#define IfFailRet(EXPR) do { Status = (EXPR); if(FAILED(Status)) { return (Status); } } while (0)
+#endif
+
+static bool g_hostingInitialized = false;
+static bool g_symbolStoreInitialized = false;
+LPCSTR g_hostRuntimeDirectory = nullptr;
+SOSNetCoreCallbacks g_SOSNetCoreCallbacks;
+
+#ifdef FEATURE_PAL
+#define TPALIST_SEPARATOR_STR_A ":"
+#else
+#define TPALIST_SEPARATOR_STR_A ";"
+#endif
+
+void AddFilesFromDirectoryToTpaList(const char* directory, std::string& tpaList)
+{
+    const char * const tpaExtensions[] = {
+        "*.ni.dll",      // Probe for .ni.dll first so that it's preferred if ni and il coexist in the same dir
+        "*.dll",
+    };
+    std::set<std::string> addedAssemblies;
+
+    // Don't add this file to the list because we don't want to the one from the hosting runtime
+    addedAssemblies.insert(SymbolReaderDllName);
+
+    // Walk the directory for each extension separately so that we first get files with .ni.dll extension,
+    // then files with .dll extension, etc.
+    for (int extIndex = 0; extIndex < sizeof(tpaExtensions) / sizeof(tpaExtensions[0]); extIndex++)
+    {
+        const char* ext = tpaExtensions[extIndex];
+        size_t extLength = strlen(ext) - 1;         // don't count the "*"
+
+        std::string assemblyPath(directory);
+        assemblyPath.append(DIRECTORY_SEPARATOR_STR_A);
+        assemblyPath.append(tpaExtensions[extIndex]);
+
+        WIN32_FIND_DATAA data;
+        HANDLE findHandle = FindFirstFileA(assemblyPath.c_str(), &data);
+
+        if (findHandle != INVALID_HANDLE_VALUE) 
+        {
+            do
+            {
+                if (!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+                {
+
+                    std::string filename(data.cFileName);
+                    size_t extPos = filename.length() - extLength;
+                    std::string filenameWithoutExt(filename.substr(0, extPos));
+
+                    // Make sure if we have an assembly with multiple extensions present,
+                    // we insert only one version of it.
+                    if (addedAssemblies.find(filenameWithoutExt) == addedAssemblies.end())
+                    {
+                        addedAssemblies.insert(filenameWithoutExt);
+
+                        tpaList.append(directory);
+                        tpaList.append(DIRECTORY_SEPARATOR_STR_A);
+                        tpaList.append(filename);
+                        tpaList.append(TPALIST_SEPARATOR_STR_A);
+                    }
+                }
+            } 
+            while (0 != FindNextFileA(findHandle, &data));
+
+            FindClose(findHandle);
+        }
+    }
+}
+
+#ifdef FEATURE_PAL
+
+#if defined(__linux__)
+#define symlinkEntrypointExecutable "/proc/self/exe"
+#elif !defined(__APPLE__)
+#define symlinkEntrypointExecutable "/proc/curproc/exe"
+#endif
+
+bool GetAbsolutePath(const char* path, std::string& absolutePath)
+{
+    bool result = false;
+
+    char realPath[PATH_MAX];
+    if (realpath(path, realPath) != nullptr && realPath[0] != '\0')
+    {
+        absolutePath.assign(realPath);
+        // realpath should return canonicalized path without the trailing slash
+        assert(absolutePath.back() != '/');
+
+        result = true;
+    }
+
+    return result;
+}
+
+bool GetEntrypointExecutableAbsolutePath(std::string& entrypointExecutable)
+{
+    bool result = false;
+    
+    entrypointExecutable.clear();
+
+    // Get path to the executable for the current process using
+    // platform specific means.
+#if defined(__APPLE__)
+    
+    // On Mac, we ask the OS for the absolute path to the entrypoint executable
+    uint32_t lenActualPath = 0;
+    if (_NSGetExecutablePath(nullptr, &lenActualPath) == -1)
+    {
+        // OSX has placed the actual path length in lenActualPath,
+        // so re-attempt the operation
+        std::string resizedPath(lenActualPath, '\0');
+        char *pResizedPath = const_cast<char *>(resizedPath.c_str());
+        if (_NSGetExecutablePath(pResizedPath, &lenActualPath) == 0)
+        {
+            entrypointExecutable.assign(pResizedPath);
+            result = true;
+        }
+    }
+#elif defined (__FreeBSD__)
+    static const int name[] = {
+        CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1
+    };
+    char path[PATH_MAX];
+    size_t len;
+
+    len = sizeof(path);
+    if (sysctl(name, 4, path, &len, nullptr, 0) == 0)
+    {
+        entrypointExecutable.assign(path);
+        result = true;
+    }
+    else
+    {
+        // ENOMEM
+        result = false;
+    }
+#elif defined(__NetBSD__) && defined(KERN_PROC_PATHNAME)
+    static const int name[] = {
+        CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME,
+    };
+    char path[MAXPATHLEN];
+    size_t len;
+
+    len = sizeof(path);
+    if (sysctl(name, __arraycount(name), path, &len, NULL, 0) != -1)
+    {
+        entrypointExecutable.assign(path);
+        result = true;
+    }
+    else
+    {
+        result = false;
+    }
+#else
+    // On other OSs, return the symlink that will be resolved by GetAbsolutePath
+    // to fetch the entrypoint EXE absolute path, inclusive of filename.
+    result = GetAbsolutePath(symlinkEntrypointExecutable, entrypointExecutable);
+#endif 
+
+    return result;
+}
+
+#else // FEATURE_PAL
+
+bool GetEntrypointExecutableAbsolutePath(std::string& entrypointExecutable)
+{
+    ArrayHolder<char> hostPath = new char[MAX_LONGPATH+1];
+    if (::GetModuleFileName(NULL, hostPath, MAX_LONGPATH) == 0)
+    {
+        return false;
+    }
+
+    entrypointExecutable.clear();
+    entrypointExecutable.append(hostPath);
+
+    return true;
+}
+
+#endif // FEATURE_PAL
+
+HRESULT GetCoreClrDirectory(std::string& coreClrDirectory)
+{
+#ifdef FEATURE_PAL
+    LPCSTR directory = g_ExtServices->GetCoreClrDirectory();
+    if (directory == NULL)
+    {
+        ExtErr("Error: Runtime module (%s) not loaded yet\n", MAKEDLLNAME_A("coreclr"));
+        return E_FAIL;
+    }
+    if (!GetAbsolutePath(directory, coreClrDirectory))
+    {
+        ExtErr("Error: Failed to get coreclr absolute path\n");
+        return E_FAIL;
+    }
+#else
+    ULONG index;
+    HRESULT Status = g_ExtSymbols->GetModuleByModuleName(MAIN_CLR_MODULE_NAME_A, 0, &index, NULL);
+    if (FAILED(Status))
+    {
+        ExtErr("Error: Can't find coreclr module\n");
+        return Status;
+    }
+    ArrayHolder<char> szModuleName = new char[MAX_LONGPATH + 1];
+    Status = g_ExtSymbols->GetModuleNames(index, 0, szModuleName, MAX_LONGPATH, NULL, NULL, 0, NULL, NULL, 0, NULL);
+    if (FAILED(Status))
+    {
+        ExtErr("Error: Failed to get coreclr module name\n");
+        return Status;
+    }
+    coreClrDirectory = szModuleName;
+
+    // Parse off the module name to get just the path
+    size_t lastSlash = coreClrDirectory.rfind(DIRECTORY_SEPARATOR_CHAR_A);
+    if (lastSlash == std::string::npos)
+    {
+        ExtErr("Error: Failed to parse coreclr module name\n");
+        return E_FAIL;
+    }
+    coreClrDirectory.assign(coreClrDirectory, 0, lastSlash);
+#endif
+    return S_OK;
+}
+
+HRESULT GetHostRuntime(std::string& coreClrPath, std::string& hostRuntimeDirectory)
+{
+    // If the hosting runtime isn't already set, use the runtime we are debugging
+    if (g_hostRuntimeDirectory == nullptr)
+    {
+        HRESULT hr = GetCoreClrDirectory(hostRuntimeDirectory);
+        if (FAILED(hr))
+        {
+            return hr;
+        }
+        g_hostRuntimeDirectory = _strdup(hostRuntimeDirectory.c_str());
+    }
+    hostRuntimeDirectory.assign(g_hostRuntimeDirectory);
+    coreClrPath.assign(g_hostRuntimeDirectory);
+    coreClrPath.append(DIRECTORY_SEPARATOR_STR_A);
+    coreClrPath.append(MAIN_CLR_DLL_NAME_A);
+    return S_OK;
+}
+
+BOOL IsHostingInitialized()
+{
+    return g_hostingInitialized;
+}
+
+HRESULT InitializeHosting()
+{
+    if (g_hostingInitialized)
+    {
+        return S_OK;
+    }
+    coreclr_initialize_ptr initializeCoreCLR = nullptr;
+    coreclr_create_delegate_ptr createDelegate = nullptr;
+    std::string hostRuntimeDirectory;
+    std::string sosModuleDirectory;
+    std::string coreClrPath;
+
+    HRESULT Status = GetHostRuntime(coreClrPath, hostRuntimeDirectory);
+    if (FAILED(Status))
+    {
+        return Status;
+    }
+#ifdef FEATURE_PAL
+    ArrayHolder<char> szSOSModulePath = new char[MAX_LONGPATH + 1];
+    UINT cch = MAX_LONGPATH;
+    if (!PAL_GetPALDirectoryA(szSOSModulePath, &cch)) {
+        ExtErr("Error: Failed to get SOS module directory\n");
+        return E_FAIL;
+    }
+    sosModuleDirectory = szSOSModulePath;
+
+    void* coreclrLib = dlopen(coreClrPath.c_str(), RTLD_NOW | RTLD_LOCAL);
+    if (coreclrLib == nullptr)
+    {
+        ExtErr("Error: Failed to load %s\n", coreClrPath.c_str());
+        return E_FAIL;
+    }
+    initializeCoreCLR = (coreclr_initialize_ptr)dlsym(coreclrLib, "coreclr_initialize");
+    createDelegate = (coreclr_create_delegate_ptr)dlsym(coreclrLib, "coreclr_create_delegate");
+#else
+    ArrayHolder<char> szSOSModulePath = new char[MAX_LONGPATH + 1];
+    if (GetModuleFileNameA(g_hInstance, szSOSModulePath, MAX_LONGPATH) == 0)
+    {
+        ExtErr("Error: Failed to get SOS module directory\n");
+        return E_FAIL;
+    }
+    sosModuleDirectory = szSOSModulePath;
+
+    // Get just the sos module directory
+    size_t lastSlash = sosModuleDirectory.rfind(DIRECTORY_SEPARATOR_CHAR_A);
+    if (lastSlash == std::string::npos)
+    {
+        ExtErr("Error: Failed to parse sos module name\n");
+        return E_FAIL;
+    }
+    sosModuleDirectory.erase(lastSlash);
+
+    HMODULE coreclrLib = LoadLibraryA(coreClrPath.c_str());
+    if (coreclrLib == nullptr)
+    {
+        ExtErr("Error: Failed to load %s\n", coreClrPath.c_str());
+        return E_FAIL;
+    }
+    initializeCoreCLR = (coreclr_initialize_ptr)GetProcAddress(coreclrLib, "coreclr_initialize");
+    createDelegate = (coreclr_create_delegate_ptr)GetProcAddress(coreclrLib, "coreclr_create_delegate");
+#endif // FEATURE_PAL
+
+    if (initializeCoreCLR == nullptr || createDelegate == nullptr)
+    {
+        ExtErr("Error: coreclr_initialize or coreclr_create_delegate not found\n");
+        return E_FAIL;
+    }
+
+    // Trust The SOS managed and dependent assemblies from the sos directory
+    std::string tpaList;
+    AddFilesFromDirectoryToTpaList(sosModuleDirectory.c_str(), tpaList);
+
+    // Trust the runtime assemblies
+    AddFilesFromDirectoryToTpaList(hostRuntimeDirectory.c_str(), tpaList);
+
+    std::string appPaths;
+    appPaths.append(sosModuleDirectory);
+    appPaths.append(TPALIST_SEPARATOR_STR_A);
+    appPaths.append(hostRuntimeDirectory);
+
+    const char *propertyKeys[] = {
+        "TRUSTED_PLATFORM_ASSEMBLIES", "APP_PATHS", "APP_NI_PATHS",
+        "NATIVE_DLL_SEARCH_DIRECTORIES", "AppDomainCompatSwitch"};
+
+    const char *propertyValues[] = {// TRUSTED_PLATFORM_ASSEMBLIES
+                                    tpaList.c_str(),
+                                    // APP_PATHS
+                                    appPaths.c_str(),
+                                    // APP_NI_PATHS
+                                    hostRuntimeDirectory.c_str(),
+                                    // NATIVE_DLL_SEARCH_DIRECTORIES
+                                    appPaths.c_str(),
+                                    // AppDomainCompatSwitch
+                                    "UseLatestBehaviorWhenTFMNotSpecified"};
+
+    std::string entryPointExecutablePath;
+    if (!GetEntrypointExecutableAbsolutePath(entryPointExecutablePath))
+    {
+        ExtErr("Could not get full path to current executable");
+        return E_FAIL;
+    }
+
+    void *hostHandle;
+    unsigned int domainId;
+    Status = initializeCoreCLR(entryPointExecutablePath.c_str(), "sos", 
+        sizeof(propertyKeys) / sizeof(propertyKeys[0]), propertyKeys, propertyValues, &hostHandle, &domainId);
+
+    if (FAILED(Status))
+    {
+        ExtErr("Error: Fail to initialize CoreCLR %08x\n", Status);
+        return Status;
+    }
+
+    //SymbolReaderInitialize initialize;
+    //IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "Initialize", (void **)&initialize));
+    //initialize();
+
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "InitializeSymbolStore", (void **)&g_SOSNetCoreCallbacks.InitializeSymbolStoreDelegate));
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "LoadSymbolsForModule", (void **)&g_SOSNetCoreCallbacks.LoadSymbolsForModuleDelegate));
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "Dispose", (void **)&g_SOSNetCoreCallbacks.DisposeDelegate));
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "ResolveSequencePoint", (void **)&g_SOSNetCoreCallbacks.ResolveSequencePointDelegate));
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetLocalVariableName", (void **)&g_SOSNetCoreCallbacks.GetLocalVariableNameDelegate));
+    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetLineByILOffset", (void **)&g_SOSNetCoreCallbacks.GetLineByILOffsetDelegate));
+
+    g_hostingInitialized = true;
+    return Status;
+}
+
+extern "C" void InitializeSymbolReaderCallbacks(SOSNetCoreCallbacks sosNetCoreCallbacks)
+{
+    g_SOSNetCoreCallbacks = sosNetCoreCallbacks;
+    g_hostingInitialized = true;
+}
+
+static void WriteLineForSymbolStore(const char* message)
+{
+    ExtOut(message);
+    ExtOut("\n");
+}
+
+HRESULT InitializeSymbolStore(BOOL msdl, BOOL symweb, const char* symbolServer, const char* cacheDirectory)
+{
+    HRESULT Status = S_OK;
+
+    IfFailRet(InitializeHosting());
+
+    _ASSERTE(g_SOSNetCoreCallbacks.InitializeSymbolStoreDelegate != nullptr);
+
+    // Only pass the output delegate on Linux (lldb) because on Windows under dbgeng, output from the symbol stores
+    // can deadlock because it can happen on a thread other than the dbgeng main thread.
+    OutputDelegate writeLine = nullptr;
+#ifdef FEATURE_PAL
+    writeLine = WriteLineForSymbolStore;
+#endif
+    if (!g_SOSNetCoreCallbacks.InitializeSymbolStoreDelegate(writeLine, msdl, symweb, symbolServer, cacheDirectory, nullptr))
+    {
+        ExtErr("Error initializing symbol server support\n");
+        return E_FAIL;
+    }
+
+    g_symbolStoreInitialized = true;
+    return S_OK;
+}
+
+HRESULT SymbolReader::LoadSymbols(___in IMetaDataImport* pMD, ___in ICorDebugModule* pModule)
+{
+    HRESULT Status = S_OK;
+    BOOL isDynamic = FALSE;
+    BOOL isInMemory = FALSE;
+    IfFailRet(pModule->IsDynamic(&isDynamic));
+    IfFailRet(pModule->IsInMemory(&isInMemory));
+
+    if (isDynamic)
+    {
+        // Dynamic and in memory assemblies are a special case which we will ignore for now
+        ExtWarn("SOS Warning: Loading symbols for dynamic assemblies is not yet supported\n");
+        return E_FAIL;
+    }
+
+    ULONG64 peAddress = 0;
+    ULONG32 peSize = 0;
+    IfFailRet(pModule->GetBaseAddress(&peAddress));
+    IfFailRet(pModule->GetSize(&peSize));
+
+    ULONG32 len = 0; 
+    WCHAR moduleName[MAX_LONGPATH];
+    IfFailRet(pModule->GetName(_countof(moduleName), &len, moduleName));
+
+#ifndef FEATURE_PAL
+    if (SUCCEEDED(LoadSymbolsForWindowsPDB(pMD, peAddress, moduleName, isInMemory)))
+    {
+        return S_OK;
+    }
+#endif // FEATURE_PAL
+    return LoadSymbolsForPortablePDB(moduleName, isInMemory, isInMemory, peAddress, peSize, 0, 0);
+}
+
+HRESULT SymbolReader::LoadSymbols(___in IMetaDataImport* pMD, ___in IXCLRDataModule* pModule)
+{
+    ULONG32 flags;
+    HRESULT hr = pModule->GetFlags(&flags);
+    if (FAILED(hr)) 
+    {
+        ExtOut("LoadSymbols IXCLRDataModule->GetFlags FAILED 0x%08x\n", hr);
+        return hr;
+    }
+
+    if (flags & CLRDATA_MODULE_IS_DYNAMIC)
+    {
+        ExtWarn("SOS Warning: Loading symbols for dynamic assemblies is not yet supported\n");
+        return E_FAIL;
+    }
+
+    DacpGetModuleData moduleData;
+    hr = moduleData.Request(pModule);
+    if (FAILED(hr))
+    {
+        ExtOut("LoadSymbols moduleData.Request FAILED 0x%08x\n", hr);
+        return hr;
+    }
+
+    ArrayHolder<WCHAR> pModuleName = new WCHAR[MAX_LONGPATH + 1];
+    ULONG32 nameLen = 0;
+    hr = pModule->GetFileName(MAX_LONGPATH, &nameLen, pModuleName);
+    if (FAILED(hr))
+    {
+        ExtOut("LoadSymbols: IXCLRDataModule->GetFileName FAILED 0x%08x\n", hr);
+        return hr;
+    }
+
+#ifndef FEATURE_PAL
+    // TODO: in-memory windows PDB not supported
+    hr = LoadSymbolsForWindowsPDB(pMD, moduleData.LoadedPEAddress, pModuleName, moduleData.IsFileLayout);
+    if (SUCCEEDED(hr))
+    {
+        return hr;
+    }
+#endif // FEATURE_PAL
+
+    return LoadSymbolsForPortablePDB(
+        pModuleName, 
+        moduleData.IsInMemory,
+        moduleData.IsFileLayout,
+        moduleData.LoadedPEAddress,
+        moduleData.LoadedPESize, 
+        moduleData.InMemoryPdbAddress,
+        moduleData.InMemoryPdbSize);
+}
+
+#ifndef FEATURE_PAL
+
+HRESULT SymbolReader::LoadSymbolsForWindowsPDB(___in IMetaDataImport* pMD, ___in ULONG64 peAddress, __in_z WCHAR* pModuleName, ___in BOOL isFileLayout)
+{
+    HRESULT Status = S_OK;
+
+    if (m_pSymReader != NULL) 
+        return S_OK;
+
+    IfFailRet(CoInitialize(NULL));
+
+    // We now need a binder object that will take the module and return a 
+    // reader object
+    ToRelease<ISymUnmanagedBinder3> pSymBinder;
+    if (FAILED(Status = CreateInstanceCustom(CLSID_CorSymBinder_SxS, 
+                        IID_ISymUnmanagedBinder3, 
+                        NATIVE_SYMBOL_READER_DLL,
+                        cciDacColocated|cciDbgPath, 
+                        (void**)&pSymBinder)))
+    {
+        ExtOut("SOS Error: Unable to CoCreateInstance class=CLSID_CorSymBinder_SxS, interface=IID_ISymUnmanagedBinder3, hr=0x%x\n", Status);
+        ExtOut("This usually means SOS was unable to locate a suitable version of DiaSymReader. The dll searched for was '%S'\n", NATIVE_SYMBOL_READER_DLL);
+        return Status;
+    }
+
+    ToRelease<IDebugSymbols3> spSym3(NULL);
+    Status = g_ExtSymbols->QueryInterface(__uuidof(IDebugSymbols3), (void**)&spSym3);
+    if (FAILED(Status))
+    {
+        ExtOut("SOS Error: Unable to query IDebugSymbols3 HRESULT=0x%x.\n", Status);
+        return Status;
+    }
+
+    ULONG pathSize = 0;
+    Status = spSym3->GetSymbolPathWide(NULL, 0, &pathSize);
+    if (FAILED(Status)) //S_FALSE if the path doesn't fit, but if the path was size 0 perhaps we would get S_OK?
+    {
+        ExtOut("SOS Error: Unable to get symbol path length. IDebugSymbols3::GetSymbolPathWide HRESULT=0x%x.\n", Status);
+        return Status;
+    }
+
+    ArrayHolder<WCHAR> symbolPath = new WCHAR[pathSize];
+    Status = spSym3->GetSymbolPathWide(symbolPath, pathSize, NULL);
+    if (S_OK != Status)
+    {
+        ExtOut("SOS Error: Unable to get symbol path. IDebugSymbols3::GetSymbolPathWide HRESULT=0x%x.\n", Status);
+        return Status;
+    }
+
+    ToRelease<IUnknown> pCallback = NULL;
+    if (isFileLayout)
+    {
+        pCallback = (IUnknown*) new PEOffsetMemoryReader(TO_TADDR(peAddress));
+    }
+    else
+    {
+        pCallback = (IUnknown*) new PERvaMemoryReader(TO_TADDR(peAddress));
+    }
+
+    // TODO: this should be better integrated with windbg's symbol lookup
+    Status = pSymBinder->GetReaderFromCallback(pMD, pModuleName, symbolPath, 
+        AllowRegistryAccess | AllowSymbolServerAccess | AllowOriginalPathAccess | AllowReferencePathAccess, pCallback, &m_pSymReader);
+
+    if (FAILED(Status) && m_pSymReader != NULL)
+    {
+        m_pSymReader->Release();
+        m_pSymReader = NULL;
+    }
+    return Status;
+}
+
+#endif // FEATURE_PAL
+
+//
+// Pass to managed helper code to read in-memory PEs/PDBs
+// Returns the number of bytes read.
+//
+int ReadMemoryForSymbols(ULONG64 address, char *buffer, int cb)
+{
+    ULONG read;
+    if (SafeReadMemory(TO_TADDR(address), (PVOID)buffer, cb, &read))
+    {
+        return read;
+    }
+    return 0;
+}
+
+HRESULT SymbolReader::LoadSymbolsForPortablePDB(__in_z WCHAR* pModuleName, ___in BOOL isInMemory, ___in BOOL isFileLayout,
+    ___in ULONG64 peAddress, ___in ULONG64 peSize, ___in ULONG64 inMemoryPdbAddress, ___in ULONG64 inMemoryPdbSize)
+{
+    HRESULT Status = S_OK;
+
+    IfFailRet(InitializeHosting());
+
+    _ASSERTE(g_SOSNetCoreCallbacks.LoadSymbolsForModuleDelegate != nullptr);
+    _ASSERTE(g_SOSNetCoreCallbacks.InitializeSymbolStoreDelegate != nullptr);
+
+#ifndef FEATURE_PAL
+    if (!g_symbolStoreInitialized)
+    {
+        g_symbolStoreInitialized = true;
+
+        ArrayHolder<char> symbolPath = new char[MAX_LONGPATH];
+        if (SUCCEEDED(g_ExtSymbols->GetSymbolPath(symbolPath, MAX_LONGPATH, nullptr)))
+        {
+            if (strlen(symbolPath) > 0)
+            {
+                if (!g_SOSNetCoreCallbacks.InitializeSymbolStoreDelegate(nullptr, false, false, nullptr, nullptr, symbolPath))
+                {
+                    ExtErr("Windows symbol path parsing FAILED\n");
+                }
+            }
+        }
+    }
+#endif
+
+    // The module name needs to be null for in-memory PE's.
+    ArrayHolder<char> szModuleName = nullptr;
+    if (!isInMemory && pModuleName != nullptr)
+    {
+        szModuleName = new char[MAX_LONGPATH];
+        if (WideCharToMultiByte(CP_ACP, 0, pModuleName, (int)(_wcslen(pModuleName) + 1), szModuleName, MAX_LONGPATH, NULL, NULL) == 0)
+        {
+            return E_FAIL;
+        }
+    }
+
+    m_symbolReaderHandle = g_SOSNetCoreCallbacks.LoadSymbolsForModuleDelegate(szModuleName, isFileLayout, peAddress, 
+        (int)peSize, inMemoryPdbAddress, (int)inMemoryPdbSize, ReadMemoryForSymbols);
+
+    if (m_symbolReaderHandle == 0)
+    {
+        return E_FAIL;
+    }
+
+    return Status;
+}
+
+HRESULT SymbolReader::GetLineByILOffset(___in mdMethodDef methodToken, ___in ULONG64 ilOffset,
+    ___out ULONG *pLinenum, __out_ecount(cchFileName) WCHAR* pwszFileName, ___in ULONG cchFileName)
+{
+    HRESULT Status = S_OK;
+
+    if (m_symbolReaderHandle != 0)
+    {
+        _ASSERTE(g_hostingInitialized);
+        _ASSERTE(g_SOSNetCoreCallbacks.GetLineByILOffsetDelegate != nullptr);
+
+        BSTR bstrFileName = SysAllocStringLen(0, MAX_LONGPATH);
+        if (bstrFileName == nullptr)
+        {
+            return E_OUTOFMEMORY;
+        }
+        // Source lines with 0xFEEFEE markers are filtered out on the managed side.
+        if ((g_SOSNetCoreCallbacks.GetLineByILOffsetDelegate(m_symbolReaderHandle, methodToken, ilOffset, pLinenum, &bstrFileName) == FALSE) || (*pLinenum == 0))
+        {
+            SysFreeString(bstrFileName);
+            return E_FAIL;
+        }
+        wcscpy_s(pwszFileName, cchFileName, bstrFileName);
+        SysFreeString(bstrFileName);
+        return S_OK;
+    }
+
+#ifndef FEATURE_PAL
+    if (m_pSymReader == NULL)
+        return E_FAIL;
+
+    ToRelease<ISymUnmanagedMethod> pSymMethod(NULL);
+    IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod));
+
+    ULONG32 seqPointCount = 0;
+    IfFailRet(pSymMethod->GetSequencePointCount(&seqPointCount));
+
+    if (seqPointCount == 0)
+        return E_FAIL;
+
+    // allocate memory for the objects to be fetched
+    ArrayHolder<ULONG32> offsets(new ULONG32[seqPointCount]);
+    ArrayHolder<ULONG32> lines(new ULONG32[seqPointCount]);
+    ArrayHolder<ULONG32> columns(new ULONG32[seqPointCount]);
+    ArrayHolder<ULONG32> endlines(new ULONG32[seqPointCount]);
+    ArrayHolder<ULONG32> endcolumns(new ULONG32[seqPointCount]);
+    ArrayHolder<ToRelease<ISymUnmanagedDocument>> documents(new ToRelease<ISymUnmanagedDocument>[seqPointCount]);
+
+    ULONG32 realSeqPointCount = 0;
+    IfFailRet(pSymMethod->GetSequencePoints(seqPointCount, &realSeqPointCount, offsets, &(documents[0]), lines, columns, endlines, endcolumns));
+
+    const ULONG32 HiddenLine = 0x00feefee;
+    int bestSoFar = -1;
+
+    for (int i = 0; i < (int)realSeqPointCount; i++)
+    {
+        if (offsets[i] > ilOffset)
+            break;
+
+        if (lines[i] != HiddenLine)
+            bestSoFar = i;
+    }
+
+    if (bestSoFar != -1)
+    {
+        ULONG32 cchNeeded = 0;
+        IfFailRet(documents[bestSoFar]->GetURL(cchFileName, &cchNeeded, pwszFileName));
+
+        *pLinenum = lines[bestSoFar];
+        return S_OK;
+    }
+#endif // FEATURE_PAL
+
+    return E_FAIL;
+}
+
+HRESULT SymbolReader::GetNamedLocalVariable(___in ISymUnmanagedScope * pScope, ___in ICorDebugILFrame * pILFrame, ___in mdMethodDef methodToken, 
+    ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ICorDebugValue** ppValue)
+{
+    HRESULT Status = S_OK;
+
+    if (m_symbolReaderHandle != 0)
+    {
+        _ASSERTE(g_hostingInitialized);
+        _ASSERTE(g_SOSNetCoreCallbacks.GetLocalVariableNameDelegate != nullptr);
+
+        BSTR wszParamName = SysAllocStringLen(0, mdNameLen);
+        if (wszParamName == NULL)
+        {
+            return E_OUTOFMEMORY;
+        }
+
+        if (g_SOSNetCoreCallbacks.GetLocalVariableNameDelegate(m_symbolReaderHandle, methodToken, localIndex, &wszParamName) == FALSE)
+        {
+            SysFreeString(wszParamName);
+            return E_FAIL;
+        }
+
+        wcscpy_s(paramName, paramNameLen, wszParamName);
+        SysFreeString(wszParamName);
+
+        if (FAILED(pILFrame->GetLocalVariable(localIndex, ppValue)) || (*ppValue == NULL))
+        {
+            *ppValue = NULL;
+            return E_FAIL;
+        }
+        return S_OK;
+    }
+
+#ifndef FEATURE_PAL
+    if (m_pSymReader == NULL)
+        return E_FAIL;
+
+    if (pScope == NULL)
+    {
+        ToRelease<ISymUnmanagedMethod> pSymMethod;
+        IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod));
+
+        ToRelease<ISymUnmanagedScope> pScope;
+        IfFailRet(pSymMethod->GetRootScope(&pScope));
+
+        return GetNamedLocalVariable(pScope, pILFrame, methodToken, localIndex, paramName, paramNameLen, ppValue);
+    }
+    else
+    {
+        ULONG32 numVars = 0;
+        IfFailRet(pScope->GetLocals(0, &numVars, NULL));
+
+        ArrayHolder<ISymUnmanagedVariable*> pLocals = new ISymUnmanagedVariable*[numVars];
+        IfFailRet(pScope->GetLocals(numVars, &numVars, pLocals));
+
+        for (ULONG i = 0; i < numVars; i++)
+        {
+            ULONG32 varIndexInMethod = 0;
+            if (SUCCEEDED(pLocals[i]->GetAddressField1(&varIndexInMethod)))
+            {
+                if (varIndexInMethod != localIndex)
+                    continue;
+
+                ULONG32 nameLen = 0;
+                if (FAILED(pLocals[i]->GetName(paramNameLen, &nameLen, paramName)))
+                        swprintf_s(paramName, paramNameLen, W("local_%d\0"), localIndex);
+
+                if (SUCCEEDED(pILFrame->GetLocalVariable(varIndexInMethod, ppValue)) && (*ppValue != NULL))
+                {
+                    for(ULONG j = 0; j < numVars; j++) pLocals[j]->Release();
+                    return S_OK;
+                }
+                else
+                {
+                    *ppValue = NULL;
+                    for(ULONG j = 0; j < numVars; j++) pLocals[j]->Release();
+                    return E_FAIL;
+                }
+            }
+        }
+
+        ULONG32 numChildren = 0;
+        IfFailRet(pScope->GetChildren(0, &numChildren, NULL));
+
+        ArrayHolder<ISymUnmanagedScope*> pChildren = new ISymUnmanagedScope*[numChildren];
+        IfFailRet(pScope->GetChildren(numChildren, &numChildren, pChildren));
+
+        for (ULONG i = 0; i < numChildren; i++)
+        {
+            if (SUCCEEDED(GetNamedLocalVariable(pChildren[i], pILFrame, methodToken, localIndex, paramName, paramNameLen, ppValue)))
+            {
+                for (ULONG j = 0; j < numChildren; j++) pChildren[j]->Release();
+                return S_OK;
+            }
+        }
+
+        for (ULONG j = 0; j < numChildren; j++) pChildren[j]->Release();
+    }
+#endif // FEATURE_PAL
+
+    return E_FAIL;
+}
+
+HRESULT SymbolReader::GetNamedLocalVariable(___in ICorDebugFrame * pFrame, ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, 
+    ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue)
+{
+    HRESULT Status = S_OK;
+
+    *ppValue = NULL;
+    paramName[0] = L'\0';
+
+    ToRelease<ICorDebugILFrame> pILFrame;
+    IfFailRet(pFrame->QueryInterface(IID_ICorDebugILFrame, (LPVOID*) &pILFrame));
+
+    ToRelease<ICorDebugFunction> pFunction;
+    IfFailRet(pFrame->GetFunction(&pFunction));
+
+    mdMethodDef methodDef;
+    ToRelease<ICorDebugClass> pClass;
+    ToRelease<ICorDebugModule> pModule;
+    IfFailRet(pFunction->GetClass(&pClass));
+    IfFailRet(pFunction->GetModule(&pModule));
+    IfFailRet(pFunction->GetToken(&methodDef));
+
+    return GetNamedLocalVariable(NULL, pILFrame, methodDef, localIndex, paramName, paramNameLen, ppValue);
+}
+
+HRESULT SymbolReader::ResolveSequencePoint(__in_z WCHAR* pFilename, ___in ULONG32 lineNumber, ___in TADDR mod, ___out mdMethodDef* pToken, ___out ULONG32* pIlOffset)
+{
+    HRESULT Status = S_OK;
+
+    if (m_symbolReaderHandle != 0)
+    {
+        _ASSERTE(g_hostingInitialized);
+        _ASSERTE(g_SOSNetCoreCallbacks.ResolveSequencePointDelegate != nullptr);
+
+        char szName[mdNameLen];
+        if (WideCharToMultiByte(CP_ACP, 0, pFilename, (int)(_wcslen(pFilename) + 1), szName, mdNameLen, NULL, NULL) == 0)
+        { 
+            return E_FAIL;
+        }
+        if (g_SOSNetCoreCallbacks.ResolveSequencePointDelegate(m_symbolReaderHandle, szName, lineNumber, pToken, pIlOffset) == FALSE)
+        {
+            return E_FAIL;
+        }
+        return S_OK;
+    }
+
+#ifndef FEATURE_PAL
+    if (m_pSymReader == NULL)
+        return E_FAIL;
+
+    ULONG32 cDocs = 0;
+    ULONG32 cDocsNeeded = 0;
+    ArrayHolder<ToRelease<ISymUnmanagedDocument>> pDocs = NULL;
+
+    IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, NULL));
+    pDocs = new ToRelease<ISymUnmanagedDocument>[cDocsNeeded];
+    cDocs = cDocsNeeded;
+    IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, &(pDocs[0])));
+
+    ULONG32 filenameLen = (ULONG32) _wcslen(pFilename);
+
+    for (ULONG32 i = 0; i < cDocs; i++)
+    {
+        ULONG32 cchUrl = 0;
+        ULONG32 cchUrlNeeded = 0;
+        ArrayHolder<WCHAR> pUrl = NULL;
+        IfFailRet(pDocs[i]->GetURL(cchUrl, &cchUrlNeeded, pUrl));
+        pUrl = new WCHAR[cchUrlNeeded];
+        cchUrl = cchUrlNeeded;
+        IfFailRet(pDocs[i]->GetURL(cchUrl, &cchUrlNeeded, pUrl));
+
+        // If the URL is exactly as long as the filename then compare the two names directly
+        if (cchUrl-1 == filenameLen)
+        {
+            if (0!=_wcsicmp(pUrl, pFilename))
+                continue;
+        }
+        // does the URL suffix match [back]slash + filename?
+        else if (cchUrl-1 > filenameLen)
+        {
+            WCHAR* slashLocation = pUrl + (cchUrl - filenameLen - 2);
+            if (*slashLocation != L'\\' && *slashLocation != L'/')
+                continue;
+            if (0 != _wcsicmp(slashLocation+1, pFilename))
+                continue;
+        }
+        // URL is too short to match
+        else
+            continue;
+
+        ULONG32 closestLine = 0;
+        if (FAILED(pDocs[i]->FindClosestLine(lineNumber, &closestLine)))
+            continue;
+
+        ToRelease<ISymUnmanagedMethod> pSymUnmanagedMethod;
+        IfFailRet(m_pSymReader->GetMethodFromDocumentPosition(pDocs[i], closestLine, 0, &pSymUnmanagedMethod));
+        IfFailRet(pSymUnmanagedMethod->GetToken(pToken));
+        IfFailRet(pSymUnmanagedMethod->GetOffset(pDocs[i], closestLine, 0, pIlOffset));
+
+        // If this IL 
+        if (*pIlOffset == -1)
+        {
+            return E_FAIL;
+        }
+        return S_OK;
+    }
+#endif // FEATURE_PAL
+
+    return E_FAIL;
+}
diff --git a/src/SOS/Strike/hostcoreclr.h b/src/SOS/Strike/hostcoreclr.h
new file mode 100644 (file)
index 0000000..967c61c
--- /dev/null
@@ -0,0 +1,98 @@
+// 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.
+
+// ==++==
+// 
+// 
+// ==--==
+#ifndef __hostcoreclr_h__
+#define __hostcoreclr_h__
+
+static const char *SymbolReaderDllName = "SOS.NETCore";
+static const char *SymbolReaderClassName = "SOS.SymbolReader";
+
+typedef void (*OutputDelegate)(const char*);
+typedef  int (*ReadMemoryDelegate)(ULONG64, char *, int);
+
+typedef void (*SymbolReaderInitialize)();
+typedef  BOOL (*InitializeSymbolStoreDelegate)(OutputDelegate, BOOL, BOOL, const char*, const char*, const char*);
+typedef  PVOID (*LoadSymbolsForModuleDelegate)(const char*, BOOL, ULONG64, int, ULONG64, int, ReadMemoryDelegate);
+typedef  void (*DisposeDelegate)(PVOID);
+typedef  BOOL (*ResolveSequencePointDelegate)(PVOID, const char*, unsigned int, unsigned int*, unsigned int*);
+typedef  BOOL (*GetLocalVariableNameDelegate)(PVOID, int, int, BSTR*);
+typedef  BOOL (*GetLineByILOffsetDelegate)(PVOID, mdMethodDef, ULONG64, ULONG *, BSTR*);
+
+struct SOSNetCoreCallbacks
+{
+    InitializeSymbolStoreDelegate InitializeSymbolStoreDelegate;
+    LoadSymbolsForModuleDelegate LoadSymbolsForModuleDelegate;
+    DisposeDelegate DisposeDelegate;
+    ResolveSequencePointDelegate ResolveSequencePointDelegate;
+    GetLineByILOffsetDelegate GetLineByILOffsetDelegate;
+    GetLocalVariableNameDelegate GetLocalVariableNameDelegate;
+};
+
+extern HMODULE g_hInstance;
+extern LPCSTR g_hostRuntimeDirectory;
+extern SOSNetCoreCallbacks g_SOSNetCoreCallbacks;
+
+extern BOOL IsHostingInitialized();
+extern HRESULT InitializeHosting();
+extern HRESULT InitializeSymbolStore(BOOL, BOOL, const char*, const char*);
+
+class SymbolReader
+{
+private:
+#ifndef FEATURE_PAL
+    ISymUnmanagedReader* m_pSymReader;
+#endif
+    PVOID m_symbolReaderHandle;
+
+    HRESULT GetNamedLocalVariable(___in ISymUnmanagedScope* pScope, ___in ICorDebugILFrame* pILFrame, ___in mdMethodDef methodToken, ___in ULONG localIndex, 
+        __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue);
+    HRESULT LoadSymbolsForWindowsPDB(___in IMetaDataImport* pMD, ___in ULONG64 peAddress, __in_z WCHAR* pModuleName, ___in BOOL isFileLayout);
+    HRESULT LoadSymbolsForPortablePDB(__in_z WCHAR* pModuleName, ___in BOOL isInMemory, ___in BOOL isFileLayout, ___in ULONG64 peAddress, ___in ULONG64 peSize, 
+        ___in ULONG64 inMemoryPdbAddress, ___in ULONG64 inMemoryPdbSize);
+
+public:
+    SymbolReader()
+    {
+#ifndef FEATURE_PAL
+        m_pSymReader = NULL;
+#endif
+        m_symbolReaderHandle = 0;
+    }
+
+    ~SymbolReader()
+    {
+#ifndef FEATURE_PAL
+        if(m_pSymReader != NULL)
+        {
+            m_pSymReader->Release();
+            m_pSymReader = NULL;
+        }
+#endif
+        if (m_symbolReaderHandle != 0)
+        {
+            g_SOSNetCoreCallbacks.DisposeDelegate(m_symbolReaderHandle);
+            m_symbolReaderHandle = 0;
+        }
+    }
+
+    HRESULT LoadSymbols(___in IMetaDataImport* pMD, ___in ICorDebugModule* pModule);
+    HRESULT LoadSymbols(___in IMetaDataImport* pMD, ___in IXCLRDataModule* pModule);
+    HRESULT GetLineByILOffset(___in mdMethodDef MethodToken, ___in ULONG64 IlOffset, ___out ULONG *pLinenum, __out_ecount(cchFileName) WCHAR* pwszFileName, ___in ULONG cchFileName);
+    HRESULT GetNamedLocalVariable(___in ICorDebugFrame * pFrame, ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue);
+    HRESULT ResolveSequencePoint(__in_z WCHAR* pFilename, ___in ULONG32 lineNumber, ___in TADDR mod, ___out mdMethodDef* ___out pToken, ___out ULONG32* pIlOffset);
+};
+
+HRESULT
+GetLineByOffset(
+        ___in ULONG64 IP,
+        ___out ULONG *pLinenum,
+        __out_ecount(cchFileName) WCHAR* pwszFileName,
+        ___in ULONG cchFileName);
+
+#endif // __hostcoreclr_h__
index 93aaa518fd7d0d8f7dbfa3aba5cdffa50c4ffda5..dd0d3ea1c61be9f729ccf1f15011ef2ddec7871c 100644 (file)
@@ -126,6 +126,8 @@ EXPORTS
     savemodule=SaveModule
     SetHostRuntime
     sethostruntime=SetHostRuntime
+    SetSymbolServer
+    setsymbolserver=SetSymbolServer
     SOSFlush
     sosflush=SOSFlush
     StopOnException
@@ -231,3 +233,5 @@ EXPORTS
     TraceToCode
     tracetocode=TraceToCode
 #endif
+
+    InitializeSymbolReaderCallbacks
\ No newline at end of file
index 1ecb207439cc2ceeb7728c1ac87734b97a1860e5..000da0345ab2a85ff8551b18e1b2333c8ad4d0d2 100644 (file)
@@ -44,6 +44,7 @@ Name2EE
 PrintException
 StopOnCatch
 SetHostRuntime
+SetSymbolServer
 SOSFlush
 SyncBlk
 Threads
@@ -51,10 +52,5 @@ ThreadState
 Token2EE
 u
 VerifyHeap
-VerifyStackTrace
-    
-_EFN_GetManagedExcepStack
-_EFN_GetManagedExcepStackW
-_EFN_GetManagedObjectFieldInfo    
-_EFN_GetManagedObjectName
-_EFN_StackTrace
+
+InitializeSymbolReaderCallbacks
\ No newline at end of file
index df82d08fbbd3312a3b5ad5a1ee3a82a403d8ccbd..35289e6b342cc23e121097fc6583d6eb75c15c28 100644 (file)
@@ -199,7 +199,6 @@ The arguments in detail:
            5b9a628c  4000001        0         System.Int32   instance        4 x
            5b9a628c  4000002        4         System.Int32   instance        8 y
            5b9a628c  4000003        8         System.Int32   instance       12 z
-
 \\
 
 COMMAND: dumpasync.
@@ -242,7 +241,7 @@ DumpDelegate finds and outputs the one or more method descriptors associated wit
 
 For example:
 
-       0:000> !dumpdelegate
+    (lldb) dumpdelegate
     Target           Method           Name
     000001461bacb0d8 00007ffc5c894b80 ConsoleApp16.Program.InstanceMethod()
     000001461bacb098 00007ffc5c894b68 ConsoleApp16.Program.StaticMethod()
index 04fb66f96f436340182f00762ef2ef8b9d18da5f..bb9406950154c992a8d05f89cf18668314a1bf0f 100644 (file)
@@ -14112,6 +14112,8 @@ static HRESULT DumpMDInfoBuffer(DWORD_PTR dwStartAddr, DWORD Flags, ULONG64 Esp,
 #undef DOAPPEND
 }
 
+#ifndef FEATURE_PAL
+
 BOOL AppendContext(LPVOID pTransitionContexts, size_t maxCount, size_t *pcurCount, size_t uiSizeOfContext,
     CROSS_PLATFORM_CONTEXT *context)
 {
@@ -14421,12 +14423,6 @@ Exit:
     return Status;
 }
 
-#ifdef FEATURE_PAL
-#define PAL_TRY_NAKED PAL_CPP_TRY
-#define PAL_EXCEPT_NAKED(disp) PAL_CPP_CATCH_ALL
-#define PAL_ENDTRY_NAKED PAL_CPP_ENDTRY
-#endif
-
 // TODO: Convert PAL_TRY_NAKED to something that works on the Mac.
 HRESULT CALLBACK ImplementEFNStackTraceTry(
     PDEBUG_CLIENT client,
@@ -14472,7 +14468,6 @@ HRESULT CALLBACK _EFN_StackTrace(
     return Status;
 }
 
-
 BOOL FormatFromRemoteString(DWORD_PTR strObjPointer, __out_ecount(cchString) PWSTR wszBuffer, ULONG cchString)
 {
     BOOL bRet = FALSE;
@@ -14743,6 +14738,7 @@ HRESULT ImplementEFNGetManagedExcepStack(
     return Status;
 }
 
+
 // TODO: Enable this when ImplementEFNStackTraceTry is fixed.
 // This function, like VerifyDAC, exists for the purpose of testing
 // hard-to-get-to SOS APIs.
@@ -14949,8 +14945,6 @@ DECLARE_API(VerifyStackTrace)
     return Status;
 }
 
-#ifndef FEATURE_PAL
-
 // This is an internal-only Apollo extension to de-optimize the code
 DECLARE_API(SuppressJitOptimization)
 {
@@ -15140,6 +15134,8 @@ DECLARE_API(StopOnCatch)
     return S_OK;
 }
 
+#ifndef FEATURE_PAL
+
 // This is an undocumented SOS extension command intended to help test SOS
 // It causes the Dml output to be printed to the console uninterpretted so
 // that a test script can read the commands which are hidden in the markup
@@ -15281,6 +15277,8 @@ _EFN_GetManagedObjectFieldInfo(
     return S_OK;
 }
 
+#endif // FEATURE_PAL
+
 #ifdef FEATURE_PAL
 
 #ifdef CREATE_DUMP_SUPPORTED
@@ -15361,8 +15359,6 @@ DECLARE_API(CreateDump)
 
 #endif // FEATURE_PAL
 
-extern LPCSTR g_hostRuntimeDirectory;
-
 //
 // Sets the .NET Core runtime path to use to run the managed code within SOS/native debugger.
 //
@@ -15382,20 +15378,91 @@ DECLARE_API(SetHostRuntime)
     }
     if (narg > 0)
     {
+        if (IsHostingInitialized()) 
+        {
+            ExtErr("Runtime hosting already initialized %s\n", g_hostRuntimeDirectory);
+            return E_FAIL;
+        }
         if (g_hostRuntimeDirectory != nullptr)
         {
             free((void*)g_hostRuntimeDirectory);
         }
         g_hostRuntimeDirectory = _strdup(hostRuntimeDirectory.data);
     }
-    else 
+    if (g_hostRuntimeDirectory != nullptr)
     {
-        if (g_hostRuntimeDirectory != nullptr)
+        ExtOut("Host runtime path: %s\n", g_hostRuntimeDirectory);
+    }
+    return S_OK;
+}
+
+//
+// Sets the symbol server path.
+//
+DECLARE_API(SetSymbolServer)
+{
+    INIT_API_EXT();
+
+    StringHolder symbolCache;
+    BOOL msdl = FALSE;
+    BOOL symweb = FALSE;
+    CMDOption option[] =
+    {   // name, vptr, type, hasValue
+        {"-cache",  &symbolCache.data, COSTRING, FALSE},
+        {"-ms",   &msdl, COBOOL, FALSE},
+#ifndef FEATURE_PAL
+        {"-mi", &symweb, COBOOL, FALSE},
+#endif
+    };
+    StringHolder symbolServer;
+    CMDValue arg[] =
+    {
+        {&symbolServer.data, COSTRING},
+    };
+    size_t narg;
+    if (!GetCMDOption(args, option, _countof(option), arg, _countof(arg), &narg))
+    {
+        return E_FAIL;
+    }
+
+    if (msdl && symweb)
+    {
+        ExtErr("Cannot have both -ms and -mi options\n");
+        return E_FAIL;
+    }
+
+    if ((msdl || symweb) && symbolServer.data != nullptr)
+    {
+        ExtErr("Cannot have -ms or -mi option and a symbol server path\n");
+        return E_FAIL;
+    }
+
+    if (msdl || symweb || symbolServer.data != nullptr || symbolCache.data != nullptr)
+    {
+        Status = InitializeSymbolStore(msdl, symweb, symbolServer.data, symbolCache.data);
+        if (FAILED(Status))
         {
-            ExtOut("%s\n", g_hostRuntimeDirectory);
+            return Status;
+        }
+        if (msdl)
+        {
+            ExtOut("Added Microsoft public symbol server\n");
+        }
+        if (symweb)
+        {
+            ExtOut("Added internal symweb symbol server\n");
+        }
+        if (symbolServer.data != nullptr)
+        {
+            ExtOut("Added symbol server: %s\n", symbolServer.data);
+        }
+        if (symbolCache.data != nullptr)
+        {
+            ExtOut("Symbol cache path: %s\n", symbolCache.data);
         }
     }
-    return S_OK;
+    
+    return Status;
 }
 
 void PrintHelp (__in_z LPCSTR pszCmdName)
@@ -15414,13 +15481,6 @@ void PrintHelp (__in_z LPCSTR pszCmdName)
             return;
         }
 #else
-        int err = PAL_InitializeDLL();
-        if(err != 0)
-        {
-            ExtErr("Error initializing PAL\n");
-            return;
-        }
-
         ArrayHolder<char> szSOSModulePath = new char[MAX_LONGPATH + 1];
         UINT cch = MAX_LONGPATH;
         if (!PAL_GetPALDirectoryA(szSOSModulePath, &cch)) {
index 93fff4924b387c9ede091541ca0340bdd40194c1..aae53ea08056e0d4e0dfbdb86d498406883f901f 100644 (file)
@@ -52,13 +52,7 @@ PIMAGEHLP_SYMBOL sym = (PIMAGEHLP_SYMBOL) symBuffer;
 #include <mach-o/dyld.h>
 #endif
 
-LPCSTR g_hostRuntimeDirectory = nullptr;
-LoadSymbolsForModuleDelegate SymbolReader::loadSymbolsForModuleDelegate;
-DisposeDelegate SymbolReader::disposeDelegate;
-ResolveSequencePointDelegate SymbolReader::resolveSequencePointDelegate;
-GetLocalVariableName SymbolReader::getLocalVariableNameDelegate;
-GetLineByILOffsetDelegate SymbolReader::getLineByILOffsetDelegate;
-
+HRESULT InitializeHosting();
 HRESULT GetCoreClrDirectory(std::string& coreClrDirectory);
 
 const char * const CorElementTypeName[ELEMENT_TYPE_MAX]=
@@ -3400,8 +3394,6 @@ BOOL GetEEVersion(VS_FIXEDFILEINFO *pFileInfo)
         DEBUG_ANY_ID, g_moduleInfo[GetEEFlavor()].baseAddr, "\\", pFileInfo, sizeof(VS_FIXEDFILEINFO), NULL) == S_OK;
 }
 
-extern HMODULE g_hInstance;
-
 BOOL GetSOSVersion(VS_FIXEDFILEINFO *pFileInfo)
 {
     _ASSERTE(pFileInfo);
@@ -3955,13 +3947,6 @@ HRESULT LoadClrDebugDll(void)
 
     if (s_clrDataProcess == NULL)
     {
-#ifdef FEATURE_PAL
-        int err = PAL_InitializeDLL();
-        if (err != 0)
-        {
-            return CORDBG_E_UNSUPPORTED;
-        }
-#endif // FEATURE_PAL
         std::string dacModulePath;
         hr = GetCoreClrDirectory(dacModulePath);
         if (FAILED(hr))
@@ -4256,7 +4241,7 @@ public:
         LPCSTR coreclrDirectory = g_ExtServices->GetCoreClrDirectory();
         if (coreclrDirectory == NULL)
         {
-            ExtErr("Runtime module (%s) not loaded yet", MAKEDLLNAME_A("coreclr"));
+            ExtErr("Runtime module (%s) not loaded yet\n", MAKEDLLNAME_A("coreclr"));
             return E_FAIL;
         }
         ArrayHolder<WCHAR> modulePath = new WCHAR[MAX_LONGPATH + 1];
@@ -5806,846 +5791,6 @@ HRESULT __stdcall PERvaMemoryReader::ReadExecutableAtRVA(DWORD relativeVirtualAd
 
 #endif // FEATURE_PAL
 
-HRESULT SymbolReader::LoadSymbols(___in IMetaDataImport* pMD, ___in ICorDebugModule* pModule)
-{
-    HRESULT Status = S_OK;
-    BOOL isDynamic = FALSE;
-    BOOL isInMemory = FALSE;
-    IfFailRet(pModule->IsDynamic(&isDynamic));
-    IfFailRet(pModule->IsInMemory(&isInMemory));
-
-    if (isDynamic)
-    {
-        // Dynamic and in memory assemblies are a special case which we will ignore for now
-        ExtWarn("SOS Warning: Loading symbols for dynamic assemblies is not yet supported\n");
-        return E_FAIL;
-    }
-
-    ULONG64 peAddress = 0;
-    ULONG32 peSize = 0;
-    IfFailRet(pModule->GetBaseAddress(&peAddress));
-    IfFailRet(pModule->GetSize(&peSize));
-
-    ULONG32 len = 0; 
-    WCHAR moduleName[MAX_LONGPATH];
-    IfFailRet(pModule->GetName(_countof(moduleName), &len, moduleName));
-
-#ifndef FEATURE_PAL
-    if (SUCCEEDED(LoadSymbolsForWindowsPDB(pMD, peAddress, moduleName, isInMemory)))
-    {
-        return S_OK;
-    }
-#endif // FEATURE_PAL
-    return LoadSymbolsForPortablePDB(moduleName, isInMemory, isInMemory, peAddress, peSize, 0, 0);
-}
-
-HRESULT SymbolReader::LoadSymbols(___in IMetaDataImport* pMD, ___in IXCLRDataModule* pModule)
-{
-    DacpGetModuleData moduleData;
-    HRESULT hr = moduleData.Request(pModule);
-    if (FAILED(hr))
-    {
-        ExtOut("LoadSymbols moduleData.Request FAILED 0x%08x\n", hr);
-        return hr;
-    }
-
-    if (moduleData.IsDynamic)
-    {
-        ExtWarn("SOS Warning: Loading symbols for dynamic assemblies is not yet supported\n");
-        return E_FAIL;
-    }
-
-    ArrayHolder<WCHAR> pModuleName = new WCHAR[MAX_LONGPATH + 1];
-    ULONG32 nameLen = 0;
-    hr = pModule->GetFileName(MAX_LONGPATH, &nameLen, pModuleName);
-    if (FAILED(hr))
-    {
-        ExtOut("LoadSymbols: IXCLRDataModule->GetFileName FAILED 0x%08x\n", hr);
-        return hr;
-    }
-
-#ifndef FEATURE_PAL
-    // TODO: in-memory windows PDB not supported
-    hr = LoadSymbolsForWindowsPDB(pMD, moduleData.LoadedPEAddress, pModuleName, moduleData.IsFileLayout);
-    if (SUCCEEDED(hr))
-    {
-        return hr;
-    }
-#endif // FEATURE_PAL
-
-    return LoadSymbolsForPortablePDB(
-        pModuleName, 
-        moduleData.IsInMemory,
-        moduleData.IsFileLayout,
-        moduleData.LoadedPEAddress,
-        moduleData.LoadedPESize, 
-        moduleData.InMemoryPdbAddress,
-        moduleData.InMemoryPdbSize);
-}
-
-#ifndef FEATURE_PAL
-
-HRESULT SymbolReader::LoadSymbolsForWindowsPDB(___in IMetaDataImport* pMD, ___in ULONG64 peAddress, __in_z WCHAR* pModuleName, ___in BOOL isFileLayout)
-{
-    HRESULT Status = S_OK;
-
-    if (m_pSymReader != NULL) 
-        return S_OK;
-
-    IfFailRet(CoInitialize(NULL));
-
-    // We now need a binder object that will take the module and return a 
-    // reader object
-    ToRelease<ISymUnmanagedBinder3> pSymBinder;
-    if (FAILED(Status = CreateInstanceCustom(CLSID_CorSymBinder_SxS, 
-                        IID_ISymUnmanagedBinder3, 
-                        NATIVE_SYMBOL_READER_DLL,
-                        cciDacColocated|cciDbgPath, 
-                        (void**)&pSymBinder)))
-    {
-        ExtOut("SOS Error: Unable to CoCreateInstance class=CLSID_CorSymBinder_SxS, interface=IID_ISymUnmanagedBinder3, hr=0x%x\n", Status);
-        ExtOut("This usually means SOS was unable to locate a suitable version of DiaSymReader. The dll searched for was '%S'\n", NATIVE_SYMBOL_READER_DLL);
-        return Status;
-    }
-
-    ToRelease<IDebugSymbols3> spSym3(NULL);
-    Status = g_ExtSymbols->QueryInterface(__uuidof(IDebugSymbols3), (void**)&spSym3);
-    if (FAILED(Status))
-    {
-        ExtOut("SOS Error: Unable to query IDebugSymbols3 HRESULT=0x%x.\n", Status);
-        return Status;
-    }
-
-    ULONG pathSize = 0;
-    Status = spSym3->GetSymbolPathWide(NULL, 0, &pathSize);
-    if (FAILED(Status)) //S_FALSE if the path doesn't fit, but if the path was size 0 perhaps we would get S_OK?
-    {
-        ExtOut("SOS Error: Unable to get symbol path length. IDebugSymbols3::GetSymbolPathWide HRESULT=0x%x.\n", Status);
-        return Status;
-    }
-
-    ArrayHolder<WCHAR> symbolPath = new WCHAR[pathSize];
-    Status = spSym3->GetSymbolPathWide(symbolPath, pathSize, NULL);
-    if (S_OK != Status)
-    {
-        ExtOut("SOS Error: Unable to get symbol path. IDebugSymbols3::GetSymbolPathWide HRESULT=0x%x.\n", Status);
-        return Status;
-    }
-
-    ToRelease<IUnknown> pCallback = NULL;
-    if (isFileLayout)
-    {
-        pCallback = (IUnknown*) new PEOffsetMemoryReader(TO_TADDR(peAddress));
-    }
-    else
-    {
-        pCallback = (IUnknown*) new PERvaMemoryReader(TO_TADDR(peAddress));
-    }
-
-    // TODO: this should be better integrated with windbg's symbol lookup
-    Status = pSymBinder->GetReaderFromCallback(pMD, pModuleName, symbolPath, 
-        AllowRegistryAccess | AllowSymbolServerAccess | AllowOriginalPathAccess | AllowReferencePathAccess, pCallback, &m_pSymReader);
-
-    if (FAILED(Status) && m_pSymReader != NULL)
-    {
-        m_pSymReader->Release();
-        m_pSymReader = NULL;
-    }
-    return Status;
-}
-
-#endif // FEATURE_PAL
-
-//
-// Pass to managed helper code to read in-memory PEs/PDBs
-// Returns the number of bytes read.
-//
-int ReadMemoryForSymbols(ULONG64 address, char *buffer, int cb)
-{
-    ULONG read;
-    if (SafeReadMemory(TO_TADDR(address), (PVOID)buffer, cb, &read))
-    {
-        return read;
-    }
-    return 0;
-}
-
-HRESULT SymbolReader::LoadSymbolsForPortablePDB(__in_z WCHAR* pModuleName, ___in BOOL isInMemory, ___in BOOL isFileLayout,
-    ___in ULONG64 peAddress, ___in ULONG64 peSize, ___in ULONG64 inMemoryPdbAddress, ___in ULONG64 inMemoryPdbSize)
-{
-    HRESULT Status = S_OK;
-
-    if (loadSymbolsForModuleDelegate == nullptr)
-    {
-        IfFailRet(PrepareSymbolReader());
-    }
-
-    // The module name needs to be null for in-memory PE's.
-    ArrayHolder<char> szModuleName = nullptr;
-    if (!isInMemory && pModuleName != nullptr)
-    {
-        szModuleName = new char[MAX_LONGPATH];
-        if (WideCharToMultiByte(CP_ACP, 0, pModuleName, (int)(_wcslen(pModuleName) + 1), szModuleName, MAX_LONGPATH, NULL, NULL) == 0)
-        {
-            return E_FAIL;
-        }
-    }
-
-    m_symbolReaderHandle = loadSymbolsForModuleDelegate(szModuleName, isFileLayout, peAddress, 
-        (int)peSize, inMemoryPdbAddress, (int)inMemoryPdbSize, ReadMemoryForSymbols);
-
-    if (m_symbolReaderHandle == 0)
-    {
-        return E_FAIL;
-    }
-
-    return Status;
-}
-
-#ifdef FEATURE_PAL
-#define TPALIST_SEPARATOR_STR_A ":"
-#else
-#define TPALIST_SEPARATOR_STR_A ";"
-#endif
-
-void AddFilesFromDirectoryToTpaList(const char* directory, std::string& tpaList)
-{
-    const char * const tpaExtensions[] = {
-        "*.ni.dll",      // Probe for .ni.dll first so that it's preferred if ni and il coexist in the same dir
-        "*.dll",
-    };
-    std::set<std::string> addedAssemblies;
-
-    // Don't add this file to the list because we don't want to the one from the hosting runtime
-    addedAssemblies.insert(SymbolReaderDllName);
-
-    // Walk the directory for each extension separately so that we first get files with .ni.dll extension,
-    // then files with .dll extension, etc.
-    for (int extIndex = 0; extIndex < sizeof(tpaExtensions) / sizeof(tpaExtensions[0]); extIndex++)
-    {
-        const char* ext = tpaExtensions[extIndex];
-        size_t extLength = strlen(ext) - 1;         // don't count the "*"
-
-        std::string assemblyPath(directory);
-        assemblyPath.append(DIRECTORY_SEPARATOR_STR_A);
-        assemblyPath.append(tpaExtensions[extIndex]);
-
-        WIN32_FIND_DATAA data;
-        HANDLE findHandle = FindFirstFileA(assemblyPath.c_str(), &data);
-
-        if (findHandle != INVALID_HANDLE_VALUE) 
-        {
-            do
-            {
-                if (!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
-                {
-
-                    std::string filename(data.cFileName);
-                    size_t extPos = filename.length() - extLength;
-                    std::string filenameWithoutExt(filename.substr(0, extPos));
-
-                    // Make sure if we have an assembly with multiple extensions present,
-                    // we insert only one version of it.
-                    if (addedAssemblies.find(filenameWithoutExt) == addedAssemblies.end())
-                    {
-                        addedAssemblies.insert(filenameWithoutExt);
-
-                        tpaList.append(directory);
-                        tpaList.append(DIRECTORY_SEPARATOR_STR_A);
-                        tpaList.append(filename);
-                        tpaList.append(TPALIST_SEPARATOR_STR_A);
-                    }
-                }
-            } 
-            while (0 != FindNextFileA(findHandle, &data));
-
-            FindClose(findHandle);
-        }
-    }
-}
-
-#ifdef FEATURE_PAL
-
-#if defined(__linux__)
-#define symlinkEntrypointExecutable "/proc/self/exe"
-#elif !defined(__APPLE__)
-#define symlinkEntrypointExecutable "/proc/curproc/exe"
-#endif
-
-bool GetAbsolutePath(const char* path, std::string& absolutePath)
-{
-    bool result = false;
-
-    char realPath[PATH_MAX];
-    if (realpath(path, realPath) != nullptr && realPath[0] != '\0')
-    {
-        absolutePath.assign(realPath);
-        // realpath should return canonicalized path without the trailing slash
-        assert(absolutePath.back() != '/');
-
-        result = true;
-    }
-
-    return result;
-}
-
-bool GetEntrypointExecutableAbsolutePath(std::string& entrypointExecutable)
-{
-    bool result = false;
-    
-    entrypointExecutable.clear();
-
-    // Get path to the executable for the current process using
-    // platform specific means.
-#if defined(__APPLE__)
-    
-    // On Mac, we ask the OS for the absolute path to the entrypoint executable
-    uint32_t lenActualPath = 0;
-    if (_NSGetExecutablePath(nullptr, &lenActualPath) == -1)
-    {
-        // OSX has placed the actual path length in lenActualPath,
-        // so re-attempt the operation
-        std::string resizedPath(lenActualPath, '\0');
-        char *pResizedPath = const_cast<char *>(resizedPath.c_str());
-        if (_NSGetExecutablePath(pResizedPath, &lenActualPath) == 0)
-        {
-            entrypointExecutable.assign(pResizedPath);
-            result = true;
-        }
-    }
-#elif defined (__FreeBSD__)
-    static const int name[] = {
-        CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1
-    };
-    char path[PATH_MAX];
-    size_t len;
-
-    len = sizeof(path);
-    if (sysctl(name, 4, path, &len, nullptr, 0) == 0)
-    {
-        entrypointExecutable.assign(path);
-        result = true;
-    }
-    else
-    {
-        // ENOMEM
-        result = false;
-    }
-#elif defined(__NetBSD__) && defined(KERN_PROC_PATHNAME)
-    static const int name[] = {
-        CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME,
-    };
-    char path[MAXPATHLEN];
-    size_t len;
-
-    len = sizeof(path);
-    if (sysctl(name, __arraycount(name), path, &len, NULL, 0) != -1)
-    {
-        entrypointExecutable.assign(path);
-        result = true;
-    }
-    else
-    {
-        result = false;
-    }
-#else
-    // On other OSs, return the symlink that will be resolved by GetAbsolutePath
-    // to fetch the entrypoint EXE absolute path, inclusive of filename.
-    result = GetAbsolutePath(symlinkEntrypointExecutable, entrypointExecutable);
-#endif 
-
-    return result;
-}
-
-#else // FEATURE_PAL
-
-bool GetEntrypointExecutableAbsolutePath(std::string& entrypointExecutable)
-{
-    ArrayHolder<char> hostPath = new char[MAX_LONGPATH+1];
-    if (::GetModuleFileName(NULL, hostPath, MAX_LONGPATH) == 0)
-    {
-        return false;
-    }
-
-    entrypointExecutable.clear();
-    entrypointExecutable.append(hostPath);
-
-    return true;
-}
-
-#endif // FEATURE_PAL
-
-HRESULT GetCoreClrDirectory(std::string& coreClrDirectory)
-{
-#ifdef FEATURE_PAL
-    LPCSTR directory = g_ExtServices->GetCoreClrDirectory();
-    if (directory == NULL)
-    {
-        ExtErr("Error: Runtime module (%s) not loaded yet", MAKEDLLNAME_A("coreclr"));
-        return E_FAIL;
-    }
-    if (!GetAbsolutePath(directory, coreClrDirectory))
-    {
-        ExtErr("Error: Failed to get coreclr absolute path\n");
-        return E_FAIL;
-    }
-#else
-    ULONG index;
-    HRESULT Status = g_ExtSymbols->GetModuleByModuleName(MAIN_CLR_MODULE_NAME_A, 0, &index, NULL);
-    if (FAILED(Status))
-    {
-        ExtErr("Error: Can't find coreclr module\n");
-        return Status;
-    }
-    ArrayHolder<char> szModuleName = new char[MAX_LONGPATH + 1];
-    Status = g_ExtSymbols->GetModuleNames(index, 0, szModuleName, MAX_LONGPATH, NULL, NULL, 0, NULL, NULL, 0, NULL);
-    if (FAILED(Status))
-    {
-        ExtErr("Error: Failed to get coreclr module name\n");
-        return Status;
-    }
-    coreClrDirectory = szModuleName;
-
-    // Parse off the module name to get just the path
-    size_t lastSlash = coreClrDirectory.rfind(DIRECTORY_SEPARATOR_CHAR_A);
-    if (lastSlash == std::string::npos)
-    {
-        ExtErr("Error: Failed to parse coreclr module name\n");
-        return E_FAIL;
-    }
-    coreClrDirectory.assign(coreClrDirectory, 0, lastSlash);
-#endif
-    return S_OK;
-}
-
-HRESULT GetHostRuntime(std::string& coreClrPath, std::string& hostRuntimeDirectory)
-{
-    // If the hosting runtime isn't already set, use the runtime we are debugging
-    if (g_hostRuntimeDirectory == nullptr)
-    {
-        HRESULT hr = GetCoreClrDirectory(hostRuntimeDirectory);
-        if (FAILED(hr))
-        {
-            return hr;
-        }
-        g_hostRuntimeDirectory = _strdup(hostRuntimeDirectory.c_str());
-    }
-    hostRuntimeDirectory.assign(g_hostRuntimeDirectory);
-    coreClrPath.assign(g_hostRuntimeDirectory);
-    coreClrPath.append(DIRECTORY_SEPARATOR_STR_A);
-    coreClrPath.append(MAIN_CLR_DLL_NAME_A);
-    return S_OK;
-}
-
-HRESULT SymbolReader::PrepareSymbolReader()
-{
-    static bool attemptedSymbolReaderPreparation = false;
-    if (attemptedSymbolReaderPreparation)
-    {
-        // If we already tried to set up the symbol reader, we won't try again.
-        return E_FAIL;
-    }
-    attemptedSymbolReaderPreparation = true;
-
-    std::string hostRuntimeDirectory;
-    std::string sosModuleDirectory;
-    std::string coreClrPath;
-
-    HRESULT Status = GetHostRuntime(coreClrPath, hostRuntimeDirectory);
-    if (FAILED(Status))
-    {
-        return Status;
-    }
-#ifdef FEATURE_PAL
-    ArrayHolder<char> szSOSModulePath = new char[MAX_LONGPATH + 1];
-    UINT cch = MAX_LONGPATH;
-    if (!PAL_GetPALDirectoryA(szSOSModulePath, &cch)) {
-        ExtErr("Error: Failed to get SOS module directory\n");
-        return E_FAIL;
-    }
-    sosModuleDirectory = szSOSModulePath;
-#else
-    ArrayHolder<char> szSOSModulePath = new char[MAX_LONGPATH + 1];
-    if (GetModuleFileNameA(g_hInstance, szSOSModulePath, MAX_LONGPATH) == 0)
-    {
-        ExtErr("Error: Failed to get SOS module directory\n");
-        return E_FAIL;
-    }
-    sosModuleDirectory = szSOSModulePath;
-
-    // Get just the sos module directory
-    size_t lastSlash = sosModuleDirectory.rfind(DIRECTORY_SEPARATOR_CHAR_A);
-    if (lastSlash == std::string::npos)
-    {
-        ExtErr("Error: Failed to parse sos module name\n");
-        return E_FAIL;
-    }
-    sosModuleDirectory.erase(lastSlash);
-#endif // FEATURE_PAL
-
-    HMODULE coreclrLib = LoadLibraryA(coreClrPath.c_str());
-    if (coreclrLib == nullptr)
-    {
-        ExtErr("Error: Failed to load %s\n", coreClrPath.c_str());
-        return E_FAIL;
-    }
-
-    void *hostHandle;
-    unsigned int domainId;
-    coreclr_initialize_ptr initializeCoreCLR = (coreclr_initialize_ptr)GetProcAddress(coreclrLib, "coreclr_initialize");
-    if (initializeCoreCLR == nullptr)
-    {
-        ExtErr("Error: coreclr_initialize not found\n");
-        return E_FAIL;
-    }
-
-    std::string tpaList;
-    AddFilesFromDirectoryToTpaList(hostRuntimeDirectory.c_str(), tpaList);
-
-    // The SOS managed assembly from the sos directory is the one to trust
-    tpaList.append(sosModuleDirectory);
-    tpaList.append(DIRECTORY_SEPARATOR_STR_A);
-    tpaList.append(SymbolReaderDllName);
-    tpaList.append(".dll");
-    tpaList.append(TPALIST_SEPARATOR_STR_A);
-
-    std::string appPaths;
-    appPaths.append(sosModuleDirectory);
-    appPaths.append(TPALIST_SEPARATOR_STR_A);
-    appPaths.append(hostRuntimeDirectory);
-
-    const char *propertyKeys[] = {
-        "TRUSTED_PLATFORM_ASSEMBLIES", "APP_PATHS", "APP_NI_PATHS",
-        "NATIVE_DLL_SEARCH_DIRECTORIES", "AppDomainCompatSwitch"};
-
-    const char *propertyValues[] = {// TRUSTED_PLATFORM_ASSEMBLIES
-                                    tpaList.c_str(),
-                                    // APP_PATHS
-                                    appPaths.c_str(),
-                                    // APP_NI_PATHS
-                                    hostRuntimeDirectory.c_str(),
-                                    // NATIVE_DLL_SEARCH_DIRECTORIES
-                                    hostRuntimeDirectory.c_str(),
-                                    // AppDomainCompatSwitch
-                                    "UseLatestBehaviorWhenTFMNotSpecified"};
-
-    std::string entryPointExecutablePath;
-    if (!GetEntrypointExecutableAbsolutePath(entryPointExecutablePath))
-    {
-        ExtErr("Could not get full path to current executable");
-        return E_FAIL;
-    }
-
-    Status = initializeCoreCLR(entryPointExecutablePath.c_str(), "sos", 
-        sizeof(propertyKeys) / sizeof(propertyKeys[0]), propertyKeys, propertyValues, &hostHandle, &domainId);
-
-    if (FAILED(Status))
-    {
-        ExtErr("Error: Fail to initialize CoreCLR %08x\n", Status);
-        return Status;
-    }
-
-    coreclr_create_delegate_ptr createDelegate = (coreclr_create_delegate_ptr)GetProcAddress(coreclrLib, "coreclr_create_delegate");
-    if (createDelegate == nullptr)
-    {
-        ExtErr("Error: coreclr_create_delegate not found\n");
-        return E_FAIL;
-    }
-
-    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "LoadSymbolsForModule", (void **)&loadSymbolsForModuleDelegate));
-    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "Dispose", (void **)&disposeDelegate));
-    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "ResolveSequencePoint", (void **)&resolveSequencePointDelegate));
-    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetLocalVariableName", (void **)&getLocalVariableNameDelegate));
-    IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetLineByILOffset", (void **)&getLineByILOffsetDelegate));
-
-    return Status;
-}
-
-HRESULT SymbolReader::GetLineByILOffset(___in mdMethodDef methodToken, ___in ULONG64 ilOffset,
-    ___out ULONG *pLinenum, __out_ecount(cchFileName) WCHAR* pwszFileName, ___in ULONG cchFileName)
-{
-    HRESULT Status = S_OK;
-
-    if (m_symbolReaderHandle != 0)
-    {
-        _ASSERTE(getLineByILOffsetDelegate != nullptr);
-
-        BSTR bstrFileName = SysAllocStringLen(0, MAX_LONGPATH);
-        if (bstrFileName == nullptr)
-        {
-            return E_OUTOFMEMORY;
-        }
-        // Source lines with 0xFEEFEE markers are filtered out on the managed side.
-        if ((getLineByILOffsetDelegate(m_symbolReaderHandle, methodToken, ilOffset, pLinenum, &bstrFileName) == FALSE) || (*pLinenum == 0))
-        {
-            SysFreeString(bstrFileName);
-            return E_FAIL;
-        }
-        wcscpy_s(pwszFileName, cchFileName, bstrFileName);
-        SysFreeString(bstrFileName);
-        return S_OK;
-    }
-
-#ifndef FEATURE_PAL
-    if (m_pSymReader == NULL)
-        return E_FAIL;
-
-    ToRelease<ISymUnmanagedMethod> pSymMethod(NULL);
-    IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod));
-
-    ULONG32 seqPointCount = 0;
-    IfFailRet(pSymMethod->GetSequencePointCount(&seqPointCount));
-
-    if (seqPointCount == 0)
-        return E_FAIL;
-
-    // allocate memory for the objects to be fetched
-    ArrayHolder<ULONG32> offsets(new ULONG32[seqPointCount]);
-    ArrayHolder<ULONG32> lines(new ULONG32[seqPointCount]);
-    ArrayHolder<ULONG32> columns(new ULONG32[seqPointCount]);
-    ArrayHolder<ULONG32> endlines(new ULONG32[seqPointCount]);
-    ArrayHolder<ULONG32> endcolumns(new ULONG32[seqPointCount]);
-    ArrayHolder<ToRelease<ISymUnmanagedDocument>> documents(new ToRelease<ISymUnmanagedDocument>[seqPointCount]);
-
-    ULONG32 realSeqPointCount = 0;
-    IfFailRet(pSymMethod->GetSequencePoints(seqPointCount, &realSeqPointCount, offsets, &(documents[0]), lines, columns, endlines, endcolumns));
-
-    const ULONG32 HiddenLine = 0x00feefee;
-    int bestSoFar = -1;
-
-    for (int i = 0; i < (int)realSeqPointCount; i++)
-    {
-        if (offsets[i] > ilOffset)
-            break;
-
-        if (lines[i] != HiddenLine)
-            bestSoFar = i;
-    }
-
-    if (bestSoFar != -1)
-    {
-        ULONG32 cchNeeded = 0;
-        IfFailRet(documents[bestSoFar]->GetURL(cchFileName, &cchNeeded, pwszFileName));
-
-        *pLinenum = lines[bestSoFar];
-        return S_OK;
-    }
-#endif // FEATURE_PAL
-
-    return E_FAIL;
-}
-
-HRESULT SymbolReader::GetNamedLocalVariable(___in ISymUnmanagedScope * pScope, ___in ICorDebugILFrame * pILFrame, ___in mdMethodDef methodToken, 
-    ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ICorDebugValue** ppValue)
-{
-    HRESULT Status = S_OK;
-
-    if (m_symbolReaderHandle != 0)
-    {
-        _ASSERTE(getLocalVariableNameDelegate != nullptr);
-
-        BSTR wszParamName = SysAllocStringLen(0, mdNameLen);
-        if (wszParamName == NULL)
-        {
-            return E_OUTOFMEMORY;
-        }
-
-        if (getLocalVariableNameDelegate(m_symbolReaderHandle, methodToken, localIndex, &wszParamName) == FALSE)
-        {
-            SysFreeString(wszParamName);
-            return E_FAIL;
-        }
-
-        wcscpy_s(paramName, paramNameLen, wszParamName);
-        SysFreeString(wszParamName);
-
-        if (FAILED(pILFrame->GetLocalVariable(localIndex, ppValue)) || (*ppValue == NULL))
-        {
-            *ppValue = NULL;
-            return E_FAIL;
-        }
-        return S_OK;
-    }
-
-#ifndef FEATURE_PAL
-    if (m_pSymReader == NULL)
-        return E_FAIL;
-
-    if (pScope == NULL)
-    {
-        ToRelease<ISymUnmanagedMethod> pSymMethod;
-        IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod));
-
-        ToRelease<ISymUnmanagedScope> pScope;
-        IfFailRet(pSymMethod->GetRootScope(&pScope));
-
-        return GetNamedLocalVariable(pScope, pILFrame, methodToken, localIndex, paramName, paramNameLen, ppValue);
-    }
-    else
-    {
-        ULONG32 numVars = 0;
-        IfFailRet(pScope->GetLocals(0, &numVars, NULL));
-
-        ArrayHolder<ISymUnmanagedVariable*> pLocals = new ISymUnmanagedVariable*[numVars];
-        IfFailRet(pScope->GetLocals(numVars, &numVars, pLocals));
-
-        for (ULONG i = 0; i < numVars; i++)
-        {
-            ULONG32 varIndexInMethod = 0;
-            if (SUCCEEDED(pLocals[i]->GetAddressField1(&varIndexInMethod)))
-            {
-                if (varIndexInMethod != localIndex)
-                    continue;
-
-                ULONG32 nameLen = 0;
-                if (FAILED(pLocals[i]->GetName(paramNameLen, &nameLen, paramName)))
-                        swprintf_s(paramName, paramNameLen, W("local_%d\0"), localIndex);
-
-                if (SUCCEEDED(pILFrame->GetLocalVariable(varIndexInMethod, ppValue)) && (*ppValue != NULL))
-                {
-                    for(ULONG j = 0; j < numVars; j++) pLocals[j]->Release();
-                    return S_OK;
-                }
-                else
-                {
-                    *ppValue = NULL;
-                    for(ULONG j = 0; j < numVars; j++) pLocals[j]->Release();
-                    return E_FAIL;
-                }
-            }
-        }
-
-        ULONG32 numChildren = 0;
-        IfFailRet(pScope->GetChildren(0, &numChildren, NULL));
-
-        ArrayHolder<ISymUnmanagedScope*> pChildren = new ISymUnmanagedScope*[numChildren];
-        IfFailRet(pScope->GetChildren(numChildren, &numChildren, pChildren));
-
-        for (ULONG i = 0; i < numChildren; i++)
-        {
-            if (SUCCEEDED(GetNamedLocalVariable(pChildren[i], pILFrame, methodToken, localIndex, paramName, paramNameLen, ppValue)))
-            {
-                for (ULONG j = 0; j < numChildren; j++) pChildren[j]->Release();
-                return S_OK;
-            }
-        }
-
-        for (ULONG j = 0; j < numChildren; j++) pChildren[j]->Release();
-    }
-#endif // FEATURE_PAL
-
-    return E_FAIL;
-}
-
-HRESULT SymbolReader::GetNamedLocalVariable(___in ICorDebugFrame * pFrame, ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, 
-    ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue)
-{
-    HRESULT Status = S_OK;
-
-    *ppValue = NULL;
-    paramName[0] = L'\0';
-
-    ToRelease<ICorDebugILFrame> pILFrame;
-    IfFailRet(pFrame->QueryInterface(IID_ICorDebugILFrame, (LPVOID*) &pILFrame));
-
-    ToRelease<ICorDebugFunction> pFunction;
-    IfFailRet(pFrame->GetFunction(&pFunction));
-
-    mdMethodDef methodDef;
-    ToRelease<ICorDebugClass> pClass;
-    ToRelease<ICorDebugModule> pModule;
-    IfFailRet(pFunction->GetClass(&pClass));
-    IfFailRet(pFunction->GetModule(&pModule));
-    IfFailRet(pFunction->GetToken(&methodDef));
-
-    return GetNamedLocalVariable(NULL, pILFrame, methodDef, localIndex, paramName, paramNameLen, ppValue);
-}
-
-HRESULT SymbolReader::ResolveSequencePoint(__in_z WCHAR* pFilename, ___in ULONG32 lineNumber, ___in TADDR mod, ___out mdMethodDef* pToken, ___out ULONG32* pIlOffset)
-{
-    HRESULT Status = S_OK;
-
-    if (m_symbolReaderHandle != 0)
-    {
-        _ASSERTE(resolveSequencePointDelegate != nullptr);
-
-        char szName[mdNameLen];
-        if (WideCharToMultiByte(CP_ACP, 0, pFilename, (int)(_wcslen(pFilename) + 1), szName, mdNameLen, NULL, NULL) == 0)
-        { 
-            return E_FAIL;
-        }
-        if (resolveSequencePointDelegate(m_symbolReaderHandle, szName, lineNumber, pToken, pIlOffset) == FALSE)
-        {
-            return E_FAIL;
-        }
-        return S_OK;
-    }
-
-#ifndef FEATURE_PAL
-    if (m_pSymReader == NULL)
-        return E_FAIL;
-
-    ULONG32 cDocs = 0;
-    ULONG32 cDocsNeeded = 0;
-    ArrayHolder<ToRelease<ISymUnmanagedDocument>> pDocs = NULL;
-
-    IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, NULL));
-    pDocs = new ToRelease<ISymUnmanagedDocument>[cDocsNeeded];
-    cDocs = cDocsNeeded;
-    IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, &(pDocs[0])));
-
-    ULONG32 filenameLen = (ULONG32) _wcslen(pFilename);
-
-    for (ULONG32 i = 0; i < cDocs; i++)
-    {
-        ULONG32 cchUrl = 0;
-        ULONG32 cchUrlNeeded = 0;
-        ArrayHolder<WCHAR> pUrl = NULL;
-        IfFailRet(pDocs[i]->GetURL(cchUrl, &cchUrlNeeded, pUrl));
-        pUrl = new WCHAR[cchUrlNeeded];
-        cchUrl = cchUrlNeeded;
-        IfFailRet(pDocs[i]->GetURL(cchUrl, &cchUrlNeeded, pUrl));
-
-        // If the URL is exactly as long as the filename then compare the two names directly
-        if (cchUrl-1 == filenameLen)
-        {
-            if (0!=_wcsicmp(pUrl, pFilename))
-                continue;
-        }
-        // does the URL suffix match [back]slash + filename?
-        else if (cchUrl-1 > filenameLen)
-        {
-            WCHAR* slashLocation = pUrl + (cchUrl - filenameLen - 2);
-            if (*slashLocation != L'\\' && *slashLocation != L'/')
-                continue;
-            if (0 != _wcsicmp(slashLocation+1, pFilename))
-                continue;
-        }
-        // URL is too short to match
-        else
-            continue;
-
-        ULONG32 closestLine = 0;
-        if (FAILED(pDocs[i]->FindClosestLine(lineNumber, &closestLine)))
-            continue;
-
-        ToRelease<ISymUnmanagedMethod> pSymUnmanagedMethod;
-        IfFailRet(m_pSymReader->GetMethodFromDocumentPosition(pDocs[i], closestLine, 0, &pSymUnmanagedMethod));
-        IfFailRet(pSymUnmanagedMethod->GetToken(pToken));
-        IfFailRet(pSymUnmanagedMethod->GetOffset(pDocs[i], closestLine, 0, pIlOffset));
-
-        // If this IL 
-        if (*pIlOffset == -1)
-        {
-            return E_FAIL;
-        }
-        return S_OK;
-    }
-#endif // FEATURE_PAL
-
-    return E_FAIL;
-}
-
 static void AddAssemblyName(WString& methodOutput, CLRDATA_ADDRESS mdesc)
 {
     DacpMethodDescData mdescData;
index 94ee46d74013f10fb04923a8f669fef26a7125db..883cd722ce8ec6d7784258679a0f22f8adfc6ad9 100644 (file)
@@ -36,6 +36,7 @@ inline void RestoreSOToleranceState() {}
 
 #include "cordebug.h"
 #include "static_assert.h"
+#include "hostcoreclr.h"
 
 typedef LPCSTR  LPCUTF8;
 typedef LPSTR   LPUTF8;
@@ -2280,76 +2281,6 @@ private:
 
 #endif // !FEATURE_PAL
 
-static const char *SymbolReaderDllName = "SOS.NETCore";
-static const char *SymbolReaderClassName = "SOS.SymbolReader";
-
-typedef  int (*ReadMemoryDelegate)(ULONG64, char *, int);
-typedef  PVOID (*LoadSymbolsForModuleDelegate)(const char*, BOOL, ULONG64, int, ULONG64, int, ReadMemoryDelegate);
-typedef  void (*DisposeDelegate)(PVOID);
-typedef  BOOL (*ResolveSequencePointDelegate)(PVOID, const char*, unsigned int, unsigned int*, unsigned int*);
-typedef  BOOL (*GetLocalVariableName)(PVOID, int, int, BSTR*);
-typedef  BOOL (*GetLineByILOffsetDelegate)(PVOID, mdMethodDef, ULONG64, ULONG *, BSTR*);
-
-class SymbolReader
-{
-private:
-#ifndef FEATURE_PAL
-    ISymUnmanagedReader* m_pSymReader;
-#endif
-    PVOID m_symbolReaderHandle;
-
-    static LoadSymbolsForModuleDelegate loadSymbolsForModuleDelegate;
-    static DisposeDelegate disposeDelegate;
-    static ResolveSequencePointDelegate resolveSequencePointDelegate;
-    static GetLocalVariableName getLocalVariableNameDelegate;
-    static GetLineByILOffsetDelegate getLineByILOffsetDelegate;
-    static HRESULT PrepareSymbolReader();
-
-    HRESULT GetNamedLocalVariable(___in ISymUnmanagedScope* pScope, ___in ICorDebugILFrame* pILFrame, ___in mdMethodDef methodToken, ___in ULONG localIndex, 
-        __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue);
-    HRESULT LoadSymbolsForWindowsPDB(___in IMetaDataImport* pMD, ___in ULONG64 peAddress, __in_z WCHAR* pModuleName, ___in BOOL isFileLayout);
-    HRESULT LoadSymbolsForPortablePDB(__in_z WCHAR* pModuleName, ___in BOOL isInMemory, ___in BOOL isFileLayout, ___in ULONG64 peAddress, ___in ULONG64 peSize, 
-        ___in ULONG64 inMemoryPdbAddress, ___in ULONG64 inMemoryPdbSize);
-
-public:
-    SymbolReader()
-    {
-#ifndef FEATURE_PAL
-        m_pSymReader = NULL;
-#endif
-        m_symbolReaderHandle = 0;
-    }
-
-    ~SymbolReader()
-    {
-#ifndef FEATURE_PAL
-        if(m_pSymReader != NULL)
-        {
-            m_pSymReader->Release();
-            m_pSymReader = NULL;
-        }
-#endif
-        if (m_symbolReaderHandle != 0)
-        {
-            disposeDelegate(m_symbolReaderHandle);
-            m_symbolReaderHandle = 0;
-        }
-    }
-
-    HRESULT LoadSymbols(___in IMetaDataImport* pMD, ___in ICorDebugModule* pModule);
-    HRESULT LoadSymbols(___in IMetaDataImport* pMD, ___in IXCLRDataModule* pModule);
-    HRESULT GetLineByILOffset(___in mdMethodDef MethodToken, ___in ULONG64 IlOffset, ___out ULONG *pLinenum, __out_ecount(cchFileName) WCHAR* pwszFileName, ___in ULONG cchFileName);
-    HRESULT GetNamedLocalVariable(___in ICorDebugFrame * pFrame, ___in ULONG localIndex, __out_ecount(paramNameLen) WCHAR* paramName, ___in ULONG paramNameLen, ___out ICorDebugValue** ppValue);
-    HRESULT ResolveSequencePoint(__in_z WCHAR* pFilename, ___in ULONG32 lineNumber, ___in TADDR mod, ___out mdMethodDef* ___out pToken, ___out ULONG32* pIlOffset);
-};
-
-HRESULT
-GetLineByOffset(
-        ___in ULONG64 IP,
-        ___out ULONG *pLinenum,
-        __out_ecount(cchFileName) WCHAR* pwszFileName,
-        ___in ULONG cchFileName);
-
 /// X86 Context
 #define X86_SIZE_OF_80387_REGISTERS      80
 #define X86_MAXIMUM_SUPPORTED_EXTENSION     512
index aa71451b4c6faaaee188dd90ec4dd1a9a3bbe8d0..1e3928f43e08c970095d5df3107755bd2f786e82 100644 (file)
@@ -14,6 +14,7 @@
 #include <unknwn.h>
 #include <rpc.h>
 #include <lldbservices.h>
+#include <arrayholder.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -72,7 +73,7 @@ public:
     {
         va_list args;
         va_start (args, format);
-        HRESULT result = m_lldbservices->OutputVaList(mask, format, args);
+        HRESULT result = OutputVaList(mask, format, args);
         va_end (args);
         return result;
     }
@@ -83,11 +84,11 @@ public:
         PCSTR format,
         va_list args)
     {
-        char str[4096];
-        int length = _vsnprintf_s(str, sizeof(str), _TRUNCATE, format, args);
+        ArrayHolder<char> str = new char[8192];
+        int length = _vsnprintf_s(str, 8192, _TRUNCATE, format, args);
         if (length > 0)
         {
-            return Output(mask, "%s", str);
+            return m_lldbservices->OutputVaList(mask, str, args);
         }
         return E_FAIL;
     }
diff --git a/src/SOS/dbgutil/dbgutil.vcxproj b/src/SOS/dbgutil/dbgutil.vcxproj
new file mode 100644 (file)
index 0000000..9b4f9ff
--- /dev/null
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Checked|x64">
+      <Configuration>Checked</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="RelWithDebInfo|x64">
+      <Configuration>RelWithDebInfo</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="CMakeLists.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="dbgutil.cpp" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A9A7C879-C320-3327-BB84-16E1322E17AE}</ProjectGuid>
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+    <Keyword>Win32Proj</Keyword>
+    <Platform>x64</Platform>
+    <ProjectName>dbgutil</ProjectName>
+    <VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">dbgutil.dir\Debug\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">dbgutil</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Checked\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">dbgutil.dir\Checked\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">dbgutil</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">dbgutil.dir\Release\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">dbgutil</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\RelWithDebInfo\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">dbgutil.dir\RelWithDebInfo\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">dbgutil</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">.lib</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams</AdditionalOptions>
+      <AssemblerListingLocation>Debug/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>Disabled</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Debug\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Checked/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Checked\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Release/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Release\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>RelWithDebInfo/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"RelWithDebInfo\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
diff --git a/src/SOS/debugshim/debugshim.vcxproj b/src/SOS/debugshim/debugshim.vcxproj
new file mode 100644 (file)
index 0000000..13b4cc5
--- /dev/null
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Checked|x64">
+      <Configuration>Checked</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="RelWithDebInfo|x64">
+      <Configuration>RelWithDebInfo</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{6A94C5FE-8706-3505-834E-DA16242F3864}</ProjectGuid>
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+    <Keyword>Win32Proj</Keyword>
+    <Platform>x64</Platform>
+    <ProjectName>debugshim</ProjectName>
+    <VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">debugshim.dir\Debug\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">debugshim</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Checked\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">debugshim.dir\Checked\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">debugshim</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">debugshim.dir\Release\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">debugshim</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\RelWithDebInfo\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">debugshim.dir\RelWithDebInfo\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">debugshim</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">.lib</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams</AdditionalOptions>
+      <AssemblerListingLocation>Debug/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>Disabled</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR=\"Debug\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Checked/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR=\"Checked\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Release/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR=\"Release\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>RelWithDebInfo/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR=\"RelWithDebInfo\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;HOST_IS_WINDOWS_OS;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="debugshim.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="debugshim.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
diff --git a/src/SOS/gcdump/gcdump.vcxproj b/src/SOS/gcdump/gcdump.vcxproj
new file mode 100644 (file)
index 0000000..1b3c7d4
--- /dev/null
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Checked|x64">
+      <Configuration>Checked</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="RelWithDebInfo|x64">
+      <Configuration>RelWithDebInfo</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="CMakeLists.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="gcdump.cpp" />
+    <ClCompile Include="gcdumpnonx86.cpp" />
+    <ClCompile Include="gcinfodecoder.cpp" />
+    <ClCompile Include="gcinfodumper.cpp" />
+    <ClCompile Include="i386\gcdumpx86.cpp" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{20EBC3C4-917C-402D-B778-9A6E3742BF5A}</ProjectGuid>
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
+    <Keyword>Win32Proj</Keyword>
+    <Platform>x64</Platform>
+    <ProjectName>gcdump</ProjectName>
+    <VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Debug\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">gcdump.dir\Debug\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">gcdump</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Checked\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">gcdump.dir\Checked\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">gcdump</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Release\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">gcdump.dir\Release\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">gcdump</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.lib</TargetExt>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\RelWithDebInfo\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">gcdump.dir\RelWithDebInfo\</IntDir>
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">gcdump</TargetName>
+    <TargetExt Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">.lib</TargetExt>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams</AdditionalOptions>
+      <AssemblerListingLocation>Debug/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>Disabled</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Debug\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Debug";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Checked|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Checked/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Checked\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>DEBUG;_DEBUG;_DBG;URTBLDENV_FRIENDLY=Checked;BUILDENV_CHECKED=1;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Checked";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>Release/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"Release\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="Release";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalOptions>%(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8</AdditionalOptions>
+      <AssemblerListingLocation>RelWithDebInfo/</AssemblerListingLocation>
+      <BufferSecurityCheck>true</BufferSecurityCheck>
+      <CompileAs>CompileAsCpp</CompileAs>
+      <ControlFlowGuard>Guard</ControlFlowGuard>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4960;4961;4603;4627;4838;4456;4457;4458;4459;4091</DisableSpecificWarnings>
+      <ExceptionHandling>Async</ExceptionHandling>
+      <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
+      <ForcedIncludeFiles>WarningControl.h</ForcedIncludeFiles>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <OmitDefaultLibName>true</OmitDefaultLibName>
+      <OmitFramePointers>false</OmitFramePointers>
+      <Optimization>MinSpace</Optimization>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <RuntimeTypeInfo>false</RuntimeTypeInfo>
+      <StringPooling>true</StringPooling>
+      <StructMemberAlignment>8Bytes</StructMemberAlignment>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TreatSpecificWarningsAsErrors>4640</TreatSpecificWarningsAsErrors>
+      <TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
+      <TreatWarningAsError>true</TreatWarningAsError>
+      <UndefinePreprocessorDefinitions>_MT</UndefinePreprocessorDefinitions>
+      <UseFullPaths>true</UseFullPaths>
+      <WarningLevel>Level3</WarningLevel>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <ObjectFileName>$(IntDir)</ObjectFileName>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>WIN32;NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR=\"RelWithDebInfo\";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+    <MASM>
+      <PreprocessorDefinitions>NDEBUG;URTBLDENV_FRIENDLY=Retail;_AMD64_;_WIN64;AMD64;BIT64=1;_TARGET_64BIT_=1;_TARGET_AMD64_=1;DBG_TARGET_64BIT=1;DBG_TARGET_AMD64=1;DBG_TARGET_WIN64=1;WIN32;_WIN32;WINVER=0x0602;_WIN32_WINNT=0x0602;WIN32_LEAN_AND_MEAN=1;_CRT_SECURE_NO_WARNINGS;FEATURE_CORESYSTEM;FEATURE_COMINTEROP;FEATURE_HIJACK;_SECURE_SCL=0;CMAKE_INTDIR="RelWithDebInfo";%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalOptions>%(AdditionalOptions) /ZH:SHA_256</AdditionalOptions>
+      <IncludePaths>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths)</IncludePaths>
+    </MASM>
+    <Midl>
+      <AdditionalIncludeDirectories>..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
+      <HeaderFileName>%(Filename).h</HeaderFileName>
+      <TypeLibraryName>%(Filename).tlb</TypeLibraryName>
+      <InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
+      <ProxyFileName>%(Filename)_p.c</ProxyFileName>
+    </Midl>
+    <Lib>
+      <AdditionalOptions>%(AdditionalOptions) /machine:x64 /IGNORE:4221</AdditionalOptions>
+      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
+    </Lib>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+    <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/src/SOS/gcdump/gcdump.vcxproj.filters b/src/SOS/gcdump/gcdump.vcxproj.filters
new file mode 100644 (file)
index 0000000..88745c0
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Text Include="CMakeLists.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="i386">
+      <UniqueIdentifier>{f850f02d-2875-417b-a6cc-6058817844a0}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="i386\gcdumpx86.cpp">
+      <Filter>i386</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
index 6150527fee41463238e1714ba4daf898e95e9ead..5a59f1f2a72e31e57e181f9d52de4ca47a0525f1 100644 (file)
@@ -1,22 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|ARM">
-      <Configuration>Debug</Configuration>
-      <Platform>ARM</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|ARM">
-      <Configuration>Release</Configuration>
-      <Platform>ARM</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|ARM64">
-      <Configuration>Debug</Configuration>
-      <Platform>ARM64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|ARM64">
-      <Configuration>Release</Configuration>
-      <Platform>ARM64</Platform>
-    </ProjectConfiguration>
     <ProjectConfiguration Include="Debug|x86">
       <Configuration>Debug</Configuration>
       <Platform>x86</Platform>
     <ApplicationTypeRevision>1.0</ApplicationTypeRevision>
     <TargetLinuxPlatform>Generic</TargetLinuxPlatform>
     <LinuxProjectType>{D51BCBC9-82E9-4017-911E-C93873C4EA2B}</LinuxProjectType>
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration">
     <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'" Label="Configuration">
     <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
     <UseDebugLibraries>false</UseDebugLibraries>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
-    <UseDebugLibraries>false</UseDebugLibraries>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
-    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings" />
@@ -86,6 +63,7 @@
     <ClCompile Include="sosplugin.cpp" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="inc\lldbservices.h" />
     <ClInclude Include="mstypes.h" />
     <ClInclude Include="services.h" />
     <ClInclude Include="sosplugin.h" />
diff --git a/src/SOS/lldbplugin/lldbplugin.vcxproj.filters b/src/SOS/lldbplugin/lldbplugin.vcxproj.filters
new file mode 100644 (file)
index 0000000..e42fbc5
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="services.cpp" />
+    <ClCompile Include="setclrpathcommand.cpp" />
+    <ClCompile Include="setsostidcommand.cpp" />
+    <ClCompile Include="soscommand.cpp" />
+    <ClCompile Include="sosplugin.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="mstypes.h" />
+    <ClInclude Include="services.h" />
+    <ClInclude Include="sosplugin.h" />
+    <ClInclude Include="inc\lldbservices.h">
+      <Filter>inc</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Filter Include="inc">
+      <UniqueIdentifier>{32c8e536-f88f-4485-a168-9f9e9fab5822}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
index b2a97853f328756ce08a7541a5ad75136583815d..aec9f2ff1dcf337ad8c2d62121705e590e72b700 100644 (file)
@@ -155,6 +155,7 @@ sosCommandInitialize(lldb::SBDebugger debugger)
     interpreter.AddCommand("histobjfind", new sosCommand("HistObjFind"), "Displays all the log entries that reference an object at the specified address.");
     interpreter.AddCommand("histroot", new sosCommand("HistRoot"), "Displays information related to both promotions and relocations of the specified root.");
     interpreter.AddCommand("sethostruntime", new sosCommand("SetHostRuntime"), "Sets or displays the .NET Core runtime directory to use to run managed code in SOS.");
+    interpreter.AddCommand("setsymbolserver", new sosCommand("SetSymbolServer"), "Enables the symbol server support ");
     interpreter.AddCommand("soshelp", new sosCommand("Help"), "Displays all available commands when no parameter is specified, or displays detailed help information about the specified command. soshelp <command>");
     return true;
 }
index d94fa25b98b6b25680d6835793d17a727a648c71..4d6db4befa532174c55f2670b7fc93ff7eb454c4 100644 (file)
@@ -8,8 +8,10 @@
 
     <RootNamespace>Microsoft.Diagnostics.Tools.Analyze</RootNamespace>
 
+    <!-- Don't pack until ship engineering is done. Currently causing the official job to fail.
     <IsPackable>true</IsPackable>
     <PackAsTool>true</PackAsTool>
+    -->
   </PropertyGroup>
 
   <ItemGroup>
index 3de37c4c849620aec054a8c94c089397307f4ea1..092fb25d52d29d78a6534e86f85680d6a4ec81b3 100644 (file)
@@ -9,8 +9,10 @@
     <RootNamespace>Microsoft.Diagnostics.Tools.Collect</RootNamespace>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
 
+    <!-- Don't pack until ship engineering is done. Currently causing the official job to fail.
     <IsPackable>true</IsPackable>
     <PackAsTool>true</PackAsTool>
+    -->
   </PropertyGroup>
 
   <ItemGroup>
index 681014fc95001d28cbdef63d32c0993f6706cf64..8db5004f5e4a2ef518418b0b1dd5c45561836971 100644 (file)
@@ -2,6 +2,9 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 // See the LICENSE file in the project root for more information.
 
+#ifndef __ARRAYHOLDER_H__
+#define __ARRAYHOLDER_H__
+
 template <class T>
 class ArrayHolder    
 {
@@ -78,3 +81,5 @@ private:
 private:
     T *m_ptr;
 };
+
+#endif // __ARRAYHOLDER_H__
\ No newline at end of file