diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 15c9fb7..27506b0 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -593,9 +593,7 @@
     deps += [ "//third_party/boringssl" ]
 
     if (is_fuchsia) {
-      deps += [
-        "//garnet/public/lib/netstack/c",
-      ]
+      deps += [ "//garnet/public/lib/netstack/c" ]
       public_deps = [
         "//zircon/public/lib/fdio",
       ]
@@ -701,6 +699,14 @@
       "--target_os",
       current_os,
     ]
+    if (defined(invoker.size_symbol)) {
+      args += [
+        "--size_symbol_name",
+        invoker.size_symbol,
+        "--target_arch",
+        current_cpu,
+      ]
+    }
     if (invoker.executable) {
       args += [ "--executable" ]
     }
@@ -754,64 +760,37 @@
   executable = true
 }
 
-template("dill_to_cc") {
-  assert(defined(invoker.dill_file), "Need dill_file in $target_name.")
-  assert(defined(invoker.data_symbol), "Need data_symbol in $target_name.")
-  assert(defined(invoker.size_symbol), "Need size_symbol in $target_name.")
-  assert(defined(invoker.output), "Need output in $target_name.")
-
-  extra_deps = []
-  if (defined(invoker.deps)) {
-    extra_deps += invoker.deps
-  }
-
-  action(target_name) {
-    deps = extra_deps
-    script = "../tools/dill_to_data_cc.py"
-    inputs = [
-      "../tools/dill_to_data_cc.py",
-      invoker.dill_file,
-    ]
-    outputs = [
-      invoker.output,
-    ]
-    args = [
-      "--dill_file=" + rebase_path(invoker.dill_file),
-      "--data_symbol=" + invoker.data_symbol,
-      "--size_symbol=" + invoker.size_symbol,
-      "--output=" + rebase_path(invoker.output),
-    ]
-  }
-}
-
-dill_to_cc("kernel_service_dill_cc") {
+bin_to_assembly("kernel_service_dill_S") {
   deps = [
     "../../utils/kernel-service:kernel_service_dill",
   ]
-  dill_file = "$root_gen_dir/kernel_service.dill"
-  data_symbol = "kKernelServiceDill"
+  input = "$root_gen_dir/kernel_service.dill"
+  output = "$root_gen_dir/kernel_service.dill.S"
+  symbol = "kKernelServiceDill"
   size_symbol = "kKernelServiceDillSize"
-  output = "$root_gen_dir/kernel_service.dill.cc"
+  executable = false
 }
 
-dill_to_cc("platform_dill_cc") {
+bin_to_assembly("platform_dill_S") {
   deps = [
     "../vm:vm_legacy_platform",
   ]
-  dill_file = "$root_out_dir/vm_platform.dill"
-  data_symbol = "kPlatformDill"
+  input = "$root_out_dir/vm_platform.dill"
+  output = "$target_gen_dir/vm_platform.dill.S"
+  symbol = "kPlatformDill"
   size_symbol = "kPlatformDillSize"
-  output = "$target_gen_dir/vm_platform.dill.cc"
+  executable = false
 }
 
-dill_to_cc("platform_strong_dill_cc") {
+bin_to_assembly("platform_strong_dill_S") {
   deps = [
     "../vm:vm_platform",
   ]
-  dill_file = "$root_out_dir/vm_platform_strong.dill"
-  data_symbol = "kPlatformStrongDill"
+  input = "$root_out_dir/vm_platform_strong.dill"
+  output = "$target_gen_dir/vm_platform_strong.dill.S"
+  symbol = "kPlatformStrongDill"
   size_symbol = "kPlatformStrongDillSize"
-  output = "$target_gen_dir/vm_platform_strong.dill.cc"
+  executable = false
 }
 
 source_set("dart_snapshot_cc") {
@@ -831,14 +810,14 @@
 
 source_set("dart_kernel_platform_cc") {
   deps = [
-    ":kernel_service_dill_cc",
-    ":platform_dill_cc",
-    ":platform_strong_dill_cc",
+    ":kernel_service_dill_S",
+    ":platform_dill_S",
+    ":platform_strong_dill_S",
   ]
   sources = [
-    "$root_gen_dir/kernel_service.dill.cc",
-    "$target_gen_dir/vm_platform.dill.cc",
-    "$target_gen_dir/vm_platform_strong.dill.cc",
+    "$root_gen_dir/kernel_service.dill.S",
+    "$target_gen_dir/vm_platform.dill.S",
+    "$target_gen_dir/vm_platform_strong.dill.S",
   ]
 }
 
diff --git a/runtime/tools/bin_to_assembly.py b/runtime/tools/bin_to_assembly.py
index 941a050..8bc5d8c 100755
--- a/runtime/tools/bin_to_assembly.py
+++ b/runtime/tools/bin_to_assembly.py
@@ -25,6 +25,10 @@
                     action="store_true", default=False)
   parser.add_option("--target_os",
                     action="store", type="string")
+  parser.add_option("--size_symbol_name",
+                    action="store", type="string")
+  parser.add_option("--target_arch",
+                    action="store", type="string")
 
   (options, args) = parser.parse_args()
   if not options.output:
@@ -78,18 +82,53 @@
       output_file.write(".balign 32\n")
       output_file.write("%s:\n" % options.symbol_name)
 
+    size = 0
     with open(options.input, "rb") as input_file:
       if options.target_os in ["win"]:
         for byte in input_file.read():
           output_file.write("byte %d\n" % ord(byte))
-        output_file.write("end\n")
+          size += 1
       else:
         for byte in input_file.read():
           output_file.write(".byte %d\n" % ord(byte))
+          size += 1
 
     if options.target_os not in ["mac", "ios", "win"]:
       output_file.write(".size {0}, .-{0}\n".format(options.symbol_name))
 
+    if options.size_symbol_name:
+      if not options.target_arch:
+        sys.stderr.write("--target_arch not specified\n")
+        parser.print_help();
+        return -1
+
+      is64bit = 0
+      if options.target_arch:
+        if options.target_arch in ["arm64", "x64"]:
+          is64bit = 1
+
+      if options.target_os in ["win"]:
+        output_file.write("public %s\n" % options.size_symbol_name)
+        output_file.write("%s label byte\n" % options.size_symbol_name)
+        if (is64bit == 1):
+          output_file.write("qword %d\n" % size )
+        else:
+          output_file.write("dword %d\n" % size )
+      else:
+        if options.target_os in ["mac", "ios"]:
+          output_file.write(".global _%s\n" % options.size_symbol_name)
+          output_file.write("_%s:\n" % options.size_symbol_name)
+        else:
+          output_file.write(".global %s\n" % options.size_symbol_name)
+          output_file.write("%s:\n" % options.size_symbol_name)
+        if (is64bit == 1):
+          output_file.write(".quad %d\n" % size )
+        else:
+          output_file.write(".long %d\n" % size )
+
+    if options.target_os in ["win"]:
+      output_file.write("end\n")
+
   return 0
 
 if __name__ == "__main__":
diff --git a/runtime/tools/dill_to_data_cc.py b/runtime/tools/dill_to_data_cc.py
deleted file mode 100755
index b3b1211..0000000
--- a/runtime/tools/dill_to_data_cc.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Script to create a cc file with uint8 array of bytes corresponding to the
-# content of given a dill file.
-
-import optparse
-import sys
-
-# Option => Help mapping.
-OPTION_MAP = {
-  'dill_file': 'Path to the input dill file.',
-  'data_symbol': 'The C name for the data array.',
-  'size_symbol': 'The C name for the data size variable.',
-  'output': 'Path to the generated cc file.',
-}
-
-
-def BuildOptionParser():
-  parser = optparse.OptionParser()
-  for opt, help_text in OPTION_MAP.iteritems():
-    parser.add_option('--%s' % opt, type='string', help=help_text)
-  return parser
-
-
-def ValidateOptions(options):
-  for opt in OPTION_MAP.keys():
-    if getattr(options, opt) is None:
-      sys.stderr.write('--%s option not specified.\n' % opt)
-      return False
-  return True
-
-
-def WriteData(input_filename, data_symbol, output_file):
-  output_file.write('uint8_t %s[] = {\n' % data_symbol)
-  with open(input_filename, 'rb') as f:
-    first = True
-    size = 0
-    for byte in f.read():
-      if first:
-        output_file.write('  %d' % ord(byte))
-        first = False
-      else:
-        output_file.write(',\n  %d' % ord(byte))
-      size += 1
-  output_file.write('\n};\n')
-  return size
-
-
-def WriteSize(size_symbol, size, output_file):
-  output_file.write('intptr_t %s = %d;\n' % (size_symbol, size))
-
-
-def Main():
-  opt_parser = BuildOptionParser()
-  (options, args) = opt_parser.parse_args()
-  if not ValidateOptions(options):
-    opt_parser.print_help()
-    return 1
-  if args:
-    sys.stderr.write('Unknown args: "%s"\n' % str(args))
-    parser.print_help()
-    return 1
-
-  with open(options.output, 'w') as output_file:
-    output_file.write('#include <stdint.h>\n')
-    output_file.write('extern "C" {\n')
-    size = WriteData(options.dill_file, options.data_symbol, output_file)
-    WriteSize(options.size_symbol, size, output_file)
-    output_file.write("}")
-
-
-if __name__ == '__main__':
-  sys.exit(Main())
