diff --git a/pkg/front_end/test/crashing_test_case_minimizer.dart b/pkg/front_end/test/crashing_test_case_minimizer.dart
index 55c2b69..e63fe77 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer.dart
@@ -50,12 +50,12 @@
           }
         } else if (arg.startsWith("--widgetTransformation")) {
           settings.widgetTransformation = true;
-        } else if (arg.startsWith("--target=VM")) {
-          settings.targetString = "VM";
+        } else if (arg.startsWith("--target=vm")) {
+          settings.targetString = "vm";
         } else if (arg.startsWith("--target=flutter")) {
           settings.targetString = "flutter";
-        } else if (arg.startsWith("--target=ddc")) {
-          settings.targetString = "ddc";
+        } else if (arg.startsWith("--target=dartdevc")) {
+          settings.targetString = "dartdevc";
         } else if (arg.startsWith("--target=dart2js")) {
           settings.targetString = "dart2js";
         } else if (arg == "--noTryToDeleteEmptyFilesUpFront") {
diff --git a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
index 7bca147..3e6e11d 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -735,7 +735,7 @@
 type: newworld""");
     if (_settings.widgetTransformation) {
       print("trackWidgetCreation: true");
-      print("target: DDC # basically needed for widget creation to be run");
+      print("target: dartdevc # needed for widget creation to be run");
     }
     print("""
 worlds:
@@ -1939,13 +1939,13 @@
         trackWidgetCreation: _settings.widgetTransformation);
     Target target;
     switch (_settings.targetString) {
-      case "VM":
+      case "vm":
         target = new VmTarget(targetFlags);
         break;
       case "flutter":
         target = new FlutterTarget(targetFlags);
         break;
-      case "ddc":
+      case "dartdevc":
         target = new DevCompilerTarget(targetFlags);
         break;
       case "dart2js":
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index f6c4e9e..006b93a 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -169,15 +169,15 @@
   static const Property<String?> nnbdMode =
       Property.optional('nnbdMode', StringValue(options: {nnbdMode_strong}));
 
-  static const String target_none = 'None';
-  static const String target_ddc = 'DDC';
+  static const String target_none = 'none';
+  static const String target_dartdevc = 'dartdevc';
   static const String target_dart2js = 'dart2js';
-  static const String target_vm = 'VM';
+  static const String target_vm = 'vm';
 
   static const Property<String?> target = Property.optional(
       'target',
       StringValue(
-          options: {target_none, target_ddc, target_dart2js, target_vm}));
+          options: {target_none, target_dartdevc, target_dart2js, target_vm}));
 }
 
 /// Yaml properties for a [World] within a [NewWorldTest].
