Files
sdk/pkg/vm/bin/dump_kernel.dart
T
Alexander Markov 2dedc4f9bd [vm/kernel/aot] Add unreachable metadata to members and call sites
This CL adds metadata to mark unreachable (unused) members (both
functions and fields) and unreachable calls into kernel binaries
using the information inferred by global type flow analysis.

Issue: https://github.com/dart-lang/sdk/issues/30480
Change-Id: I86c75cd4c7798a23f1de52141d0e9d605b62bf19
Reviewed-on: https://dart-review.googlesource.com/42462
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-02-22 22:44:31 +00:00

47 lines
1.6 KiB
Dart

// Copyright (c) 2017, 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.
import 'dart:io';
import 'package:kernel/kernel.dart' show Program, writeProgramToText;
import 'package:kernel/binary/ast_from_binary.dart'
show BinaryBuilderWithMetadata;
import 'package:vm/metadata/direct_call.dart' show DirectCallMetadataRepository;
import 'package:vm/metadata/inferred_type.dart'
show InferredTypeMetadataRepository;
import 'package:vm/metadata/procedure_attributes.dart'
show ProcedureAttributesMetadataRepository;
import 'package:vm/metadata/unreachable.dart'
show UnreachableNodeMetadataRepository;
final String _usage = '''
Usage: dump_kernel input.dill output.txt
Dumps kernel binary file with VM-specific metadata.
''';
main(List<String> arguments) async {
if (arguments.length != 2) {
print(_usage);
exit(1);
}
final input = arguments[0];
final output = arguments[1];
final program = new Program();
// Register VM-specific metadata.
program.addMetadataRepository(new DirectCallMetadataRepository());
program.addMetadataRepository(new InferredTypeMetadataRepository());
program.addMetadataRepository(new ProcedureAttributesMetadataRepository());
program.addMetadataRepository(new UnreachableNodeMetadataRepository());
final List<int> bytes = new File(input).readAsBytesSync();
new BinaryBuilderWithMetadata(bytes).readProgram(program);
writeProgramToText(program,
path: output, showExternal: true, showMetadata: true);
}