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), |