diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 791ba8f..20c6f10 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -16,6 +16,7 @@
 import 'common/ram_usage.dart';
 import 'io/mapped_file.dart';
 import 'options.dart' show CompilerOptions, Dart2JSStage, FeatureOptions;
+import 'compiler.dart' as defaultCompiler show Compiler;
 import 'source_file_provider.dart';
 import 'util/command_line.dart';
 import 'util/util.dart' show stackTraceFilePrefix;
@@ -1226,7 +1227,7 @@
   // provided. It needs to be replaced by reading all the contents of the
   // file and expanding them into the resulting argument list.
   //
-  // TODO: Move this logic to a single place and share it among all tools.
+  // TODO: Remove when internal tooling targets bazelMain instead of this.
   if (arguments.length > 0 && arguments.last.startsWith('@')) {
     var extra = _readLines(arguments.last.substring(1));
     arguments = arguments.take(arguments.length - 1).followedBy(extra).toList();
@@ -1241,6 +1242,20 @@
   await internalMain(arguments);
 }
 
+Future<String?> bazelMain(List<String> arguments) async {
+  if (arguments.length > 0 && arguments.last.startsWith('@')) {
+    var extra = _readLines(arguments.last.substring(1));
+    arguments = arguments.take(arguments.length - 1).followedBy(extra).toList();
+  }
+  final compiler = (await internalMain(arguments)).compiler;
+  if (compiler is defaultCompiler.Compiler) {
+    final buffer = StringBuffer();
+    compiler.collectMetrics(buffer);
+    return buffer.toString();
+  }
+  return null;
+}
+
 /// Return all non-empty lines in a file found at [path].
 Iterable<String> _readLines(String path) {
   return File(path).readAsLinesSync().where((line) => line.isNotEmpty);
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index 03a5ff8..d17da56 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -633,12 +633,14 @@
   @override
   String get namespace => 'input';
   CountMetric inputBytes = CountMetric('inputBytes');
+  CountMetric sourceBytes = CountMetric('sourceBytes');
 
   void addDataRead(api.CompilerInput input) {
     if (input is SourceFileProvider) {
       inputBytes.add(input.bytesRead);
+      sourceBytes.add(input.sourceBytesFromDill);
       if (primary.isEmpty) {
-        primary = [inputBytes];
+        primary = [inputBytes, sourceBytes];
       }
     }
   }
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 0249f04..2b871c7 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -510,7 +510,7 @@
   // We exit the safepoint inside DLRT_GetFfiCallbackMetadata in order to save
   // code size on this shared stub.
   {
-    __ mov(SP, CSP);
+    __ SetupDartSP();
 
     __ EnterFrame(0);
     __ PushRegisters(all_registers);
@@ -531,8 +531,6 @@
     __ EnterFrame(0);
     __ ReserveAlignedFrameSpace(0);
 
-    __ mov(CSP, SP);
-
 #if defined(DART_TARGET_OS_FUCHSIA)
     // TODO(https://dartbug.com/52579): Remove.
     if (FLAG_precompiled_mode) {
@@ -549,7 +547,9 @@
         FfiCallbackMetadata::kGetFfiCallbackMetadata, R4);
 #endif  // defined(DART_TARGET_OS_FUCHSIA)
 
+    __ mov(CSP, SP);
     __ blr(R4);
+    __ mov(SP, CSP);
     __ mov(THR, R0);
 
     __ LeaveFrame();
@@ -564,7 +564,7 @@
     __ PopRegisters(all_registers);
     __ LeaveFrame();
 
-    __ mov(CSP, SP);
+    __ RestoreCSP();
   }
 
   Label async_callback;
@@ -605,7 +605,7 @@
 
   // Exit the temporary isolate.
   {
-    __ mov(SP, CSP);
+    __ SetupDartSP();
     __ EnterFrame(0);
     __ ReserveAlignedFrameSpace(0);
 
@@ -631,7 +631,7 @@
     __ mov(THR, R0);
 
     __ LeaveFrame();
-    __ mov(CSP, SP);
+    __ RestoreCSP();
   }
 
   __ Bind(&done);
diff --git a/runtime/vm/ffi_callback_metadata.h b/runtime/vm/ffi_callback_metadata.h
index 9269321..1565a1d 100644
--- a/runtime/vm/ffi_callback_metadata.h
+++ b/runtime/vm/ffi_callback_metadata.h
@@ -242,7 +242,7 @@
   static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 4;
 #elif defined(TARGET_ARCH_ARM64)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 320;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 332;
   static constexpr intptr_t kNativeCallbackTrampolineStackDelta = 2;
 #elif defined(TARGET_ARCH_RISCV32)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 8;
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 96e4fec..1e1e8a0 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -2852,7 +2852,7 @@
    * Draws an image from a CanvasImageSource to an area of this canvas.
    *
    * The image is a region of [source] that is [sourceWidth] wide and
-   * [destHeight] tall with top left corner at ([sourceX], [sourceY]).
+   * [sourceHeight] tall with top left corner at ([sourceX], [sourceY]).
    * The image will be drawn to this context with its top left corner at the
    * point ([destX], [destY]) and will be scaled to be [destWidth] wide and
    * [destHeight] tall.
diff --git a/tests/ffi/function_callbacks_test.dart b/tests/ffi/function_callbacks_test.dart
index a085e58..f71ccfe 100644
--- a/tests/ffi/function_callbacks_test.dart
+++ b/tests/ffi/function_callbacks_test.dart
@@ -13,6 +13,7 @@
 // VMOptions=--use-slow-path --write-protect-code --no-dual-map-code --stacktrace-every=100
 // VMOptions=--dwarf_stack_traces --no-retain_function_objects --no-retain_code_objects
 // VMOptions=--test_il_serialization
+// VMOptions=--profiler
 // SharedObjects=ffi_test_functions
 
 import 'dart:ffi';
diff --git a/tools/VERSION b/tools/VERSION
index c0b37d9..4e39168 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 2
 PATCH 0
-PRERELEASE 98
+PRERELEASE 99
 PRERELEASE_PATCH 0
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index ec1f2e4..2f3827d 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -187,7 +187,7 @@
    * Draws an image from a CanvasImageSource to an area of this canvas.
    *
    * The image is a region of [source] that is [sourceWidth] wide and
-   * [destHeight] tall with top left corner at ([sourceX], [sourceY]).
+   * [sourceHeight] tall with top left corner at ([sourceX], [sourceY]).
    * The image will be drawn to this context with its top left corner at the
    * point ([destX], [destY]) and will be scaled to be [destWidth] wide and
    * [destHeight] tall.
