Work around a Linux arm32 unaligned data issue in SuperPMI (#56517)
authorBruce Forstall <brucefo@microsoft.com>
Fri, 30 Jul 2021 04:50:22 +0000 (21:50 -0700)
committerGitHub <noreply@github.com>
Fri, 30 Jul 2021 04:50:22 +0000 (21:50 -0700)
commit38ae818d8768a8fb5009349955eb572096da5f80
treeb95fa40c38138c2ac6557289bae5f8fa9fb4c48d
parent09c146c815d8a21f36cb138a2487c1b50877a0b0
Work around a Linux arm32 unaligned data issue in SuperPMI (#56517)

* Work around a Linux arm32 unaligned data issue in SuperPMI

impImportStaticReadOnlyField reads the data at the address returned by
getFieldAddress. SuperPMI saves and replays this data, but it doesn't
store it at a naturally aligned address. For int64/double (at least),
this is a problem on Linux arm32, which raises a SIGBUS exception on
such unaligned access.

This works around the problem by copying the potentially unaligned data
to a known aligned spot before reading it. This is only done under DEBUG
and when we know we are replaying under SuperPMI.

A proper fix would be to teach SuperPMI about alignment, but that would be
a large and risky change, compared to this small and isolated workaround.

The fixes the non-determinism of #56156.

* Only add alignment adjustment when required
src/coreclr/jit/importer.cpp