From: Mike McLaughlin Date: Thu, 13 Dec 2018 20:40:29 +0000 (-0800) Subject: Download symbols in lldb/sos and for portable PDBs on Windows/dbgeng. (#101) X-Git-Tag: submit/tizen/20190813.035844~66 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=64a5e582e82d9858f5fee20e89f30172e3e10533;p=platform%2Fcore%2Fdotnet%2Fdiagnostics.git Download symbols in lldb/sos and for portable PDBs on Windows/dbgeng. (#101) * 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. --- diff --git a/.vsts-dotnet.yml b/.vsts-dotnet.yml index 2f8a07386..2c1b71e03 100644 --- a/.vsts-dotnet.yml +++ b/.vsts-dotnet.yml @@ -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() diff --git a/diagnostics.sln b/diagnostics.sln index dbee3a5c7..324aba897 100644 --- a/diagnostics.sln +++ b/diagnostics.sln @@ -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} diff --git a/eng/Versions.props b/eng/Versions.props index 79bbe444f..0d2beffe8 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -15,14 +15,19 @@ 2.8.0-beta6-62830-08 - 1.5.0 + 1.6.0 + 1.5.0 4.3.0 + + + 1.0.0-dev-63604-01 $(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 diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index 177d64c47..99cacb712 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -1,4 +1,9 @@ + + diff --git a/src/SOS/SOS.NETCore/CMakeLists.txt b/src/SOS/SOS.NETCore/CMakeLists.txt index 735d541f3..9dcd85b14 100644 --- a/src/SOS/SOS.NETCore/CMakeLists.txt +++ b/src/SOS/SOS.NETCore/CMakeLists.txt @@ -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() diff --git a/src/SOS/SOS.NETCore/SOS.NETCore.csproj b/src/SOS/SOS.NETCore/SOS.NETCore.csproj index 87a7e0936..a4d723675 100644 --- a/src/SOS/SOS.NETCore/SOS.NETCore.csproj +++ b/src/SOS/SOS.NETCore/SOS.NETCore.csproj @@ -1,25 +1,27 @@  - netcoreapp1.0 + netcoreapp2.0 SOS.NETCore true ;1591;1701 true + true .NET Core SOS SOS $(Description) SOS false - $(ArtifactsBinDir)\SOS.NETCore\$(Configuration)\netcoreapp1.0\SOS.NETCore.dll + $(ArtifactsBinDir)\SOS.NETCore\$(Configuration)\netcoreapp2.0\publish\*.dll + - <_PackageFiles Include="$(SOSNETCorePath)"> + <_PackageFiles Include="$(SOSNETCoreBinaries)"> None tools/win-x64 @@ -28,7 +30,7 @@ tools/win-x64 - <_PackageFiles Include="$(SOSNETCorePath)"> + <_PackageFiles Include="$(SOSNETCoreBinaries)"> None tools/win-x86 @@ -37,7 +39,7 @@ tools/win-x86 - <_PackageFiles Include="$(SOSNETCorePath)"> + <_PackageFiles Include="$(SOSNETCoreBinaries)"> None tools/linux-x64 @@ -54,7 +56,7 @@ tools/linux-x64 - <_PackageFiles Include="$(SOSNETCorePath)"> + <_PackageFiles Include="$(SOSNETCoreBinaries)"> None tools/osx-x64 diff --git a/src/SOS/SOS.NETCore/SymbolReader.cs b/src/SOS/SOS.NETCore/SymbolReader.cs index 7a4bb5210..377014ffc 100644 --- a/src/SOS/SOS.NETCore/SymbolReader.cs +++ b/src/SOS/SOS.NETCore/SymbolReader.cs @@ -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; - } - /// - /// Read memory callback - /// - /// number of bytes read or 0 for error - 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 } /// - /// Quick fix for Path.GetFileName which incorrectly handles Windows-style paths on Linux + /// Symbol server URLs /// - /// File path to be processed - /// Last component of path - private static string GetFileName(string pathName) + const string MsdlsymbolServer = "http://msdl.microsoft.com/download/symbols/"; + const string SymwebSymbolService = "http://symweb.corp.microsoft.com/"; + + /// + /// Read memory callback + /// + /// number of bytes read or 0 for error + internal unsafe delegate int ReadMemoryDelegate(ulong address, byte* buffer, int count); + + /// + /// Writeline delegate for symbol store logging + /// + /// + internal delegate void WriteLine([MarshalAs(UnmanagedType.LPStr)] string message); + + static bool s_symbolCacheAdded = false; + static SymbolStore s_symbolStore = null; + static ITracer s_tracer = null; + + /// + /// 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. + /// + /// output callback delegate (not used currently) + /// if true, use the public microsoft server + /// if true, use symweb internal server and protocol (file.ptr) + /// symbol server url (optional) + /// symbol cache directory path (optional) + /// windows symbol path (optional) + /// + 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; + } + + /// + /// Parses the Windows debugger symbol path (srv*, cache*, etc.). + /// + /// symbol store to chain + /// Windows symbol path + /// if false, error parsing symbol path + 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(); } /// @@ -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 /// local variable index /// local variable name return /// true if name has been found - 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 locals) + + private static bool GetLocalsInfoForMethod(string assemblyPath, int methodToken, out List locals) { locals = null; @@ -451,8 +659,9 @@ namespace SOS return true; } + /// - /// 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. /// /// file path of the assembly /// method token @@ -557,7 +766,7 @@ namespace SOS /// /// file path of the assembly or null if the module is in-memory or dynamic /// type of in-memory PE layout, if true, file based layout otherwise, loaded layout - /// optional in-memory PE stream + /// in-memory PE stream /// optional in-memory PDB stream /// reader/provider wrapper instance /// @@ -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; } } + + /// + /// Quick fix for Path.GetFileName which incorrectly handles Windows-style paths on Linux + /// + /// File path to be processed + /// Last component of path + 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 index 000000000..d856a3fb6 --- /dev/null +++ b/src/SOS/SOS.NETCore/Tracer.cs @@ -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 +{ + /// + /// Simple trace/logging support. + /// + 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); + } + } + } +} diff --git a/src/SOS/Strike/CMakeLists.txt b/src/SOS/Strike/CMakeLists.txt index de9a1b644..17ce8cacb 100644 --- a/src/SOS/Strike/CMakeLists.txt +++ b/src/SOS/Strike/CMakeLists.txt @@ -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 index 000000000..ca82bf2b2 --- /dev/null +++ b/src/SOS/Strike/Strike.vcxproj @@ -0,0 +1,440 @@ + + + + + Debug + x64 + + + Checked + x64 + + + Release + x64 + + + RelWithDebInfo + x64 + + + + {41F59D85-FC36-3015-861B-F177863252BC} + 10.0.17134.0 + Win32Proj + x64 + Strike + NoUpgrade + + + + DynamicLibrary + MultiByte + v141 + + + DynamicLibrary + MultiByte + v141 + + + DynamicLibrary + MultiByte + v141 + + + DynamicLibrary + MultiByte + v141 + + + + + + + + + + + <_ProjectFileVersion>10.0.20506.1 + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Debug\ + sos.dir\Debug\ + sos + .dll + false + false + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Checked\ + sos.dir\Checked\ + sos + .dll + false + false + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\Release\ + sos.dir\Release\ + sos + .dll + false + false + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\Strike\RelWithDebInfo\ + sos.dir\RelWithDebInfo\ + sos + .dll + false + false + + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams + Debug/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + Disabled + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths) + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + ..\..\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 + %(AdditionalLibraryDirectories) + %(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /NOVCFEATURE + true + true + %(IgnoreSpecificDefaultLibraries) + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Debug/sos.lib + true + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Debug/sos.pdb + true + Console + + + + + false + + + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Checked/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths) + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + ..\..\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 + %(AdditionalLibraryDirectories) + %(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /NOVCFEATURE + true + false + true + %(IgnoreSpecificDefaultLibraries) + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Checked/sos.lib + true + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def + true + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Checked/sos.pdb + true + Console + + + + + false + + + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Release/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + 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) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths) + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + ..\..\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 + %(AdditionalLibraryDirectories) + %(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /DEFAULTLIB:ucrt.lib + true + true + true + libucrt.lib;%(IgnoreSpecificDefaultLibraries) + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Release/sos.lib + true + UseLinkTimeCodeGeneration + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/sos.def + true + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/Release/sos.pdb + true + Console + + + + + false + + + + + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + RelWithDebInfo/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\Strike;..\..\pal\prebuilt\inc;..\..\inc;..\..\SOS\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(IncludePaths) + + + Strike;..\..\pal\prebuilt\inc;..\..\inc;..\gcdump;..\..\SOS\debugshim;inc;C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\DIA SDK\include;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + ..\..\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 + %(AdditionalLibraryDirectories) + %(AdditionalOptions) /machine:x64 /GUARD:CF /SUBSYSTEM:WINDOWS,6.01 /PDBCOMPRESS /IGNORE:4197,4013,4254,4070,4221 /DEFAULTLIB:ucrt.lib + true + true + true + libucrt.lib;%(IgnoreSpecificDefaultLibraries) + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/RelWithDebInfo/sos.lib + true + UseLinkTimeCodeGeneration + sos.def + true + C:/ssd/diagnostics/artifacts/obj/Windows_NT.x64.Debug/src/SOS/Strike/RelWithDebInfo/sos.pdb + true + Console + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 000000000..cd5bb759b --- /dev/null +++ b/src/SOS/Strike/Strike.vcxproj.filters @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + xplat + + + xplat + + + xplat + + + inc + + + inc + + + inc + + + + + + + + + + + + {b766b3f8-a753-4134-bf7f-50c4f05b59b1} + + + {406edc67-c8c4-4f19-ad39-c799a63f4c2a} + + + + + + + + \ No newline at end of file diff --git a/src/SOS/Strike/datatarget.cpp b/src/SOS/Strike/datatarget.cpp index fdf63b066..049faa7fd 100644 --- a/src/SOS/Strike/datatarget.cpp +++ b/src/SOS/Strike/datatarget.cpp @@ -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 diff --git a/src/SOS/Strike/exts.cpp b/src/SOS/Strike/exts.cpp index 15cb26ab0..4f5d97dc3 100644 --- a/src/SOS/Strike/exts.cpp +++ b/src/SOS/Strike/exts.cpp @@ -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 index 000000000..e4f296829 --- /dev/null +++ b/src/SOS/Strike/hostcoreclr.cpp @@ -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 + +#include "corhdr.h" +#include "cor.h" +#include "dacprivate.h" +#include "sospriv.h" +#include "corerror.h" +#include "safemath.h" + +#include +#include +#include + +#ifdef FEATURE_PAL +#include +#include +#endif // !FEATURE_PAL + +#include +#include +#include + +#if defined(__APPLE__) +#include +#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 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(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 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 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 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 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 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 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 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 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 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 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 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 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 offsets(new ULONG32[seqPointCount]); + ArrayHolder lines(new ULONG32[seqPointCount]); + ArrayHolder columns(new ULONG32[seqPointCount]); + ArrayHolder endlines(new ULONG32[seqPointCount]); + ArrayHolder endcolumns(new ULONG32[seqPointCount]); + ArrayHolder> documents(new ToRelease[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 pSymMethod; + IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod)); + + ToRelease 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 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 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 pILFrame; + IfFailRet(pFrame->QueryInterface(IID_ICorDebugILFrame, (LPVOID*) &pILFrame)); + + ToRelease pFunction; + IfFailRet(pFrame->GetFunction(&pFunction)); + + mdMethodDef methodDef; + ToRelease pClass; + ToRelease 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> pDocs = NULL; + + IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, NULL)); + pDocs = new ToRelease[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 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 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 index 000000000..967c61c7f --- /dev/null +++ b/src/SOS/Strike/hostcoreclr.h @@ -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__ diff --git a/src/SOS/Strike/sos.def b/src/SOS/Strike/sos.def index 93aaa518f..dd0d3ea1c 100644 --- a/src/SOS/Strike/sos.def +++ b/src/SOS/Strike/sos.def @@ -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 diff --git a/src/SOS/Strike/sos_unixexports.src b/src/SOS/Strike/sos_unixexports.src index 1ecb20743..000da0345 100644 --- a/src/SOS/Strike/sos_unixexports.src +++ b/src/SOS/Strike/sos_unixexports.src @@ -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 diff --git a/src/SOS/Strike/sosdocsunix.txt b/src/SOS/Strike/sosdocsunix.txt index df82d08fb..35289e6b3 100644 --- a/src/SOS/Strike/sosdocsunix.txt +++ b/src/SOS/Strike/sosdocsunix.txt @@ -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() diff --git a/src/SOS/Strike/strike.cpp b/src/SOS/Strike/strike.cpp index 04fb66f96..bb9406950 100644 --- a/src/SOS/Strike/strike.cpp +++ b/src/SOS/Strike/strike.cpp @@ -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 szSOSModulePath = new char[MAX_LONGPATH + 1]; UINT cch = MAX_LONGPATH; if (!PAL_GetPALDirectoryA(szSOSModulePath, &cch)) { diff --git a/src/SOS/Strike/util.cpp b/src/SOS/Strike/util.cpp index 93fff4924..aae53ea08 100644 --- a/src/SOS/Strike/util.cpp +++ b/src/SOS/Strike/util.cpp @@ -52,13 +52,7 @@ PIMAGEHLP_SYMBOL sym = (PIMAGEHLP_SYMBOL) symBuffer; #include #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 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 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 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 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 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 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 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 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(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 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 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 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 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 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 offsets(new ULONG32[seqPointCount]); - ArrayHolder lines(new ULONG32[seqPointCount]); - ArrayHolder columns(new ULONG32[seqPointCount]); - ArrayHolder endlines(new ULONG32[seqPointCount]); - ArrayHolder endcolumns(new ULONG32[seqPointCount]); - ArrayHolder> documents(new ToRelease[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 pSymMethod; - IfFailRet(m_pSymReader->GetMethod(methodToken, &pSymMethod)); - - ToRelease 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 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 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 pILFrame; - IfFailRet(pFrame->QueryInterface(IID_ICorDebugILFrame, (LPVOID*) &pILFrame)); - - ToRelease pFunction; - IfFailRet(pFrame->GetFunction(&pFunction)); - - mdMethodDef methodDef; - ToRelease pClass; - ToRelease 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> pDocs = NULL; - - IfFailRet(m_pSymReader->GetDocuments(cDocs, &cDocsNeeded, NULL)); - pDocs = new ToRelease[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 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 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; diff --git a/src/SOS/Strike/util.h b/src/SOS/Strike/util.h index 94ee46d74..883cd722c 100644 --- a/src/SOS/Strike/util.h +++ b/src/SOS/Strike/util.h @@ -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 diff --git a/src/SOS/Strike/xplat/dbgeng.h b/src/SOS/Strike/xplat/dbgeng.h index aa71451b4..1e3928f43 100644 --- a/src/SOS/Strike/xplat/dbgeng.h +++ b/src/SOS/Strike/xplat/dbgeng.h @@ -14,6 +14,7 @@ #include #include #include +#include #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 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 index 000000000..9b4f9ff1c --- /dev/null +++ b/src/SOS/dbgutil/dbgutil.vcxproj @@ -0,0 +1,315 @@ + + + + + Debug + x64 + + + Checked + x64 + + + Release + x64 + + + RelWithDebInfo + x64 + + + + + + + + + + {A9A7C879-C320-3327-BB84-16E1322E17AE} + 10.0.17134.0 + Win32Proj + x64 + dbgutil + NoUpgrade + + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + + + + + + + + + <_ProjectFileVersion>10.0.20506.1 + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Debug\ + dbgutil.dir\Debug\ + dbgutil + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Checked\ + dbgutil.dir\Checked\ + dbgutil + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\Release\ + dbgutil.dir\Release\ + dbgutil + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\dbgutil\RelWithDebInfo\ + dbgutil.dir\RelWithDebInfo\ + dbgutil + .lib + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams + Debug/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + Disabled + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Checked/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Release/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + RelWithDebInfo/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + + + diff --git a/src/SOS/debugshim/debugshim.vcxproj b/src/SOS/debugshim/debugshim.vcxproj new file mode 100644 index 000000000..13b4cc5d0 --- /dev/null +++ b/src/SOS/debugshim/debugshim.vcxproj @@ -0,0 +1,315 @@ + + + + + Debug + x64 + + + Checked + x64 + + + Release + x64 + + + RelWithDebInfo + x64 + + + + {6A94C5FE-8706-3505-834E-DA16242F3864} + 10.0.17134.0 + Win32Proj + x64 + debugshim + NoUpgrade + + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + + + + + + + + + <_ProjectFileVersion>10.0.20506.1 + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Debug\ + debugshim.dir\Debug\ + debugshim + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Checked\ + debugshim.dir\Checked\ + debugshim + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\Release\ + debugshim.dir\Release\ + debugshim + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\debugshim\RelWithDebInfo\ + debugshim.dir\RelWithDebInfo\ + debugshim + .lib + + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams + Debug/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + Disabled + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Checked/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Release/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + RelWithDebInfo/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + + + + + + + + + diff --git a/src/SOS/gcdump/gcdump.vcxproj b/src/SOS/gcdump/gcdump.vcxproj new file mode 100644 index 000000000..1b3c7d487 --- /dev/null +++ b/src/SOS/gcdump/gcdump.vcxproj @@ -0,0 +1,319 @@ + + + + + Debug + x64 + + + Checked + x64 + + + Release + x64 + + + RelWithDebInfo + x64 + + + + + + + + + + + + + + {20EBC3C4-917C-402D-B778-9A6E3742BF5A} + 10.0.17134.0 + Win32Proj + x64 + gcdump + NoUpgrade + + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + StaticLibrary + MultiByte + v141 + + + + + + + + + + + <_ProjectFileVersion>10.0.20506.1 + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Debug\ + gcdump.dir\Debug\ + gcdump + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Checked\ + gcdump.dir\Checked\ + gcdump + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\Release\ + gcdump.dir\Release\ + gcdump + .lib + C:\ssd\diagnostics\artifacts\obj\Windows_NT.x64.Debug\src\SOS\gcdump\RelWithDebInfo\ + gcdump.dir\RelWithDebInfo\ + gcdump + .lib + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 /homeparams + Debug/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + Disabled + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Checked/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + Release/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + %(AdditionalOptions) /d2Zi+ /Zm200 /ZH:SHA_256 /source-charset:utf-8 + RelWithDebInfo/ + true + CompileAsCpp + Guard + ProgramDatabase + 4960;4961;4603;4627;4838;4456;4457;4458;4459;4091 + Async + true + WarningControl.h + true + true + false + true + true + false + MinSpace + NotUsing + MultiThreaded + false + true + 8Bytes + true + 4640 + false + true + _MT + true + Level3 + true + 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) + $(IntDir) + + + 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) + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + + + 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) + %(AdditionalOptions) /ZH:SHA_256 + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(IncludePaths) + + + ..\..\SOS\dbgutil;..\..\pal\prebuilt\inc;..\..\inc;%(AdditionalIncludeDirectories) + $(ProjectDir)/$(IntDir) + %(Filename).h + %(Filename).tlb + %(Filename)_i.c + %(Filename)_p.c + + + %(AdditionalOptions) /machine:x64 /IGNORE:4221 + true + + + + + + + \ 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 index 000000000..88745c0cf --- /dev/null +++ b/src/SOS/gcdump/gcdump.vcxproj.filters @@ -0,0 +1,16 @@ + + + + + + + + {f850f02d-2875-417b-a6cc-6058817844a0} + + + + + i386 + + + \ No newline at end of file diff --git a/src/SOS/lldbplugin/lldbplugin.vcxproj b/src/SOS/lldbplugin/lldbplugin.vcxproj index 6150527fe..5a59f1f2a 100644 --- a/src/SOS/lldbplugin/lldbplugin.vcxproj +++ b/src/SOS/lldbplugin/lldbplugin.vcxproj @@ -1,22 +1,6 @@  - - Debug - ARM - - - Release - ARM - - - Debug - ARM64 - - - Release - ARM64 - Debug x86 @@ -43,31 +27,24 @@ 1.0 Generic {D51BCBC9-82E9-4017-911E-C93873C4EA2B} + 10.0.17134.0 - - true - - - false - true + v141 false + v141 true + v141 false - - - false - - - true + v141 @@ -86,6 +63,7 @@ + diff --git a/src/SOS/lldbplugin/lldbplugin.vcxproj.filters b/src/SOS/lldbplugin/lldbplugin.vcxproj.filters new file mode 100644 index 000000000..e42fbc5dd --- /dev/null +++ b/src/SOS/lldbplugin/lldbplugin.vcxproj.filters @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + inc + + + + + {32c8e536-f88f-4485-a168-9f9e9fab5822} + + + \ No newline at end of file diff --git a/src/SOS/lldbplugin/soscommand.cpp b/src/SOS/lldbplugin/soscommand.cpp index b2a97853f..aec9f2ff1 100644 --- a/src/SOS/lldbplugin/soscommand.cpp +++ b/src/SOS/lldbplugin/soscommand.cpp @@ -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 "); return true; } diff --git a/src/Tools/dotnet-analyze/dotnet-analyze.csproj b/src/Tools/dotnet-analyze/dotnet-analyze.csproj index d94fa25b9..4d6db4bef 100644 --- a/src/Tools/dotnet-analyze/dotnet-analyze.csproj +++ b/src/Tools/dotnet-analyze/dotnet-analyze.csproj @@ -8,8 +8,10 @@ Microsoft.Diagnostics.Tools.Analyze + diff --git a/src/Tools/dotnet-collect/dotnet-collect.csproj b/src/Tools/dotnet-collect/dotnet-collect.csproj index 3de37c4c8..092fb25d5 100644 --- a/src/Tools/dotnet-collect/dotnet-collect.csproj +++ b/src/Tools/dotnet-collect/dotnet-collect.csproj @@ -9,8 +9,10 @@ Microsoft.Diagnostics.Tools.Collect true + diff --git a/src/inc/arrayholder.h b/src/inc/arrayholder.h index 681014fc9..8db5004f5 100644 --- a/src/inc/arrayholder.h +++ b/src/inc/arrayholder.h @@ -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 ArrayHolder { @@ -78,3 +81,5 @@ private: private: T *m_ptr; }; + +#endif // __ARRAYHOLDER_H__ \ No newline at end of file