[vm/ffi] Fix host-target word mismatch breaking AOT callbacks in ARM_X64.

Addresses https://github.com/dart-lang/sdk/issues/38718

Change-Id: If416feb182da1d3a13d4a78770c9e240a0fe17cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120584
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
This commit is contained in:
Samir Jindel 2019-10-07 14:49:31 +00:00 committed by commit-bot@chromium.org
parent 5f7b837195
commit 8c5236f55e
2 changed files with 8 additions and 6 deletions

View file

@ -750,6 +750,7 @@ class PrecompilerCompilerConfiguration extends CompilerConfiguration
case Architecture.ia32:
case Architecture.simarm:
case Architecture.arm:
case Architecture.arm_x64:
case Architecture.arm64:
ccFlags = null;
break;

View file

@ -925,16 +925,17 @@ void BlobImageWriter::WriteText(WriteStream* clustered_stream, bool vm) {
// This header provides the gap to make the instructions snapshot look like a
// HeapPage.
instructions_blob_stream_.WriteWord(instructions_length);
instructions_blob_stream_.WriteTargetWord(instructions_length);
#if defined(DART_PRECOMPILER)
instructions_blob_stream_.WriteWord(elf_ != nullptr ? bss_base - segment_base
: 0);
instructions_blob_stream_.WriteTargetWord(
elf_ != nullptr ? bss_base - segment_base : 0);
#else
instructions_blob_stream_.WriteWord(0); // No relocations.
instructions_blob_stream_.WriteTargetWord(0); // No relocations.
#endif
intptr_t header_words = Image::kHeaderSize / sizeof(uword);
const intptr_t header_words =
Image::kHeaderSize / sizeof(compiler::target::uword);
for (intptr_t i = Image::kHeaderFields; i < header_words; i++) {
instructions_blob_stream_.WriteWord(0);
instructions_blob_stream_.WriteTargetWord(0);
}
intptr_t text_offset = 0;