commit | 298777c07d843bf79c0ac272405e64b927d01982 | [log] [tgz] |
---|---|---|
author | Tess Strickland <sstrickl@google.com> | Tue Jul 13 07:40:15 2021 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Tue Jul 13 07:40:15 2021 +0000 |
tree | d63f7053cb6b5a69e05320ae00ece3f20f719710 | |
parent | 20ba6afe4c46be33b28dea80452432fb138d423e [diff] |
[vm] Merge text and data sections in ELF snapshots. To do this, BitsContainer is changed to be a more rope-like representation of section portions. In addition to containing most of the same information stored per-section previously, each portion also has a section-relative offset that is calculated when it is added. Thus, merging two compatible BitsContainer sections is just adding the portions from the second to the first, tweaking the section-relative offset for each. Other changes in this CL: * Create PseudoSections subclasses for the elf header, program header table, and section header table, so we can treat them more uniformly with the other parts of the ELF snapshot. * We now only allocate as much BSS space in the snapshot as is needed for any text sections in the snapshot, instead of always allocating a big enough BSS space for both VM and isolate, even for deferred snapshots where there is no VM isolate. * We already separated segment and section alignment in previous CLs, so the fact that our own ELF loader needs load segments to be page-aligned no longer means that the sections within those segments also needs to be. Thus, we align individual instructions sections to kMaxObjectAlignment, like readonly data sections, since both hold a single Image object. This removes unnecessary intra-section padding. TEST=Tests that check DWARF information and trybots that use ELF snapshots. Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-dwarf-linux-product-x64-try Change-Id: If0315c8b7b0f31481b676a8901f49cd3a44b5561 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206365 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.