Fix field offset computation for large version bubble (#25029)
authorJan Vorlicek <janvorli@microsoft.com>
Mon, 10 Jun 2019 14:33:42 +0000 (16:33 +0200)
committerGitHub <noreply@github.com>
Mon, 10 Jun 2019 14:33:42 +0000 (16:33 +0200)
commit8f3aa314cc9c03f9bff54661d6607087bc3d4030
tree2fb63839e607618aed8f621db0851a8d22e3ab35
parent82222f6f39f08f0e9d5686b65afce3520cc5ecd0
Fix field offset computation for large version bubble (#25029)

There was a discrepancy in field offset calculations at crossgen time
and at runtime in some rare cases due to the alignment of a derived
class offset.
The issue happened due to MethodTableBuilder::NeedsAlignedBaseOffset not
taking into account the fact that the module of the parent and child
class can both be in large version bubble.

We also had a bug in the PEDecoder::GetNativeManifestMetadata. When it
was called for regular crossgened image without large version bubble, it
left the pDir uninitialized due to the fact that there was no
READYTORUN_SECTION_MANIFEST_METADATA. And then it tried to dereference
that.
src/utilcode/pedecoder.cpp
src/vm/ceeload.cpp
src/vm/ceeload.h
src/vm/methodtablebuilder.cpp