@@ -1073,7 +1073,7 @@
     if (targetName != null) {
       if (targetName == NewWorldTestProperties.target_none) {
         target = new NoneTarget(targetFlags);
-      } else if (targetName == NewWorldTestProperties.target_ddc) {
+      } else if (targetName == NewWorldTestProperties.target_dartdevc) {
         target = new DevCompilerTarget(targetFlags);
       } else if (targetName == NewWorldTestProperties.target_dart2js) {
         target = new Dart2jsTarget("dart2js", targetFlags);
diff --git a/pkg/front_end/testcases/incremental/changing_modules_13.yaml b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
index 050087a..fb2ea73 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_13.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_13.yaml
@@ -5,7 +5,7 @@
 # Reproduction of https://github.com/flutter/flutter/issues/40966.
 
 type: newworld
-target: None
+target: none
 modules:
   module:
     module/a.dart: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_14.yaml b/pkg/front_end/testcases/incremental/changing_modules_14.yaml
index d3973fe..9f7e7cf 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_14.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_14.yaml
@@ -8,7 +8,7 @@
 
 type: newworld
 # Set to DDC for compiling modules as outline.
-target: DDC
+target: dartdevc
 modules:
   moduleC:
     moduleC/lib.dart: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_15.yaml b/pkg/front_end/testcases/incremental/changing_modules_15.yaml
index ee0493c..23d322a 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_15.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_15.yaml
@@ -8,7 +8,7 @@
 
 type: newworld
 # Set to DDC for compiling modules as outline.
-target: DDC
+target: dartdevc
 modules:
   moduleC:
     moduleC/lib.dart: |
diff --git a/pkg/front_end/testcases/incremental/changing_modules_16.yaml b/pkg/front_end/testcases/incremental/changing_modules_16.yaml
index 69ad3b9..3552cd5 100644
--- a/pkg/front_end/testcases/incremental/changing_modules_16.yaml
+++ b/pkg/front_end/testcases/incremental/changing_modules_16.yaml
@@ -8,7 +8,7 @@
 # This is essentially equivalent to not loading a needed component.
 
 type: newworld
-target: DDC
+target: dartdevc
 modules:
   moduleA:
     moduleA/x/lib.dart: |
diff --git a/pkg/front_end/testcases/incremental/constructor_change.yaml b/pkg/front_end/testcases/incremental/constructor_change.yaml
index 08eb555..ed39afdf 100644
--- a/pkg/front_end/testcases/incremental/constructor_change.yaml
+++ b/pkg/front_end/testcases/incremental/constructor_change.yaml
@@ -6,7 +6,7 @@
 # Try to mess up the hierarchy.
 
 type: newworld
-target: DDC
+target: dartdevc
 worlds:
   - entry: main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/crash_01.yaml b/pkg/front_end/testcases/incremental/crash_01.yaml
index d8c9c08..6cc3879 100644
--- a/pkg/front_end/testcases/incremental/crash_01.yaml
+++ b/pkg/front_end/testcases/incremental/crash_01.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: DDC # basically needed for widget creation to be run
+target: dartdevc # basically needed for widget creation to be run
 worlds:
   - entry: app/main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/crash_02.yaml b/pkg/front_end/testcases/incremental/crash_02.yaml
index 7a10c94..6182857 100644
--- a/pkg/front_end/testcases/incremental/crash_02.yaml
+++ b/pkg/front_end/testcases/incremental/crash_02.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: DDC # basically needed for widget creation to be run
+target: dartdevc # basically needed for widget creation to be run
 worlds:
   - entry: app/main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/crash_03.yaml b/pkg/front_end/testcases/incremental/crash_03.yaml
index 4d1be72..109f87a 100644
--- a/pkg/front_end/testcases/incremental/crash_03.yaml
+++ b/pkg/front_end/testcases/incremental/crash_03.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: DDC # basically needed for widget creation to be run
+target: dartdevc # basically needed for widget creation to be run
 worlds:
   - entry: app/main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/crash_04.yaml b/pkg/front_end/testcases/incremental/crash_04.yaml
index 7a10c94..6182857 100644
--- a/pkg/front_end/testcases/incremental/crash_04.yaml
+++ b/pkg/front_end/testcases/incremental/crash_04.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: DDC # basically needed for widget creation to be run
+target: dartdevc # basically needed for widget creation to be run
 worlds:
   - entry: app/main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
index 38de9ca..a2938ad 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: VM
+target: vm
 worlds:
   - entry: main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
index fa61ced..fd5d892 100644
--- a/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
+++ b/pkg/front_end/testcases/incremental/error_on_recompile_with_no_change_02.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: VM
+target: vm
 worlds:
   - entry: main.dart
     sources:
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
index 1322120..079b1a3 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml
@@ -6,7 +6,7 @@
 # https://github.com/flutter/flutter/issues/66122
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
index dd756a9..979ff19 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
index 95b124a..6e31982 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
index 6bb2b2b..a2b05ff 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
index 1853f91..84da5a7 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
index 0c8de3b..63ecfb5 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
index a7ec07e..4c0219b 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: None
+target: none
 worlds:
   - entry: main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml
index 5977f3e..7ce6402 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_44_flutter.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: DDC # basically needed for widget creation to be run
+target: dartdevc # basically needed for widget creation to be run
 worlds:
   - entry: flutter_gallery/lib/main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
index 004729a..27f769a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: VM
+target: vm
 worlds:
   - entry: main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
index 8e05100..5de6466 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_45_flutter_prime_1.yaml
@@ -6,7 +6,7 @@
 
 type: newworld
 trackWidgetCreation: true
-target: VM
+target: vm
 worlds:
   - entry: main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
index 5917122..3fc668c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
+++ b/pkg/front_end/testcases/incremental/no_outline_change_46.yaml
@@ -5,7 +5,7 @@
 # Reproduce a crash.
 
 type: newworld
-target: VM
+target: vm
 worlds:
   - entry: main.dart
     experiments: alternative-invalidation-strategy
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml b/pkg/front_end/testcases/incremental/super_key.yaml
index df78096..2acc66e 100644
--- a/pkg/front_end/testcases/incremental/super_key.yaml
+++ b/pkg/front_end/testcases/incremental/super_key.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE.md file.
 
 type: newworld
-target: DDC
+target: dartdevc
 trackWidgetCreation: true
 worlds:
   - entry: main.dart
diff --git a/pkg/native_stack_traces/CHANGELOG.md b/pkg/native_stack_traces/CHANGELOG.md
index a1b47ce..92ccfee 100644
--- a/pkg/native_stack_traces/CHANGELOG.md
+++ b/pkg/native_stack_traces/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.5.1
+
+- Parse new OS and architecture information from non-symbolic stack
+  trace headers and store that information in PCOffsets when available.
+
 ## 0.5.0
 
 - Require Dart >= 2.17 (enhanced enum support)
diff --git a/pkg/native_stack_traces/bin/decode.dart b/pkg/native_stack_traces/bin/decode.dart
index cb44a02..841cd8b 100644
--- a/pkg/native_stack_traces/bin/decode.dart
+++ b/pkg/native_stack_traces/bin/decode.dart
@@ -200,7 +200,8 @@
   }
 
   PCOffset? convertAddress(StackTraceHeader header, String s) {
-    final parsedOffset = tryParseSymbolOffset(s, forceHexadecimal);
+    final parsedOffset =
+        tryParseSymbolOffset(s, forceHexadecimal: forceHexadecimal);
     if (parsedOffset != null) return parsedOffset;
 
     final address = tryParseIntAddress(s);
@@ -236,7 +237,7 @@
     isolateStart = address;
   }
 
-  final header = StackTraceHeader(isolateStart, vmStart);
+  final header = StackTraceHeader.fromStarts(isolateStart, vmStart);
 
   final locations = <PCOffset>[];
   for (final String s in [
diff --git a/pkg/native_stack_traces/lib/src/convert.dart b/pkg/native_stack_traces/lib/src/convert.dart
index 0bc8f24..ebcdffd 100644
--- a/pkg/native_stack_traces/lib/src/convert.dart
+++ b/pkg/native_stack_traces/lib/src/convert.dart
@@ -11,45 +11,99 @@
 String _stackTracePiece(CallInfo call, int depth) =>
     '#${depth.toString().padRight(6)} $call';
 
-// A pattern matching the last line of the non-symbolic stack trace header.
-//
-// Currently, this happens to include the only pieces of information from the
-// stack trace header we need: the absolute addresses during program
-// execution of the start of the isolate and VM instructions.
+// The initial header line in a non-symbolic stack trace.
+const _headerStartLine =
+    '*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***';
+
+// A pattern matching the os/arch line of the non-symbolic stack trace header.
 //
 // This RegExp has been adjusted to parse the header line found in
 // non-symbolic stack traces and the modified version in signal handler stack
 // traces.
-final _headerEndRE = RegExp(r'isolate_instructions(?:=|: )([\da-f]+),? '
-    r'vm_instructions(?:=|: )([\da-f]+)');
+final _osArchLineRE = RegExp(r'os(?:=|: )(\S+?),? '
+    r'arch(?:=|: )(\S+?),? comp(?:=|: )(yes|no),? sim(?:=|: )(yes|no)');
 
-// Parses instructions section information into a new [StackTraceHeader].
+// A pattern matching the last line of the non-symbolic stack trace header.
 //
-// Returns a new [StackTraceHeader] if [line] contains the needed header
-// information, otherwise returns `null`.
-StackTraceHeader? _parseInstructionsLine(String line) {
-  final match = _headerEndRE.firstMatch(line);
-  if (match == null) return null;
-  final isolateAddr = int.parse(match[1]!, radix: 16);
-  final vmAddr = int.parse(match[2]!, radix: 16);
-  return StackTraceHeader(isolateAddr, vmAddr);
-}
+// This RegExp has been adjusted to parse the header line found in
+// non-symbolic stack traces and the modified version in signal handler stack
+// traces.
+final _instructionsLineRE = RegExp(r'isolate_instructions(?:=|: )([\da-f]+),? '
+    r'vm_instructions(?:=|: )([\da-f]+)');
 
 /// Header information for a non-symbolic Dart stack trace.
 class StackTraceHeader {
-  final int _isolateStart;
-  final int _vmStart;
+  String? _os;
+  String? _arch;
+  bool? _compressed;
+  bool? _simulated;
+  int? _isolateStart;
+  int? _vmStart;
 
-  StackTraceHeader(this._isolateStart, this._vmStart);
+  String? get os => _os;
+  String? get architecture => _arch;
+  bool? get compressedPointers => _compressed;
+  bool? get usingSimulator => _simulated;
+
+  static StackTraceHeader fromStarts(int isolateStart, int vmStart) =>
+      StackTraceHeader()
+        .._isolateStart = isolateStart
+        .._vmStart = vmStart;
+
+  /// Try and parse the given line as one of the recognized lines in the
+  /// header of a non-symbolic stack trace.
+  ///
+  /// Returns whether the line was recognized and parsed successfully.
+  bool tryParseHeaderLine(String line) {
+    if (line.contains(_headerStartLine)) {
+      // This is the start of a new non-symbolic stack trace, so reset all the
+      // stored information to be parsed anew.
+      _os = null;
+      _arch = null;
+      _compressed = null;
+      _simulated = null;
+      _isolateStart = null;
+      _vmStart = null;
+      return true;
+    }
+    RegExpMatch? match = _osArchLineRE.firstMatch(line);
+    if (match != null) {
+      _os = match[1]!;
+      _arch = match[2]!;
+      _compressed = match[3]! == "yes";
+      _simulated = match[4]! == "yes";
+      // The architecture line always proceeds the instructions section line,
+      // so reset these to null just in case we missed the header line.
+      _isolateStart = null;
+      _vmStart = null;
+      return true;
+    }
+    match = _instructionsLineRE.firstMatch(line);
+    if (match != null) {
+      _isolateStart = int.parse(match[1]!, radix: 16);
+      _vmStart = int.parse(match[2]!, radix: 16);
+      return true;
+    }
+    return false;
+  }
 
   /// The [PCOffset] for the given absolute program counter address.
-  PCOffset offsetOf(int address) {
-    final isolateOffset = address - _isolateStart;
-    var vmOffset = address - _vmStart;
+  PCOffset? offsetOf(int address) {
+    if (_isolateStart == null || _vmStart == null) return null;
+    final isolateOffset = address - _isolateStart!;
+    var vmOffset = address - _vmStart!;
     if (vmOffset > 0 && vmOffset == min(vmOffset, isolateOffset)) {
-      return PCOffset(vmOffset, InstructionsSection.vm);
+      return PCOffset(vmOffset, InstructionsSection.vm,
+          os: _os,
+          architecture: _arch,
+          compressedPointers: _compressed,
+          usingSimulator: _simulated);
     } else {
-      return PCOffset(isolateOffset, InstructionsSection.isolate);
+      return PCOffset(isolateOffset, InstructionsSection.isolate,
+          os: _os,
+          architecture: _arch,
+          compressedPointers: _compressed,
+          usingSimulator: _simulated);
     }
   }
 }
@@ -81,7 +135,8 @@
 /// any hexdecimal digits will be parsed as decimal.
 ///
 /// Returns null if the string is not of the expected format.
-PCOffset? tryParseSymbolOffset(String s, [bool forceHexadecimal = false]) {
+PCOffset? tryParseSymbolOffset(String s,
+    {bool forceHexadecimal = false, StackTraceHeader? header}) {
   final match = _symbolOffsetRE.firstMatch(s);
   if (match == null) return null;
   final symbolString = match.namedGroup('symbol')!;
@@ -99,31 +154,38 @@
   if (offset == null) return null;
   switch (symbolString) {
     case constants.vmSymbolName:
-      return PCOffset(offset, InstructionsSection.vm);
+      return PCOffset(offset, InstructionsSection.vm,
+          os: header?.os,
+          architecture: header?.architecture,
+          compressedPointers: header?.compressedPointers,
+          usingSimulator: header?.usingSimulator);
     case constants.isolateSymbolName:
-      return PCOffset(offset, InstructionsSection.isolate);
+      return PCOffset(offset, InstructionsSection.isolate,
+          os: header?.os,
+          architecture: header?.architecture,
+          compressedPointers: header?.compressedPointers,
+          usingSimulator: header?.usingSimulator);
     default:
       break;
   }
   return null;
 }
 
-PCOffset? _retrievePCOffset(StackTraceHeader? header, RegExpMatch? match) {
+PCOffset? _retrievePCOffset(StackTraceHeader header, RegExpMatch? match) {
   if (match == null) return null;
   final restString = match.namedGroup('rest')!;
   // Try checking for symbol information first, since we don't need the header
   // information to translate it.
   if (restString.isNotEmpty) {
-    final offset = tryParseSymbolOffset(restString);
+    final offset = tryParseSymbolOffset(restString, header: header);
     if (offset != null) return offset;
   }
   // If we're parsing the absolute address, we can only convert it into
   // a PCOffset if we saw the instructions line of the stack trace header.
-  if (header != null) {
-    final addressString = match.namedGroup('absolute')!;
-    final address = int.parse(addressString, radix: 16);
-    return header.offsetOf(address);
-  }
+  final addressString = match.namedGroup('absolute')!;
+  final address = int.parse(addressString, radix: 16);
+  final pcOffset = header.offsetOf(address);
+  if (pcOffset != null) return pcOffset;
   // If all other cases failed, check for a virtual address. Until this package
   // depends on a version of Dart which only prints virtual addresses when the
   // virtual addresses in the snapshot are the same as in separately saved
@@ -131,18 +193,20 @@
   final virtualString = match.namedGroup('virtual');
   if (virtualString != null) {
     final address = int.parse(virtualString, radix: 16);
-    return PCOffset(address, InstructionsSection.none);
+    return PCOffset(address, InstructionsSection.none,
+        os: header.os,
+        architecture: header.architecture,
+        compressedPointers: header.compressedPointers,
+        usingSimulator: header.usingSimulator);
   }
   return null;
 }
 
 /// The [PCOffset]s for frames of the non-symbolic stack traces in [lines].
 Iterable<PCOffset> collectPCOffsets(Iterable<String> lines) sync* {
-  StackTraceHeader? header;
+  final header = StackTraceHeader();
   for (var line in lines) {
-    final parsedHeader = _parseInstructionsLine(line);
-    if (parsedHeader != null) {
-      header = parsedHeader;
+    if (header.tryParseHeaderLine(line)) {
       continue;
     }
     final match = _traceLineRE.firstMatch(line);
@@ -185,11 +249,10 @@
   @override
   Stream<String> bind(Stream<String> stream) async* {
     var depth = 0;
-    StackTraceHeader? header;
+    final header = StackTraceHeader();
     await for (final line in stream) {
-      final parsedHeader = _parseInstructionsLine(line);
-      if (parsedHeader != null) {
-        header = parsedHeader;
+      // If we successfully parse a header line, then we reset the depth to 0.
+      if (header.tryParseHeaderLine(line)) {
         depth = 0;
         yield line;
         continue;
diff --git a/pkg/native_stack_traces/lib/src/dwarf.dart b/pkg/native_stack_traces/lib/src/dwarf.dart
index 9944f2d..13fac70 100644
--- a/pkg/native_stack_traces/lib/src/dwarf.dart
+++ b/pkg/native_stack_traces/lib/src/dwarf.dart
@@ -1451,12 +1451,34 @@
 enum InstructionsSection { none, vm, isolate }
 
 /// A program counter address viewed as an offset into the appropriate
-/// instructions section of a Dart snapshot.
+/// instructions section of a Dart snapshot. Includes other information
+/// parsed from the corresponding stack trace header when possible.
 class PCOffset {
+  /// The offset into the corresponding instructions section.
   final int offset;
+
+  /// The instructions section into which this is an offset.
   final InstructionsSection section;
 
-  PCOffset(this.offset, this.section);
+  /// The operating system on which the stack trace was generated, when
+  /// available.
+  final String? os;
+
+  /// The architecture on which the stack trace was generated, when
+  /// available.
+  final String? architecture;
+
+  /// Whether compressed pointers were enabled, when available.
+  final bool? compressedPointers;
+
+  /// Whether the architecture was being simulated, when available.
+  final bool? usingSimulator;
+
+  PCOffset(this.offset, this.section,
+      {this.os,
+      this.architecture,
+      this.compressedPointers,
+      this.usingSimulator});
 
   /// The virtual address for this [PCOffset] in [dwarf].
   int virtualAddressIn(Dwarf dwarf) => dwarf.virtualAddressOf(this);
@@ -1469,7 +1491,7 @@
   /// to user or library code is returned.
   Iterable<CallInfo>? callInfoFrom(Dwarf dwarf,
           {bool includeInternalFrames = false}) =>
-      dwarf.callInfoFor(dwarf.virtualAddressOf(this),
+      dwarf.callInfoForPCOffset(this,
           includeInternalFrames: includeInternalFrames);
 
   @override
@@ -1477,10 +1499,38 @@
 
   @override
   bool operator ==(Object other) =>
-      other is PCOffset && offset == other.offset && section == other.section;
+      other is PCOffset &&
+      offset == other.offset &&
+      section == other.section &&
+      os == other.os &&
+      architecture == other.architecture &&
+      compressedPointers == other.compressedPointers &&
+      usingSimulator == other.usingSimulator;
 
   @override
-  String toString() => 'PCOffset($section, 0x${offset.toRadixString(16)})';
+  String toString() {
+    final buffer = StringBuffer();
+    buffer
+      ..write('PCOffset(')
+      ..write(section)
+      ..write(', 0x')
+      ..write(offset.toRadixString(16));
+    if (os != null) {
+      buffer
+        ..write(', ')
+        ..write(os!);
+    }
+    if (architecture != null) {
+      if (usingSimulator ?? false) {
+        buffer.write('SIM');
+      }
+      buffer.write(architecture!.toUpperCase());
+      if (compressedPointers ?? false) {
+        buffer.write('C');
+      }
+    }
+    return buffer.toString();
+  }
 }
 
 /// The DWARF debugging information for a Dart snapshot.
@@ -1583,6 +1633,19 @@
     return calls;
   }
 
+  /// The call information for the given [PCOffset]. There may be multiple
+  /// [CallInfo] objects returned for a single [PCOffset] when code has been
+  /// inlined.
+  ///
+  /// Returns null if the given address is invalid for the DWARF information.
+  ///
+  /// If [includeInternalFrames] is false, then only information corresponding
+  /// to user or library code is returned.
+  Iterable<CallInfo>? callInfoForPCOffset(PCOffset pcOffset,
+          {bool includeInternalFrames = false}) =>
+      callInfoFor(virtualAddressOf(pcOffset),
+          includeInternalFrames: includeInternalFrames);
+
   /// The virtual address in this DWARF information for the given [PCOffset].
   int virtualAddressOf(PCOffset pcOffset) {
     switch (pcOffset.section) {
diff --git a/pkg/native_stack_traces/pubspec.yaml b/pkg/native_stack_traces/pubspec.yaml
index 09ed948..2497e11 100644
--- a/pkg/native_stack_traces/pubspec.yaml
+++ b/pkg/native_stack_traces/pubspec.yaml
@@ -1,5 +1,5 @@
 name: native_stack_traces
-version: 0.5.0
+version: 0.5.1
 description: Utilities for working with non-symbolic stack traces.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/native_stack_traces
 
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 2241e87..e26d9fb 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -321,7 +321,7 @@
 class MigrationResolutionHooksImpl
     with ResolutionUtils
     implements MigrationResolutionHooks {
-  FixBuilder? _fixBuilder;
+  late final FixBuilder _fixBuilder;
 
   final Expando<List<CollectionElement>> _collectionElements = Expando();
 
@@ -340,7 +340,7 @@
 
   final Map<Expression, DartType?> _contextTypes = {};
 
-  TypeProvider get typeProvider => _fixBuilder!.typeProvider;
+  TypeProvider get typeProvider => _fixBuilder.typeProvider;
 
   @override
   void freshTypeParameterCreated(TypeParameterElement newTypeParameter,
@@ -352,7 +352,7 @@
   @override
   List<InterfaceType> getClassInterfaces(AbstractClassElementImpl element) {
     return _wrapExceptions(
-        _fixBuilder!.unit,
+        _fixBuilder.unit,
         () => element.interfacesInternal,
         () => [
               for (var interface in element.interfacesInternal)
@@ -364,8 +364,8 @@
   bool? getConditionalKnownValue(AstNode node) =>
       _wrapExceptions(node, () => null, () {
         // TODO(paulberry): handle conditional expressions.
-        var conditionalDiscard = _fixBuilder!._variables!
-            .getConditionalDiscard(_fixBuilder!.source, node);
+        var conditionalDiscard = _fixBuilder._variables!
+            .getConditionalDiscard(_fixBuilder.source, node);
         if (conditionalDiscard == null) {
           return null;
         } else {
@@ -373,12 +373,12 @@
             return null;
           }
           var conditionValue = conditionalDiscard.keepTrue;
-          (_fixBuilder!._getChange(node) as NodeChangeForConditional)
+          (_fixBuilder._getChange(node) as NodeChangeForConditional)
             ..conditionValue = conditionValue
             ..conditionReason = conditionalDiscard.reason;
           // If we're just issuing warnings, instruct the resolver to go ahead
           // and visit both branches of the conditional.
-          return _fixBuilder!.warnOnWeakCode! ? null : conditionValue;
+          return _fixBuilder.warnOnWeakCode! ? null : conditionValue;
         }
       });
 
@@ -401,8 +401,8 @@
 
   @override
   FunctionType getExecutableType(ElementImplWithFunctionType element) =>
-      _wrapExceptions(_fixBuilder!.unit, () => element.typeInternal, () {
-        var type = _fixBuilder!._computeMigratedType(element);
+      _wrapExceptions(_fixBuilder.unit, () => element.typeInternal, () {
+        var type = _fixBuilder._computeMigratedType(element);
         Element baseElement = element;
         if (baseElement is Member) {
           type = baseElement.substitution.substituteType(type);
@@ -413,17 +413,17 @@
   @override
   DartType getExtendedType(ExtensionElementImpl element) {
     return _wrapExceptions(
-        _fixBuilder!.unit,
+        _fixBuilder.unit,
         () => element.extendedTypeInternal,
-        () => _fixBuilder!._variables!.toFinalType(
-            _fixBuilder!._variables!.decoratedElementType(element)));
+        () => _fixBuilder._variables!.toFinalType(
+            _fixBuilder._variables!.decoratedElementType(element)));
   }
 
   @override
   DartType getFieldType(PropertyInducingElementImpl element) =>
-      _wrapExceptions(_fixBuilder!.unit, () => element.typeInternal, () {
+      _wrapExceptions(_fixBuilder.unit, () => element.typeInternal, () {
         assert(!element.isSynthetic);
-        return _fixBuilder!._computeMigratedType(element);
+        return _fixBuilder._computeMigratedType(element);
       });
 
   @override
@@ -443,10 +443,10 @@
 
   @override
   DartType? getTypeParameterBound(TypeParameterElementImpl element) {
-    var decoratedBound = _fixBuilder!._variables!
+    var decoratedBound = _fixBuilder._variables!
         .decoratedTypeParameterBound(element, allowNullUnparentedBounds: true);
     if (decoratedBound == null) return element.boundInternal;
-    var bound = _fixBuilder!._variables!.toFinalType(decoratedBound);
+    var bound = _fixBuilder._variables!.toFinalType(decoratedBound);
     if (bound.isDynamic) {
       return null;
     } else if (bound.isDartCoreObject &&
@@ -459,7 +459,7 @@
 
   @override
   DartType getVariableType(VariableElementImpl variable) =>
-      _wrapExceptions(_fixBuilder!.unit, () => variable.typeInternal, () {
+      _wrapExceptions(_fixBuilder.unit, () => variable.typeInternal, () {
         if (variable.library == null) {
           // This is a synthetic variable created during resolution (e.g. a
           // parameter of a function type), so the type it currently has is the
@@ -472,10 +472,10 @@
               enclosingElement.isSynthetic) {
             // This is the parameter of a synthetic getter, so it has the same
             // type as the corresponding variable.
-            return _fixBuilder!._computeMigratedType(enclosingElement.variable);
+            return _fixBuilder._computeMigratedType(enclosingElement.variable);
           }
         }
-        return _fixBuilder!._computeMigratedType(variable);
+        return _fixBuilder._computeMigratedType(variable);
       });
 
   @override
@@ -487,15 +487,14 @@
 
   @override
   bool isLibraryNonNullableByDefault(LibraryElementImpl element) {
-    return _fixBuilder!._graph.isBeingMigrated(element.source) ||
+    return _fixBuilder._graph.isBeingMigrated(element.source) ||
         element.isNonNullableByDefaultInternal;
   }
 
   @override
   bool isMethodInvocationNullAware(MethodInvocation node) {
     return node.isNullAware &&
-        (_shouldStayNullAware[node] ??=
-            _fixBuilder!._shouldStayNullAware(node));
+        (_shouldStayNullAware[node] ??= _fixBuilder._shouldStayNullAware(node));
   }
 
   /// Indicates whether the given [element] is a member of an extension on a
@@ -505,7 +504,7 @@
     if (element != null) {
       var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ExtensionElement) {
-        return _fixBuilder!._typeSystem
+        return _fixBuilder._typeSystem
             .isPotentiallyNullable(enclosingElement.extendedType);
       }
     }
@@ -515,8 +514,7 @@
   @override
   bool isPropertyAccessNullAware(PropertyAccess node) {
     return node.isNullAware &&
-        (_shouldStayNullAware[node] ??=
-            _fixBuilder!._shouldStayNullAware(node));
+        (_shouldStayNullAware[node] ??= _fixBuilder._shouldStayNullAware(node));
   }
 
   @override
@@ -555,7 +553,7 @@
     var postMigrationType = parameter.type;
     if (postMigrationType != type) {
       // TODO(paulberry): test field formal parameters.
-      _fixBuilder!._addedParameterTypes[parameter] = postMigrationType;
+      _fixBuilder._addedParameterTypes[parameter] = postMigrationType;
       return postMigrationType;
     }
     return type;
@@ -579,13 +577,13 @@
       var handler = _PrefixExpressionHandler(node);
       _assignmentLikeExpressionHandlers[node] = handler;
       handler.handleLValueType(this, node.readType, node.writeType!);
-      handler.handleAssignmentRhs(this, _fixBuilder!.typeProvider.intType);
+      handler.handleAssignmentRhs(this, _fixBuilder.typeProvider.intType);
     } else if (node is PostfixExpression) {
       assert(_isIncrementOrDecrementOperator(node.operator.type));
       var handler = _PostfixExpressionHandler(node);
       _assignmentLikeExpressionHandlers[node] = handler;
       handler.handleLValueType(this, node.readType, node.writeType!);
-      handler.handleAssignmentRhs(this, _fixBuilder!.typeProvider.intType);
+      handler.handleAssignmentRhs(this, _fixBuilder.typeProvider.intType);
     } else {
       throw StateError('(${node.runtimeType}) $node');
     }
@@ -601,10 +599,10 @@
   DartType _addCastOrNullCheck(
       Expression node, DartType expressionType, DartType contextType) {
     var checks =
-        _fixBuilder!._variables!.expressionChecks(_fixBuilder!.source, node);
+        _fixBuilder._variables!.expressionChecks(_fixBuilder.source, node);
     var change = _createExpressionChange(node, expressionType, contextType);
     var info = AtomicEditInfo(change.description, checks?.edges ?? {});
-    (_fixBuilder!._getChange(node) as NodeChangeForExpression)
+    (_fixBuilder._getChange(node) as NodeChangeForExpression)
         .addExpressionChange(change, info);
     return change.resultType;
   }
@@ -613,8 +611,8 @@
   /// called [extensionName] from `package:collection/collection.dart`, and that
   /// the pubspec will be appropriately updated (if necessary).
   void _addCollectionPackageExtension(String extensionName) {
-    _fixBuilder!.neededCollectionPackageExtensions.add(extensionName);
-    _fixBuilder!._neededPackages['collection'] =
+    _fixBuilder.neededCollectionPackageExtensions.add(extensionName);
+    _fixBuilder._neededPackages['collection'] =
         Version.parse('1.15.0-nullsafety.4');
   }
 
@@ -622,10 +620,10 @@
       {AtomicEditInfo? info, HintComment? hint}) {
     var change = _createNullCheckChange(node, type, hint: hint);
     var checks =
-        _fixBuilder!._variables!.expressionChecks(_fixBuilder!.source, node);
+        _fixBuilder._variables!.expressionChecks(_fixBuilder.source, node);
     info ??= AtomicEditInfo(change.description, checks?.edges ?? {});
     var nodeChangeForExpression =
-        _fixBuilder!._getChange(node) as NodeChangeForExpression;
+        _fixBuilder._getChange(node) as NodeChangeForExpression;
     nodeChangeForExpression.addExpressionChange(change, info);
     return change.resultType;
   }
@@ -643,21 +641,20 @@
     }
     // Either a cast or a null check is needed.  We prefer to do a null
     // check if we can.
-    var nonNullType = _fixBuilder!._typeSystem.promoteToNonNull(expressionType);
-    if (_fixBuilder!._typeSystem.isSubtypeOf(nonNullType, contextType)) {
+    var nonNullType = _fixBuilder._typeSystem.promoteToNonNull(expressionType);
+    if (_fixBuilder._typeSystem.isSubtypeOf(nonNullType, contextType)) {
       return _createNullCheckChange(node, expressionType);
     } else {
       _flowAnalysis!.asExpression_end(node, contextType);
       return IntroduceAsChange(contextType,
-          isDowncast: _fixBuilder!._typeSystem
-              .isSubtypeOf(contextType, expressionType));
+          isDowncast:
+              _fixBuilder._typeSystem.isSubtypeOf(contextType, expressionType));
     }
   }
 
   ExpressionChange _createNullCheckChange(Expression node, DartType type,
       {HintComment? hint}) {
-    var resultType =
-        _fixBuilder!._typeSystem.promoteToNonNull(type as TypeImpl);
+    var resultType = _fixBuilder._typeSystem.promoteToNonNull(type as TypeImpl);
     _flowAnalysis!.nonNullAssert_end(node);
     return type.isDartCoreNull && hint == null
         ? NoValidMigrationChange(resultType)
@@ -679,9 +676,9 @@
 
   InterfaceType _getClassInterface(
       ClassElement class_, InterfaceElement superclass) {
-    var decoratedSupertype = _fixBuilder!._decoratedClassHierarchy!
+    var decoratedSupertype = _fixBuilder._decoratedClassHierarchy!
         .getDecoratedSupertype(class_, superclass);
-    var finalType = _fixBuilder!._variables!.toFinalType(decoratedSupertype);
+    var finalType = _fixBuilder._variables!.toFinalType(decoratedSupertype);
     return finalType as InterfaceType;
   }
 
@@ -696,16 +693,15 @@
   }
 
   bool _isSubtypeOrCoercible(DartType type, DartType context) {
-    var fixBuilder = _fixBuilder!;
-    var typeSystem = fixBuilder._typeSystem;
+    var typeSystem = _fixBuilder._typeSystem;
     if (typeSystem.isSubtypeOf(type, context)) {
       return true;
     }
     if (context is FunctionType && type is InterfaceType) {
-      var callMethod =
-          type.lookUpMethod2('call', fixBuilder.unit!.declaredElement!.library);
+      var callMethod = type.lookUpMethod2(
+          'call', _fixBuilder.unit!.declaredElement!.library);
       if (callMethod != null) {
-        var variables = fixBuilder._variables!;
+        var variables = _fixBuilder._variables!;
         var callMethodType = variables.toFinalType(
             variables.decoratedElementType(callMethod.declaration));
         if (callMethod is MethodMember) {
@@ -729,7 +725,7 @@
       }
     }
     var hint =
-        _fixBuilder!._variables!.getNullCheckHint(_fixBuilder!.source, node);
+        _fixBuilder._variables!.getNullCheckHint(_fixBuilder.source, node);
     if (hint != null) {
       type = _addNullCheck(node, type,
           info: AtomicEditInfo(
@@ -753,7 +749,7 @@
       // transform `.where`.
       type = _tryTransformWhere(node, type) ?? type;
     }
-    if (!_fixBuilder!._typeSystem.isNullable(type)) return type;
+    if (!_fixBuilder._typeSystem.isNullable(type)) return type;
     if (_needsNullCheckDueToStructure(ancestor)) {
       return _addNullCheck(node, type);
     }
@@ -822,8 +818,8 @@
 
   CollectionElement? _transformCollectionElement(CollectionElement? node) {
     while (node is IfElement) {
-      var conditionalDiscard = _fixBuilder!._variables!
-          .getConditionalDiscard(_fixBuilder!.source, node);
+      var conditionalDiscard = _fixBuilder._variables!
+          .getConditionalDiscard(_fixBuilder.source, node);
       if (conditionalDiscard == null ||
           conditionalDiscard.keepTrue && conditionalDiscard.keepFalse) {
         return node;
@@ -849,7 +845,7 @@
   /// considered); otherwise returns `null`.
   DartType? _tryTransformOrElse(Expression node, DartType type) {
     var transformationInfo =
-        _fixBuilder!._whereOrNullTransformer.tryTransformOrElseArgument(node);
+        _fixBuilder._whereOrNullTransformer.tryTransformOrElseArgument(node);
     if (transformationInfo != null) {
       // We can fix this by dropping the node and changing the method call.
       _addCollectionPackageExtension('IterableExtension');
@@ -858,14 +854,14 @@
               transformationInfo.originalName,
               transformationInfo.replacementName),
           {});
-      (_fixBuilder!._getChange(transformationInfo.methodInvocation.methodName)
+      (_fixBuilder._getChange(transformationInfo.methodInvocation.methodName)
               as NodeChangeForMethodName)
           .replaceWith(transformationInfo.replacementName, info);
-      (_fixBuilder!._getChange(transformationInfo.methodInvocation.argumentList)
+      (_fixBuilder._getChange(transformationInfo.methodInvocation.argumentList)
               as NodeChangeForArgumentList)
           .dropArgument(transformationInfo.orElseArgument, info);
       _deferredMethodInvocationProcessing[transformationInfo.methodInvocation] =
-          (methodInvocationType) => _fixBuilder!._typeSystem
+          (methodInvocationType) => _fixBuilder._typeSystem
               .makeNullable(methodInvocationType as TypeImpl);
       return type;
     }
@@ -877,8 +873,8 @@
   /// indicates to the caller that no further transformations to this expression
   /// need to be considered); otherwise returns `null`.
   DartType? _tryTransformWhere(Expression node, DartType type) {
-    var transformationInfo = _fixBuilder!._whereNotNullTransformer
-        .tryTransformMethodInvocation(node);
+    var transformationInfo =
+        _fixBuilder._whereNotNullTransformer.tryTransformMethodInvocation(node);
     if (transformationInfo != null) {
       // We can fix this by dropping the method call's argument and changing the
       // call.
@@ -888,13 +884,13 @@
               transformationInfo.originalName,
               transformationInfo.replacementName),
           {});
-      (_fixBuilder!._getChange(transformationInfo.methodInvocation.methodName)
+      (_fixBuilder._getChange(transformationInfo.methodInvocation.methodName)
               as NodeChangeForMethodName)
           .replaceWith(transformationInfo.replacementName, info);
-      (_fixBuilder!._getChange(transformationInfo.methodInvocation.argumentList)
+      (_fixBuilder._getChange(transformationInfo.methodInvocation.argumentList)
               as NodeChangeForArgumentList)
           .dropArgument(transformationInfo.argument, info);
-      return _fixBuilder!._whereNotNullTransformer
+      return _fixBuilder._whereNotNullTransformer
           .transformPostMigrationInvocationType(type);
     }
     return null;
@@ -906,12 +902,12 @@
   /// exception is propagated normally.
   T _wrapExceptions<T>(
       AstNode? node, T Function() fallback, T Function() compute) {
-    if (_fixBuilder!.listener == null) return compute();
+    if (_fixBuilder.listener == null) return compute();
     try {
       return compute();
     } catch (exception, stackTrace) {
-      _fixBuilder!.listener!
-          .reportException(_fixBuilder!.source, node, exception, stackTrace);
+      _fixBuilder.listener!
+          .reportException(_fixBuilder.source, node, exception, stackTrace);
       return fallback();
     }
   }
@@ -976,7 +972,7 @@
       MigrationResolutionHooksImpl hooks, DartType rhsType) {
     MethodElement? combiner = this.combiner;
     if (combiner != null) {
-      var fixBuilder = hooks._fixBuilder!;
+      var fixBuilder = hooks._fixBuilder;
       var combinerReturnType =
           fixBuilder._typeSystem.refineBinaryExpressionType(
         readType!,
@@ -1011,13 +1007,13 @@
       assert(readType!.nullabilitySuffix != NullabilitySuffix.star);
       if (combinerType == TokenType.QUESTION_QUESTION_EQ) {
         rhsContextType = writeTypeToSet;
-        if (fixBuilder!._typeSystem.isNonNullable(readType!)) {
+        if (fixBuilder._typeSystem.isNonNullable(readType!)) {
           (fixBuilder._getChange(node) as NodeChangeForAssignment)
               .isWeakNullAware = true;
         }
       } else {
         if (!readType!.isDynamic &&
-            fixBuilder!._typeSystem.isPotentiallyNullable(readType!)) {
+            fixBuilder._typeSystem.isPotentiallyNullable(readType!)) {
           (fixBuilder._getChange(node) as NodeChangeForAssignmentLike)
               .hasNullableSource = true;
         }
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index 4b5bb50..24fadff 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.h
@@ -29,7 +29,7 @@
   // Returns a string representing the operating system ("linux",
   // "macos", "windows", or "android"). The returned string should not be
   // deallocated by the caller.
-  static const char* OperatingSystem();
+  static const char* OperatingSystem() { return kHostOperatingSystemName; }
 
   // Returns a string representing the version of the operating system. The
   // format of the string is determined by the platform. The returned string
@@ -38,23 +38,7 @@
 
   // Returns the architecture name of the processor the VM is running on
   // (ia32, x64, arm, or arm64).
-  static const char* HostArchitecture() {
-#if defined(HOST_ARCH_ARM)
-    return "arm";
-#elif defined(HOST_ARCH_ARM64)
-    return "arm64";
-#elif defined(HOST_ARCH_IA32)
-    return "ia32";
-#elif defined(HOST_ARCH_X64)
-    return "x64";
-#elif defined(HOST_ARCH_RISCV32)
-    return "riscv32";
-#elif defined(HOST_ARCH_RISCV64)
-    return "riscv64";
-#else
-#error Architecture detection failed.
-#endif
-  }
+  static const char* HostArchitecture() { return kHostArchitectureName; }
 
   static const char* LibraryPrefix();
 
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index dbbae40..ab084ba 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -92,10 +92,6 @@
   return sysconf(_SC_NPROCESSORS_ONLN);
 }
 
-const char* Platform::OperatingSystem() {
-  return "android";
-}
-
 const char* Platform::OperatingSystemVersion() {
   char os_version[PROP_VALUE_MAX + 1];
   int os_version_length =
diff --git a/runtime/bin/platform_fuchsia.cc b/runtime/bin/platform_fuchsia.cc
index 2c12818..6c0934f 100644
--- a/runtime/bin/platform_fuchsia.cc
+++ b/runtime/bin/platform_fuchsia.cc
@@ -34,10 +34,6 @@
   return sysconf(_SC_NPROCESSORS_CONF);
 }
 
-const char* Platform::OperatingSystem() {
-  return "fuchsia";
-}
-
 const char* Platform::OperatingSystemVersion() {
   struct utsname info;
   int ret = uname(&info);
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index 84cf46c..e758d2c 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -91,10 +91,6 @@
   return sysconf(_SC_NPROCESSORS_ONLN);
 }
 
-const char* Platform::OperatingSystem() {
-  return "linux";
-}
-
 const char* Platform::OperatingSystemVersion() {
   struct utsname info;
   int ret = uname(&info);
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index 498df50..f8e87fb 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -110,14 +110,6 @@
   }
 }
 
-const char* Platform::OperatingSystem() {
-#if DART_HOST_OS_IOS
-  return "ios";
-#else
-  return "macos";
-#endif
-}
-
 const char* Platform::OperatingSystemVersion() {
   std::string version(NSProcessInfoOperatingSystemVersionString());
   return DartUtils::ScopedCopyCString(version.c_str());
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index b407cd2..8e100a1 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -113,10 +113,6 @@
   return info.dwNumberOfProcessors;
 }
 
-const char* Platform::OperatingSystem() {
-  return "windows";
-}
-
 // We pull the version number, and other version information out of the
 // registry because GetVersionEx() and friends lie about the OS version after
 // Windows 8.1. See:
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index d71457b..98e15ed 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -734,6 +734,74 @@
 #endif
 #endif
 
+#if defined(DART_HOST_OS_ANDROID)
+#define kHostOperatingSystemName "android"
+#elif defined(DART_HOST_OS_FUCHSIA)
+#define kHostOperatingSystemName "fuchsia"
+#elif defined(DART_HOST_OS_IOS)
+#define kHostOperatingSystemName "ios"
+#elif defined(DART_HOST_OS_LINUX)
+#define kHostOperatingSystemName "linux"
+#elif defined(DART_HOST_OS_MACOS)
+#define kHostOperatingSystemName "macos"
+#elif defined(DART_HOST_OS_WINDOWS)
+#define kHostOperatingSystemName "windows"
+#else
+#error Host operating system detection failed.
+#endif
+
+#if defined(HOST_ARCH_ARM)
+#define kHostArchitectureName "arm"
+#elif defined(HOST_ARCH_ARM64)
+#define kHostArchitectureName "arm64"
+#elif defined(HOST_ARCH_IA32)
+#define kHostArchitectureName "ia32"
+#elif defined(HOST_ARCH_RISCV32)
+#define kHostArchitectureName "riscv32"
+#elif defined(HOST_ARCH_RISCV64)
+#define kHostArchitectureName "riscv64"
+#elif defined(HOST_ARCH_X64)
+#define kHostArchitectureName "x64"
+#else
+#error Host architecture detection failed.
+#endif
+
+#if defined(TARGET_ARCH_ARM)
+#define kTargetArchitectureName "arm"
+#elif defined(TARGET_ARCH_ARM64)
+#define kTargetArchitectureName "arm64"
+#elif defined(TARGET_ARCH_IA32)
+#define kTargetArchitectureName "ia32"
+#elif defined(TARGET_ARCH_RISCV32)
+#define kTargetArchitectureName "riscv32"
+#elif defined(TARGET_ARCH_RISCV64)
+#define kTargetArchitectureName "riscv64"
+#elif defined(TARGET_ARCH_X64)
+#define kTargetArchitectureName "x64"
+#else
+#error Target architecture detection failed.
+#endif
+
+// The ordering between DART_TARGET_OS_MACOS_IOS and DART_TARGET_OS_MACOS
+// below is important, since the latter is sometimes defined when the former
+// is, and sometimes not (e.g., ffi tests), so we need to test the former
+// before the latter.
+#if defined(DART_TARGET_OS_ANDROID)
+#define kTargetOperatingSystemName "android"
+#elif defined(DART_TARGET_OS_FUCHSIA)
+#define kTargetOperatingSystemName "fuchsia"
+#elif defined(DART_TARGET_OS_LINUX)
+#define kTargetOperatingSystemName "linux"
+#elif defined(DART_TARGET_OS_MACOS_IOS)
+#define kTargetOperatingSystemName "ios"
+#elif defined(DART_TARGET_OS_MACOS)
+#define kTargetOperatingSystemName "macos"
+#elif defined(DART_TARGET_OS_WINDOWS)
+#define kTargetOperatingSystemName "windows"
+#else
+#error Target operating system detection failed.
+#endif
+
 }  // namespace dart
 
 #endif  // RUNTIME_PLATFORM_GLOBALS_H_
diff --git a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
index f8598a4..3bc5dba 100644
--- a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
+++ b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
@@ -179,6 +179,25 @@
   final tracePCOffsets2 = collectPCOffsets(output2.trace);
   Expect.deepEquals(tracePCOffsets1, tracePCOffsets2);
 
+  if (tracePCOffsets1.isNotEmpty) {
+    final exampleOffset = tracePCOffsets1.first;
+
+    // We run the test program on the same host OS as the test, so any of the
+    // PCOffsets above should have this information.
+    Expect.isNotNull(exampleOffset.os);
+    Expect.isNotNull(exampleOffset.architecture);
+    Expect.isNotNull(exampleOffset.usingSimulator);
+    Expect.isNotNull(exampleOffset.compressedPointers);
+
+    Expect.equals(exampleOffset.os, Platform.operatingSystem);
+    final archString = '${exampleOffset.usingSimulator! ? 'SIM' : ''}'
+        '${exampleOffset.architecture!.toUpperCase()}'
+        '${exampleOffset.compressedPointers! ? 'C' : ''}';
+    final baseBuildDir = path.basename(buildDir);
+    Expect.isTrue(baseBuildDir.endsWith(archString),
+        'Expected $baseBuildDir to end with $archString');
+  }
+
   // Check that translating the DWARF stack trace (without internal frames)
   // matches the symbolic stack trace.
   print("Reading DWARF info from ${dwarfPath}");
@@ -216,16 +235,11 @@
   print('Offset of first stub address is $allocateObjectPCOffset1');
   print('Offset of second stub address is $allocateObjectPCOffset2');
 
-  final allocateObjectRelocatedAddress1 =
-      dwarf.virtualAddressOf(allocateObjectPCOffset1);
-  final allocateObjectRelocatedAddress2 =
-      dwarf.virtualAddressOf(allocateObjectPCOffset2);
-
-  final allocateObjectCallInfo1 = dwarf.callInfoFor(
-      allocateObjectRelocatedAddress1,
+  final allocateObjectCallInfo1 = dwarf.callInfoForPCOffset(
+      allocateObjectPCOffset1,
       includeInternalFrames: true);
-  final allocateObjectCallInfo2 = dwarf.callInfoFor(
-      allocateObjectRelocatedAddress2,
+  final allocateObjectCallInfo2 = dwarf.callInfoForPCOffset(
+      allocateObjectPCOffset2,
       includeInternalFrames: true);
 
   Expect.isNotNull(allocateObjectCallInfo1);
diff --git a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
index 7b2737e..5c479d1 100644
--- a/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
+++ b/runtime/tests/vm/dart_2/use_dwarf_stack_traces_flag_test.dart
@@ -181,6 +181,25 @@
   final tracePCOffsets2 = collectPCOffsets(output2.trace);
   Expect.deepEquals(tracePCOffsets1, tracePCOffsets2);
 
+  if (tracePCOffsets1.isNotEmpty) {
+    final exampleOffset = tracePCOffsets1.first;
+
+    // We run the test program on the same host OS as the test, so any of the
+    // PCOffsets above should have this information.
+    Expect.isNotNull(exampleOffset.os);
+    Expect.isNotNull(exampleOffset.architecture);
+    Expect.isNotNull(exampleOffset.usingSimulator);
+    Expect.isNotNull(exampleOffset.compressedPointers);
+
+    Expect.equals(exampleOffset.os, Platform.operatingSystem);
+    final archString = '${exampleOffset.usingSimulator ? 'SIM' : ''}'
+        '${exampleOffset.architecture.toUpperCase()}'
+        '${exampleOffset.compressedPointers ? 'C' : ''}';
+    final baseBuildDir = path.basename(buildDir);
+    Expect.isTrue(baseBuildDir.endsWith(archString),
+        'Expected $baseBuildDir to end with $archString');
+  }
+
   // Check that translating the DWARF stack trace (without internal frames)
   // matches the symbolic stack trace.
   print("Reading DWARF info from ${dwarfPath}");
@@ -218,16 +237,11 @@
   print('Offset of first stub address is $allocateObjectPCOffset1');
   print('Offset of second stub address is $allocateObjectPCOffset2');
 
-  final allocateObjectRelocatedAddress1 =
-      dwarf.virtualAddressOf(allocateObjectPCOffset1);
-  final allocateObjectRelocatedAddress2 =
-      dwarf.virtualAddressOf(allocateObjectPCOffset2);
-
-  final allocateObjectCallInfo1 = dwarf.callInfoFor(
-      allocateObjectRelocatedAddress1,
+  final allocateObjectCallInfo1 = dwarf.callInfoForPCOffset(
+      allocateObjectPCOffset1,
       includeInternalFrames: true);
-  final allocateObjectCallInfo2 = dwarf.callInfoFor(
-      allocateObjectRelocatedAddress2,
+  final allocateObjectCallInfo2 = dwarf.callInfoForPCOffset(
+      allocateObjectPCOffset2,
       includeInternalFrames: true);
 
   Expect.isNotNull(allocateObjectCallInfo1);
diff --git a/runtime/vm/compiler/ffi/abi.cc b/runtime/vm/compiler/ffi/abi.cc
index 01cf0ca..66fa5a8 100644
--- a/runtime/vm/compiler/ffi/abi.cc
+++ b/runtime/vm/compiler/ffi/abi.cc
@@ -4,6 +4,7 @@
 
 #include "vm/compiler/ffi/abi.h"
 
+#include "platform/globals.h"
 #include "vm/constants.h"
 
 namespace dart {
@@ -48,46 +49,34 @@
 
 #if defined(DART_TARGET_OS_ANDROID)
 #define DART_TARGET_OS_NAME Android
-#define DART_TARGET_OS_NAME_LC android
 #elif defined(DART_TARGET_OS_FUCHSIA)
 #define DART_TARGET_OS_NAME Fuchsia
-#define DART_TARGET_OS_NAME_LC fuchsia
 #elif defined(DART_TARGET_OS_LINUX)
 #define DART_TARGET_OS_NAME Linux
-#define DART_TARGET_OS_NAME_LC linux
 #elif defined(DART_TARGET_OS_MACOS)
 #if DART_TARGET_OS_MACOS_IOS
 #define DART_TARGET_OS_NAME IOS
-#define DART_TARGET_OS_NAME_LC ios
 #else
 #define DART_TARGET_OS_NAME MacOS
-#define DART_TARGET_OS_NAME_LC macos
 #endif
 #elif defined(DART_TARGET_OS_WINDOWS)
 #define DART_TARGET_OS_NAME Windows
-#define DART_TARGET_OS_NAME_LC windows
 #else
 #error Unknown OS
 #endif
 
 #if defined(TARGET_ARCH_IA32)
 #define TARGET_ARCH_NAME IA32
-#define TARGET_ARCH_NAME_LC ia32
 #elif defined(TARGET_ARCH_X64)
 #define TARGET_ARCH_NAME X64
-#define TARGET_ARCH_NAME_LC x64
 #elif defined(TARGET_ARCH_ARM)
 #define TARGET_ARCH_NAME Arm
-#define TARGET_ARCH_NAME_LC arm
 #elif defined(TARGET_ARCH_ARM64)
 #define TARGET_ARCH_NAME Arm64
-#define TARGET_ARCH_NAME_LC arm64
 #elif defined(TARGET_ARCH_RISCV32)
 #define TARGET_ARCH_NAME Riscv32
-#define TARGET_ARCH_NAME_LC riscv32
 #elif defined(TARGET_ARCH_RISCV64)
 #define TARGET_ARCH_NAME Riscv64
-#define TARGET_ARCH_NAME_LC riscv64
 #else
 #error Unknown arch
 #endif
@@ -100,11 +89,8 @@
   return Abi::ABI_ENUM_VALUE3;
 }
 
-#define STRINGIFY2(s) STRINGIFY(s)
-#define STRINGIFY(s) #s
-
 const char* target_abi_name =
-    STRINGIFY2(DART_TARGET_OS_NAME_LC) "_" STRINGIFY2(TARGET_ARCH_NAME_LC);
+    kTargetOperatingSystemName "_" kTargetArchitectureName;
 
 }  // namespace ffi
 
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index 3c12a8f..d040fb1 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -29,7 +29,7 @@
   char expectation_file_path[kFilePathLength];
   Utils::SNPrint(expectation_file_path, kFilePathLength,
                  "runtime/vm/compiler/ffi/unit_tests/%s/%s_%s.expect", name,
-                 kArch, kOs);
+                 kTargetArchitectureName, kOs);
 
   if (TestCaseBase::update_expectations) {
     Syslog::Print("Updating %s\n", expectation_file_path);
diff --git a/runtime/vm/compiler/ffi/native_type_test.cc b/runtime/vm/compiler/ffi/native_type_test.cc
index d132b91..d0a87a1 100644
--- a/runtime/vm/compiler/ffi/native_type_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_test.cc
@@ -25,7 +25,7 @@
   char expectation_file_path[kFilePathLength];
   Utils::SNPrint(expectation_file_path, kFilePathLength,
                  "runtime/vm/compiler/ffi/unit_tests/%s/%s_%s.expect", name,
-                 kArch, kOs);
+                 kTargetArchitectureName, kOs);
 
   if (TestCaseBase::update_expectations) {
     Syslog::Print("Updating %s\n", expectation_file_path);
diff --git a/runtime/vm/compiler/ffi/unit_test.cc b/runtime/vm/compiler/ffi/unit_test.cc
index 138fe36..eb8211d 100644
--- a/runtime/vm/compiler/ffi/unit_test.cc
+++ b/runtime/vm/compiler/ffi/unit_test.cc
@@ -5,35 +5,16 @@
 #include "vm/compiler/ffi/unit_test.h"
 
 #include "platform/syslog.h"
+#include "vm/globals.h"
 
 namespace dart {
 namespace compiler {
 namespace ffi {
 
-#if defined(TARGET_ARCH_ARM)
-const char* kArch = "arm";
-#elif defined(TARGET_ARCH_ARM64)
-const char* kArch = "arm64";
-#elif defined(TARGET_ARCH_IA32)
-const char* kArch = "ia32";
-#elif defined(TARGET_ARCH_X64)
-const char* kArch = "x64";
-#elif defined(TARGET_ARCH_RISCV32)
-const char* kArch = "riscv32";
-#elif defined(TARGET_ARCH_RISCV64)
-const char* kArch = "riscv64";
-#endif
-
-#if defined(DART_TARGET_OS_ANDROID)
-const char* kOs = "android";
-#elif defined(DART_TARGET_OS_MACOS_IOS)
-const char* kOs = "ios";
-#elif defined(DART_TARGET_OS_LINUX)
-const char* kOs = "linux";
-#elif defined(DART_TARGET_OS_MACOS)
-const char* kOs = "macos";
-#elif defined(DART_TARGET_OS_WINDOWS)
+#if defined(DART_TARGET_OS_WINDOWS)
 const char* kOs = "win";
+#else
+const char* kOs = kTargetOperatingSystemName;
 #endif
 
 void WriteToFile(char* path, const char* contents) {
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index a12f853..df8e064 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -1134,35 +1134,28 @@
     }
 
 // Generated code must match the host architecture and ABI.
+    buffer.Printf(" %s", kTargetArchitectureName);
 #if defined(TARGET_ARCH_ARM)
 #if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
-    buffer.AddString(" arm-ios");
+    buffer.AddString("-ios");
 #else
-    buffer.AddString(" arm-eabi");
+    buffer.AddString("-eabi");
 #endif
     buffer.AddString(TargetCPUFeatures::hardfp_supported() ? " hardfp"
                                                            : " softfp");
 #elif defined(TARGET_ARCH_ARM64)
 #if defined(DART_TARGET_OS_FUCHSIA)
     // See signal handler cheat in Assembler::EnterFrame.
-    buffer.AddString(" arm64-fuchsia");
+    buffer.AddString("-fuchsia");
 #else
-    buffer.AddString(" arm64-sysv");
+    buffer.AddString("-sysv");
 #endif
-#elif defined(TARGET_ARCH_IA32)
-    buffer.AddString(" ia32");
 #elif defined(TARGET_ARCH_X64)
 #if defined(DART_TARGET_OS_WINDOWS)
-    buffer.AddString(" x64-win");
+    buffer.AddString("-win");
 #else
-    buffer.AddString(" x64-sysv");
+    buffer.AddString("-sysv");
 #endif
-#elif defined(TARGET_ARCH_RISCV32)
-    buffer.AddString(" riscv32");
-#elif defined(TARGET_ARCH_RISCV64)
-    buffer.AddString(" riscv64");
-#else
-#error What architecture?
 #endif
 #if defined(DART_COMPRESSED_POINTERS)
     buffer.AddString(" compressed-pointers");
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index e7c7b72..bb764d4 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -25955,6 +25955,19 @@
     OSThread* thread = OSThread::Current();
     buffer.Printf("pid: %" Pd ", tid: %" Pd ", name %s\n", OS::ProcessId(),
                   OSThread::ThreadIdToIntPtr(thread->id()), thread->name());
+#if defined(DART_COMPRESSED_POINTERS)
+    const char kCompressedPointers[] = "yes";
+#else
+    const char kCompressedPointers[] = "no";
+#endif
+#if defined(USING_SIMULATOR)
+    const char kUsingSimulator[] = "yes";
+#else
+    const char kUsingSimulator[] = "no";
+#endif
+    buffer.Printf("os: %s arch: %s comp: %s sim: %s\n",
+                  kHostOperatingSystemName, kTargetArchitectureName,
+                  kCompressedPointers, kUsingSimulator);
     if (auto const build_id = isolate_instructions_image.build_id()) {
       const intptr_t length = isolate_instructions_image.build_id_length();
       buffer.Printf("build_id: '");
diff --git a/runtime/vm/os.h b/runtime/vm/os.h
index d0f9e4c..c774254 100644
--- a/runtime/vm/os.h
+++ b/runtime/vm/os.h
@@ -19,7 +19,7 @@
 class OS {
  public:
   // Returns the name of the given OS. For example "linux".
-  static const char* Name();
+  static const char* Name() { return kHostOperatingSystemName; }
 
   // Returns the current process id.
   static intptr_t ProcessId();
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 08af326..6ee9cd4 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -91,10 +91,6 @@
 
 #endif  // !PRODUCT
 
-const char* OS::Name() {
-  return "android";
-}
-
 intptr_t OS::ProcessId() {
   return static_cast<intptr_t>(getpid());
 }
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 07150b3..74191ef 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -346,10 +346,6 @@
 
 #endif  // !PRODUCT
 
-const char* OS::Name() {
-  return "fuchsia";
-}
-
 intptr_t OS::ProcessId() {
   return static_cast<intptr_t>(getpid());
 }
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 411871a..8cb55b7 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -410,10 +410,6 @@
 
 #endif  // !PRODUCT
 
-const char* OS::Name() {
-  return "linux";
-}
-
 intptr_t OS::ProcessId() {
   return static_cast<intptr_t>(getpid());
 }
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index a4f58f6..390805d 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -26,14 +26,6 @@
 
 namespace dart {
 
-const char* OS::Name() {
-#if DART_HOST_OS_IOS
-  return "ios";
-#else
-  return "macos";
-#endif
-}
-
 intptr_t OS::ProcessId() {
   return static_cast<intptr_t>(getpid());
 }
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index a19fb63..b6fed58 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -22,10 +22,6 @@
 // Defined in vm/os_thread_win.cc
 extern bool private_flag_windows_run_tls_destructors;
 
-const char* OS::Name() {
-  return "windows";
-}
-
 intptr_t OS::ProcessId() {
   return static_cast<intptr_t>(GetCurrentProcessId());
 }
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index fb9bb9d..4ad80c5 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -477,6 +477,18 @@
                ", isolate_group=%s(%p), isolate=%s(%p)\n",
                static_cast<intptr_t>(OS::ProcessId()), thread_id,
                isolate_group_name, isolate_group, isolate_name, isolate);
+#if defined(DART_COMPRESSED_POINTERS)
+  const char kCompressedPointers[] = "yes";
+#else
+  const char kCompressedPointers[] = "no";
+#endif
+#if defined(USING_SIMULATOR)
+  const char kUsingSimulator[] = "yes";
+#else
+  const char kUsingSimulator[] = "no";
+#endif
+  OS::PrintErr("os=%s, arch=%s, comp=%s, sim=%s\n", kHostOperatingSystemName,
+               kTargetArchitectureName, kCompressedPointers, kUsingSimulator);
   OS::PrintErr("isolate_instructions=%" Px ", vm_instructions=%" Px "\n",
                source == nullptr
                    ? 0
diff --git a/runtime/vm/version_in.cc b/runtime/vm/version_in.cc
index ef8274c..7aee151 100644
--- a/runtime/vm/version_in.cc
+++ b/runtime/vm/version_in.cc
@@ -27,44 +27,12 @@
 const char* Version::snapshot_hash_ = "{{SNAPSHOT_HASH}}";
 const char* Version::str_ =
     "{{VERSION_STR}} ({{CHANNEL}}) ({{COMMIT_TIME}})"
-    " on \""
-#if defined(DART_HOST_OS_ANDROID)
-    "android"
-#elif defined(DART_HOST_OS_FUCHSIA)
-    "fuchsia"
-#elif defined(DART_HOST_OS_LINUX)
-    "linux"
-#elif defined(DART_HOST_OS_MACOS)
-#if DART_HOST_OS_IOS
-    "ios"
-#else
-    "macos"
-#endif
-#elif defined(DART_HOST_OS_WINDOWS)
-    "windows"
-#else
-#error Unknown OS
-#endif
+    " on \"" kHostOperatingSystemName
     "_"
 #if defined(USING_SIMULATOR)
     "sim"
 #endif
-#if defined(TARGET_ARCH_IA32)
-    "ia32"
-#elif defined(TARGET_ARCH_X64)
-    "x64"
-#elif defined(TARGET_ARCH_ARM)
-    "arm"
-#elif defined(TARGET_ARCH_ARM64)
-    "arm64"
-#elif defined(TARGET_ARCH_RISCV32)
-    "riscv32"
-#elif defined(TARGET_ARCH_RISCV64)
-    "riscv64"
-#else
-#error Unknown arch
-#endif
-    "\"";
+    kTargetArchitectureName "\"";
 const char* Version::commit_ = "{{VERSION_STR}}";
 const char* Version::git_short_hash_ = "{{GIT_HASH}}";
 
diff --git a/tools/VERSION b/tools/VERSION
index 9ea184b..adb3629 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 69
+PRERELEASE 70
 PRERELEASE_PATCH 0
\ No newline at end of file
