[release/6.0] [Libraries][Android] Fix alignment for padding System.Decimal (#58380)
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Tue, 31 Aug 2021 14:32:53 +0000 (10:32 -0400)
committerGitHub <noreply@github.com>
Tue, 31 Aug 2021 14:32:53 +0000 (10:32 -0400)
commit114aa9aea320dd22d8904eb41a00d23f7ea0d0ee
tree693b5295dd4bfbbbb93fd6aed0ce382527d1725c
parent5a17bd832afeb8fd36df179ee9ad745335635b08
[release/6.0] [Libraries][Android] Fix alignment for padding System.Decimal (#58380)

Fixes #49872

There is a difference in the current alignment of a decimal type on Android x86 (32bit) MONO_ABI_ALIGNOF (gpointer) which evaluates to 4 bytes and whats expected, which is 8 bytes. The behavior of MONO_ABI_ALIGNOF (gpointer) seems correct as gpointer is void* and 32-bit aligned pointers on a 32-bit platform makes sense. Instead, it's suspected that using MONO_ABI_ALIGNOF (gpointer) as the alignment is not correct for Android x86 if we are expecting an align of 8 bytes.

Attempting to remove the entire special casing for System Decimal in marshal.c didn't seem to work as noted in #49872 (comment)

This PR will adhere to the alignment value of 4 for Android x86, remove the special casing for System.Decimal because CoreCLR had removed their special casing, and modifies the expected values in the tests. https://github.com/dotnet/corefx/pull/30690/files?file-filters%5B%5D=.cs#r199212623 makes me suspect these tests have yet to be modified to fully accomodate Linux platforms.
src/libraries/System.Runtime.InteropServices/tests/System/Runtime/InteropServices/Marshal/OffsetOfTests.cs
src/mono/mono/metadata/marshal.c