commit | d5649fc9f6c997c2f2d8b887a24d500e3c2dbbc2 | [log] [tgz] |
---|---|---|
author | Tess Strickland <sstrickl@google.com> | Tue Sep 22 17:14:44 2020 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Tue Sep 22 17:14:44 2020 +0000 |
tree | 628491751e55d6b6c532b09e44fb48bab1c20b0e | |
parent | 2b1105d2fe6b266a2b9ab17c25929ad7cd1d9f3f [diff] |
[vm] Add build ID to non-symbolic stack traces. Since we've run out of room for more fields in the Image object header on 64-bit architectures, the serializer instead creates an ImageHeader object for precompiled snapshots that is placed at the start of text segments. The new ImageHeader object contains the following information: * The offset of the BSS segment from the text segment, previously stored in the Image object header. * The relocated address of the text segment in the dynamic shared object. Due to restrictions when generating assembly snapshots, this field is only set for ELF snapshots, and so it can also be used to detect whether a snapshot was compiled to assembly or ELF. * The offset of the build ID description field from the text segment. * The length of the build ID description field. We replace the BSS offset in the Image object header with the offset of the ImageHeader object within the text segment, so that we can detect when a given Image has an ImageHeader object available. There are no methods available on ImageHeader objects, but instead the Image itself controls access to the information. In particular, the relocated address method either returns the relocated address information from the ImageHeader object or from the initialized BSS depending on the type of snapshot, so the caller need not do this work. Also, instead of returning the raw offset to the BSS section and having the caller turn that into an appropriate pointer, the method for accessing the BSS segment now returns a pointer to the segment. Bug: https://github.com/dart-lang/sdk/issues/43274 Cq-Include-Trybots: luci.dart.try:vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-android-release-arm_x64-try Change-Id: I15eae4ad0a088260b127f3d07da79374215b7f56 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/163207 Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Daco Harkes <dacoharkes@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, getting started, and more.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
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.