From 89d887f331eb2c9f2f737af82540d83bd648640b Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 11 Jun 2019 13:34:24 -0700 Subject: [PATCH] Strip debug symbols from ELF library snapshots (#34250) AOT compiled code is now packaged as an ELF library for Android targets. By default gen_snapshot's output contains debug symbols. The symbols could be stripped as a separate step, but that requires NDK tools that the user may not have available. This change passes a gen_snapshot flag that omits the symbols, and it filters out a warning printed when that flag is used. --- packages/flutter_tools/lib/src/base/build.dart | 13 ++++++++++++- packages/flutter_tools/test/base/build_test.dart | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 1908cb3950b..fbce754f03e 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart @@ -63,7 +63,17 @@ class GenSnapshot { final String hostArch = iosArch == IOSArch.armv7 ? '-i386' : '-x86_64'; return runCommandAndStreamOutput(['/usr/bin/arch', hostArch, snapshotterPath]..addAll(args)); } - return runCommandAndStreamOutput([snapshotterPath]..addAll(args)); + + StringConverter outputFilter; + if (additionalArgs.contains('--strip')) { + // Filter out gen_snapshot's warning message about stripping debug symbols + // from ELF library snapshots. + const String kStripWarning = 'Warning: Generating ELF library without DWARF debugging information.'; + outputFilter = (String line) => line != kStripWarning ? line : null; + } + + return runCommandAndStreamOutput([snapshotterPath]..addAll(args), + mapFunction: outputFilter); } } @@ -138,6 +148,7 @@ class AOTSnapshotter { outputPaths.add(aotSharedLibrary); genSnapshotArgs.add('--snapshot_kind=app-aot-elf'); genSnapshotArgs.add('--elf=$aotSharedLibrary'); + genSnapshotArgs.add('--strip'); } else { // Blob AOT snapshot. final String vmSnapshotData = fs.path.join(outputDir.path, 'vm_snapshot_data'); diff --git a/packages/flutter_tools/test/base/build_test.dart b/packages/flutter_tools/test/base/build_test.dart index 8c32fd9e6a5..90f286510fc 100644 --- a/packages/flutter_tools/test/base/build_test.dart +++ b/packages/flutter_tools/test/base/build_test.dart @@ -418,6 +418,7 @@ void main() { '--deterministic', '--snapshot_kind=app-aot-elf', '--elf=build/foo/app.so', + '--strip', '--no-sim-use-hardfp', '--no-use-integer-division', 'main.dill', @@ -447,6 +448,7 @@ void main() { '--deterministic', '--snapshot_kind=app-aot-elf', '--elf=build/foo/app.so', + '--strip', 'main.dill', ]); }, overrides: contextOverrides);