| Index: runtime/vm/snapshot.cc
|
| diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
|
| index 97f0d847dcd9e5a7d89a2614a1cbcede2bab1937..84ef21f7c2af9df56e5cc8fff4f6ec4f8f81cc67 100644
|
| --- a/runtime/vm/snapshot.cc
|
| +++ b/runtime/vm/snapshot.cc
|
| @@ -182,6 +182,59 @@ const Snapshot* Snapshot::SetupFromBuffer(const void* raw_memory) {
|
| }
|
|
|
|
|
| +const char* Snapshot::FeaturesString(Kind kind) {
|
| + TextBuffer buffer(64);
|
| +
|
| +// Different fields are included for DEBUG/RELEASE/PRODUCT.
|
| +#if defined(DEBUG)
|
| + buffer.AddString("debug");
|
| +#elif defined(PRODUCT)
|
| + buffer.AddString("product");
|
| +#else
|
| + buffer.AddString("release");
|
| +#endif
|
| +
|
| + if (Snapshot::IncludesCode(kind)) {
|
| + // Checked mode affects deopt ids.
|
| + Isolate* isolate = Isolate::Current();
|
| + buffer.AddString(isolate->asserts() ? " asserts" : " no-asserts");
|
| + buffer.AddString(isolate->type_checks() ? " type-checks"
|
| + : " no-type-checks");
|
| +
|
| +// Generated code must match the host architecture and ABI.
|
| +#if defined(TARGET_ARCH_ARM)
|
| +#if defined(TARGET_ABI_IOS)
|
| + buffer.AddString(" arm-ios");
|
| +#elif defined(TARGET_ABI_EABI)
|
| + buffer.AddString(" arm-eabi");
|
| +#else
|
| +#error Unknown ABI
|
| +#endif
|
| + buffer.AddString(TargetCPUFeatures::hardfp_supported() ? " hardfp"
|
| + : " softfp");
|
| +#elif defined(TARGET_ARCH_ARM64)
|
| + buffer.AddString(" arm64");
|
| +#elif defined(TARGET_ARCH_MIPS)
|
| + buffer.AddString(" mips");
|
| +#elif defined(TARGET_ARCH_IA32)
|
| + buffer.AddString(" ia32");
|
| +#elif defined(TARGET_ARCH_X64)
|
| +#if defined(_WIN64)
|
| + buffer.AddString(" x64-win");
|
| +#else
|
| + buffer.AddString(" x64-sysv");
|
| +#endif
|
| +#elif defined(TARGET_ARCH_DBC)
|
| + buffer.AddString(" dbc");
|
| +#elif defined(TARGET_ARCH_DBC64)
|
| + buffer.AddString(" dbc64");
|
| +#endif
|
| + }
|
| +
|
| + return buffer.Steal();
|
| +}
|
| +
|
| +
|
| RawSmi* BaseReader::ReadAsSmi() {
|
| intptr_t value = Read<int32_t>();
|
| ASSERT((value & kSmiTagMask) == kSmiTag);
|
| @@ -639,7 +692,7 @@ RawApiError* SnapshotReader::VerifyVersionAndFeatures() {
|
| }
|
| Advance(version_len);
|
|
|
| - const char* expected_features = Dart::FeaturesString(kind_);
|
| + const char* expected_features = Snapshot::FeaturesString(kind_);
|
| ASSERT(expected_features != NULL);
|
| const intptr_t expected_len = strlen(expected_features);
|
|
|
| @@ -1842,7 +1895,7 @@ void SnapshotWriter::WriteVersionAndFeatures() {
|
| const intptr_t version_len = strlen(expected_version);
|
| WriteBytes(reinterpret_cast<const uint8_t*>(expected_version), version_len);
|
|
|
| - const char* expected_features = Dart::FeaturesString(kind_);
|
| + const char* expected_features = Snapshot::FeaturesString(kind_);
|
| ASSERT(expected_features != NULL);
|
| const intptr_t features_len = strlen(expected_features);
|
| WriteBytes(reinterpret_cast<const uint8_t*>(expected_features),
|
|
|