summaryrefslogtreecommitdiff
path: root/packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch')
-rw-r--r--packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch b/packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch
new file mode 100644
index 0000000000..292a01a424
--- /dev/null
+++ b/packaging/0001-Fix-crossgen-debug-directory-generation-problems.-12.patch
@@ -0,0 +1,75 @@
+From 2ae797a1e975e42dd448e7a345c698c98cd18ca6 Mon Sep 17 00:00:00 2001
+From: Mike McLaughlin <mikem@microsoft.com>
+Date: Tue, 11 Jul 2017 09:58:49 -0700
+Subject: [PATCH] Fix crossgen debug directory generation problems. (#12715)
+
+* Fix crossgen debug directory generation problems.
+
+The first problem was that when the existing/incoming PDB debug
+directory entry was a portable PDB (MinorVersion == 0x504d), the
+ngen/native PDB added had the same MinorVersion indicating that
+it was a portable PDB (but it never can be).
+
+This was fixed by setting MinorVersion to 0 when creating the
+ngen PDB debug directory entry.
+
+The second problem was that the ngen PDB entry was being created
+even when crossgen was run on linux/mac, etc.
+
+The fix was to ifdef NO_NGENPDB the save ngen PDB entry code.
+---
+ src/zap/zapheaders.cpp | 6 ++++++
+ src/zap/zapheaders.h | 5 +++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/src/zap/zapheaders.cpp b/src/zap/zapheaders.cpp
+index 8960798..f3dab63 100644
+--- a/src/zap/zapheaders.cpp
++++ b/src/zap/zapheaders.cpp
+@@ -282,6 +282,7 @@ void ZapDebugDirectory::SaveOriginalDebugDirectoryEntry(ZapWriter *pZapWriter)
+
+ void ZapDebugDirectory::SaveNGenDebugDirectoryEntry(ZapWriter *pZapWriter)
+ {
++#if !defined(NO_NGENPDB)
+ _ASSERTE(pZapWriter);
+
+ IMAGE_DEBUG_DIRECTORY debugDirectory = {0};
+@@ -292,6 +293,10 @@ void ZapDebugDirectory::SaveNGenDebugDirectoryEntry(ZapWriter *pZapWriter)
+ debugDirectory.Type = IMAGE_DEBUG_TYPE_CODEVIEW;
+ debugDirectory.SizeOfData = m_pNGenPdbDebugData->GetSize();
+ debugDirectory.AddressOfRawData = m_pNGenPdbDebugData->GetRVA();
++ // Make sure the "is portable pdb" indicator (MinorVersion == 0x504d) is clear
++ // for the NGen debug directory entry since this debug directory is copied
++ // from an existing entry which could be a portable pdb.
++ debugDirectory.MinorVersion = 0;
+ {
+ ZapPhysicalSection *pPhysicalSection = ZapImage::GetImage(pZapWriter)->m_pTextSection;
+ DWORD dwOffset = m_pNGenPdbDebugData->GetRVA() - pPhysicalSection->GetRVA();
+@@ -299,6 +304,7 @@ void ZapDebugDirectory::SaveNGenDebugDirectoryEntry(ZapWriter *pZapWriter)
+ debugDirectory.PointerToRawData = pPhysicalSection->GetFilePos() + dwOffset;
+ }
+ pZapWriter->Write(&debugDirectory, sizeof(debugDirectory));
++#endif // NO_NGENPDB
+ }
+
+ void ZapDebugDirectory::Save(ZapWriter * pZapWriter)
+diff --git a/src/zap/zapheaders.h b/src/zap/zapheaders.h
+index 0755c0e..f966ced 100644
+--- a/src/zap/zapheaders.h
++++ b/src/zap/zapheaders.h
+@@ -249,7 +249,12 @@ public:
+
+ virtual DWORD GetSize()
+ {
++#if defined(NO_NGENPDB)
++ return sizeof(IMAGE_DEBUG_DIRECTORY) * m_nDebugDirectory;
++#else
++ // Add one for NGen PDB debug directory entry
+ return sizeof(IMAGE_DEBUG_DIRECTORY) * (m_nDebugDirectory + 1);
++#endif // NO_NGENPDB
+ }
+
+ virtual UINT GetAlignment()
+--
+2.7.4
+