Commit Graph

18413 Commits

Author SHA1 Message Date
Aske Simon Christensen 99bd9d7db5 [vm, gardening] Initialize target array in movs tests to satisfy msan.
Fixes https://github.com/dart-lang/sdk/issues/42289

Change-Id: I13630b44d0c5bf5ec51256fb1fac41f812dd3e7e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150984
Auto-Submit: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-12 12:03:02 +00:00
Tess Strickland e160698933 [vm/aot] Delay relocated address calculation for static symbols.
Since we no longer add the symbol for a given code object to the Elf
object when writing the contents of the text segment, we don't need to
calculate the relocated address that early. Instead, just store which
text segment the instructions payload belongs to as well as its offset
into the segment contents and let Elf::Finalize() calculate the
relocated address when creating the symbol.

This removes one need for knowing the segment base address when writing
the segment contents. The remaining needs are related to BSS usage:

* Calculating the BSS offset from the text segment for the Image header.
* Fixing up BSS relocations in instructions payloads.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Change-Id: I8be860a7a7111721e6f546154a0814f4d16ac634
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150929
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
2020-06-12 11:34:02 +00:00
Daco Harkes 6544c69e23 [vm/ffi] Convert Objects to Dart_Handles in FFI calls
This includes support for calling Dart_PropagateError in native code
when doing FFI calls, and catching uncaught exceptions with Dart_IsError
when doing FFI callbacks.

The support for Dart_PropagateError adds a catch entry to the FFI
trampoline, which prevents inlining these trampolines in AOT. This
regresses the FfiCall benchmarks by 1-2% in AOT.

In addition, Dart_PropagateError requires maintaining a bit whether we
entered native/VM code from generated code through FFI or not. That way
we can do the proper transition on the exception path. When entering
generated code, we store this bit on the stack, right after the entry
frame.

Design: http://go/dart-ffi-handles

Issue: https://github.com/dart-lang/sdk/issues/36858
Issue: https://github.com/dart-lang/sdk/issues/41319

Change-Id: Idfd7ff69132fb29cc730931a4113d914d4437396
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-mac-debug-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-nnbd-linux-debug-x64-try,analyzer-nnbd-linux-release-try,front-end-nnbd-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145591
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-12 11:14:22 +00:00
Zichang Guo a3eacf734e Revert "File::Copy avoids direct copying on Windows"
This reverts commit 391d3bcdd8.

Reason for revert: https://github.com/dart-lang/sdk/issues/42291

Original change's description:
> File::Copy avoids direct copying on Windows
> 
> There is a race condition for copying file on Windows, where CopyFile()
> returns success but data has not been populated into destination file.
> E.g process is killed or died in the middle.
> 
> This cl will change File::Copy as
> 1. Copy file to a temp file in the same directory of destination file.
> 2. Rename the file to the target file.
> 
> Bug: https://github.com/dart-lang/sdk/issues/42119
> Change-Id: I39b6d451f6ace970bc554501148259d33de232c7
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149667
> Commit-Queue: Zichang Guo <zichangguo@google.com>
> Reviewed-by: Zach Anderson <zra@google.com>

TBR=zra@google.com,asiva@google.com,zichangguo@google.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: https://github.com/dart-lang/sdk/issues/42119
Change-Id: I816611107498f41ab4af7c065ac2162af585ae95
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151028
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-06-12 06:27:48 +00:00
Alexander Aprelev c1f0bc310d [vm/concurrency] When waking up ThreadInterrupter first check if it is shutdown already.
Fixes https://github.com/dart-lang/sdk/issues/42302

Change-Id: Ic250ce6d23d20d0435447c4e3ba546c1755c0458
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151024
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-12 03:29:17 +00:00
Regis Crelier 0b64f54889 [VM/nnbd] Normalize 'X extends Never' to 'Never'.
In order to normalize 'X extends Never' to 'Never' (and 'X? extends Never' to 'Null'), the VM has to instantiate the bounds of function type parameters.
Instantiating these bounds lazily is not easily feasible, as the instantiators are not kept around after instantiating types.

Note that the normalization tests do not yet pass due to test issues and CFE issues, see https://github.com/dart-lang/sdk/issues/42143


Change-Id: I9ed6fcb9d7a11a4adbe514757ad9ac6ff7818981
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/147281
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-12 02:04:37 +00:00
Alexander Aprelev 348499d92d [vm/concurrency] Remove ASSERT from IsMutatorThread to address r/w race isolate_ in vm thread.
Running tsan build locally on IsolateJson identified concurrent access to isolate_ from NoActiveIsolateScope/CollectNewSpaceGarbage and IsMutatorThread/SafepointThreads/Scavenge.

Change-Id: I4c6f5c83a7f6ddbfee8ede59443720db62a48b6f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151023
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-11 22:57:16 +00:00
Ben Konyi c54ec8d5f3 [ package:dds ] Handle expression evaluation invocations in DDS and forward compileExpression calls to clients which provide their own compilation service.
Change-Id: I2daec26929ad4f530d28d0073a0b2758850bec0a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150694
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-06-11 22:43:39 +00:00
Alexander Markov f0ea02bc51 [vm/nnbd] Do not trust non-nullable Object for parameter of operator==
Operator== has parameter type Object, which is non-nullable in NNBD
strong mode. This is useful, as null should be handled magically by
the implementation, and the body of operator== should never receive
null.

However, VM handles comparison of an object with null inside
operator==, so its parameter type should not be taken into account
when inferring type of ParameterInstr. Otherwise implicit null
handling code is removed by the optimizer.

Fixes https://github.com/dart-lang/sdk/issues/42287

Change-Id: I856a2ce47a11309e8c32d4d9bb481d7cc03bab85
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151021
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-11 21:49:39 +00:00
Regis Crelier f46efc71c2 [VM/nnbd] Do not apply legacy erasure to type literals.
See issue #42262.

Change-Id: I326eff8ca836c345caab266f5d27991b251e77ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151020
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-11 20:00:08 +00:00
Ryan Macnak b0484ecbde [vm] Check prefix.loadLibrary is called and returns before prefix members are used.
Restore checks against reloading a library with deferred prefixes.

No loading is actually deferred.

Bug: https://github.com/dart-lang/sdk/issues/26878
Bug: https://github.com/dart-lang/sdk/issues/41974
Change-Id: Iec2662de117453d596cca28dd9481a9751091ce9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149613
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-11 16:33:21 +00:00
Regis Crelier 9f904ff184 [VM/runtime] Remove intermediate array copy step when rehashing types.
Change-Id: Iffe90ef347b026f87cc21c07710fbfea34f36413
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150697
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-11 15:49:22 +00:00
Tess Strickland 7c9f7f4bf8 [vm/aot] Fix UB behavior due to WriteFixed usage at unaligned positions.
Change-Id: Icc4f05bbec03aee1f60c690e3bef8b5f6f159470
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150933
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-11 13:52:51 +00:00
Aske Simon Christensen e35ca30ca5 Reland "[vm] MemoryCopy instruction for copying between typed data and strings."
This is a reland of 6ecd8a10ea

Original change's description:
> [vm] MemoryCopy instruction for copying between typed data and strings.
> 
> Used for copying the bytes from the Uint8List to the _OneByteString in
> String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.
> 
> Issue https://github.com/dart-lang/sdk/issues/42072
> Closes https://github.com/dart-lang/sdk/issues/41703
> 
> Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
> Commit-Queue: Aske Simon Christensen <askesc@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

Change-Id: Ia231c521e5f2db168cfc6094dfc7322327dedc6d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150925
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2020-06-11 12:29:19 +00:00
Tess Strickland 83d4f3af61 [vm/aot] Rework Dwarf object to be output-agnostic.
Previously, we created a separate DWARF object for each possible output.
For the most part, the information stored in each DWARF object was the
same, but the DWARF object was responsible for keeping track of abstract
origin addresses (in the non-assembly case) and for actually generating
the desired output (assembly or binary).

Instead, abstract out the output formatting into a DwarfWriteStream,
whose subclasses handle both the final output format and certain details
that differ between assembly and binary outputs. With this, the DWARF
class no longer depends on having direct access to the ELF file if being
used to generate ELF sections, and as such is output agnostic.

Now, if we have one or more outputs that contain DWARF information, we
only generate a single DWARF object that is shared across these outputs.
The only additional change required is in Dwarf::AddCode(), which now
handles being called multiple times for the same Code object.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Change-Id: I71de887a07a673164b3ccfa7fbbab2ccef80c576
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150302
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-11 08:57:59 +00:00
asiva a782dd82db [VM/runtime] - detect null safety before isolate initialization
- Detect null safety when not specified before isolate
      initialization
      - for source files by having CFE parse the source file
        for @dart annotations
      - for kernel files by sniffing the kernel file for
        compilation mode
      - for appJIT files by sniffing the feature string
      - for AOT snapshots by sniffing the feature string

    - Remove workaround of returning null safety to false during
      bootstrapping

    - Add a new Dart C API call for detecting null safety

Bug: 41766
Change-Id: Ia8cf264323a2d0d58c2855ce6491456aa6f1da07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150089
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-11 01:22:35 +00:00
Regis Crelier c0c66ab10f Reland "[VM/nnbd] Canonicalize TypeParameter objects in the VM."
This is a reland of 6a98e2719e

Original change's description:
> [VM/nnbd] Canonicalize TypeParameter objects in the VM.
> 
> Prior to this CL, type parameters were all assumed canonical, even duplicate ones.
> 
> Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.
> 
> This fixes performance issue https://github.com/dart-lang/sdk/issues/41421
> 
> Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

Change-Id: I4a42d0f9d53c2244b1a638432ed2cd6a055fa72a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150266
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-11 00:44:05 +00:00
Ryan Macnak 0fab083e1c [vm, isolate] Merge heaps without evacuating new-space.
Change-Id: I03d65e866215f243f2ab6a4a1d9d41625be4d56f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148682
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-10 20:22:02 +00:00
Martin Kustermann cfe45b6e3e [vm] Add opt-in flag to set priority for worker threads created by the VM
The newly added --worker-thread-priority can be used by users as an
opt-in to set the thread priority / nice value.

It is the responsibility of the user to ensure that the process has the
right to change the priority to the given value. Failure to set the
priority will be fatal.

See b/154918152

Change-Id: I3b3791e88b6ddf4fa6e39e4587f7fe1ab4d2312f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150560
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-10 19:57:02 +00:00
Ryan Macnak d1b0713e8b Revert "[vm] MemoryCopy instruction for copying between typed data and strings."
This reverts commit 6ecd8a10ea.

Reason for revert: Breaks ABI

Original change's description:
> [vm] MemoryCopy instruction for copying between typed data and strings.
> 
> Used for copying the bytes from the Uint8List to the _OneByteString in
> String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.
> 
> Issue https://github.com/dart-lang/sdk/issues/42072
> Closes https://github.com/dart-lang/sdk/issues/41703
> 
> Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
> Commit-Queue: Aske Simon Christensen <askesc@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

TBR=kustermann@google.com,askesc@google.com

Change-Id: I5fc0b58da80dca23c91b57ec2833492e9d0885a8
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150802
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-10 18:41:55 +00:00
Aske Simon Christensen 6ecd8a10ea [vm] MemoryCopy instruction for copying between typed data and strings.
Used for copying the bytes from the Uint8List to the _OneByteString in
String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.

Issue https://github.com/dart-lang/sdk/issues/42072
Closes https://github.com/dart-lang/sdk/issues/41703

Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-10 14:40:17 +00:00
Tess Strickland 977997bd76 [vm/aot] Add Image objects to V8 snapshot profiles.
This avoids attributing the header and padding bytes in Image objects
to the artificial root, instead making it clear why these bytes exist.
It also ensures Instructions objects (in the non-bare-payload case) are
never considered roots of the profile.

Also unify semantics of text_offset in AssemblyImageWriter::WriteText()
and BlobImageWriter::WriteText(). Originally the former was the offset
from the start of the text section and the latter was the offset from
the start of the instructions objects/payloads. Now they're both the
offset in the text section.

Bug: https://github.com/dart-lang/sdk/issues/41249

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Change-Id: I617e76c9c390a93abb6bc37efc1355368c64691e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149286
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-10 11:29:27 +00:00
Vyacheslav Egorov 45310394a6 [vm] Exclude class name from function name in instruction sizes json.
Issue https://github.com/dart-lang/sdk/issues/41249

Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-linux-release-try,pkg-win-release-try,pkg-mac-release-try
Change-Id: Idf2bb9c9d6392c7a95aa09a2cc1f2190adcf782d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150522
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-10 10:18:37 +00:00
Wesley Moy 4e047f2931 Add common terminals to ANSI heuristic
Today, Stdout and Stderr have a property supportsAnsiEscapes. The
documented purpose of this property is to inform the caller whether ANSI
escape sequences are supported - say, for colorizing terminal output
when the user is running the Dart program in a terminal emulator like
xterm.

The problem is that the heuristic used is a substring match for "xterm"
in the TERM environment variable. (See attached bug.) This
implementation omits a few significant populations of users:

* Users using screen or tmux. These commands set their TERM to "screen".
* Users using a non-xterm terminal like rxvt (especially rxvt-unicode).

The correct solution here is to query terminfo for terminal
capabilities. Until then, adding these two cases to the existing xterm
check unblocks users of two popular terminal multiplexers and a terminal
emulator.

Bug: https://github.com/dart-lang/sdk/issues/31606
Change-Id: I1a8a37d42f1895d7b1238c67ec86207fd4a38bbb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149940
Auto-Submit: Wesley Moy <wesleymoy@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Jonas Termansen <sortie@google.com>
2020-06-09 21:33:35 +00:00
Ryan Macnak 0f15f8722e [vm, gc] Use a clear, decreasing-cost order in deciding idle GC actions.
Change-Id: I873676bf7e7ba6d98505bbd2dad604a12ae56f0e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150168
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-09 16:24:11 +00:00
Tess Strickland 956620e044 [vm] Only exchange initial values in BSS when different.
BSS::Initialize() can run multiple times when isolate code is
loaded in separate threads. Even though the values used each
time are consistent and so they'll only change the first time,
TSAN sees the compare_exchange_strong calls as possible
read/write data races.

Cq-Include-Trybots: luci.dart.try:vm-kernel-tsan-linux-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Bug: https://github.com/dart-lang/sdk/issues/42095
Change-Id: Iedb368939f9d86889a820edfa534522a4731a9d7
Fixed: 42095
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150340
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-09 13:23:56 +00:00
Vyacheslav Egorov df68f17ebb [vm/compiler] Make NameOfStub work for BuildMethodExtractor stub.
Change-Id: Id0da8d175a92c52e142a5b4e9aecc3b06fc2f05c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150360
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-09 09:08:54 +00:00
Zichang Guo 391d3bcdd8 File::Copy avoids direct copying on Windows
There is a race condition for copying file on Windows, where CopyFile()
returns success but data has not been populated into destination file.
E.g process is killed or died in the middle.

This cl will change File::Copy as
1. Copy file to a temp file in the same directory of destination file.
2. Rename the file to the target file.

Bug: https://github.com/dart-lang/sdk/issues/42119
Change-Id: I39b6d451f6ace970bc554501148259d33de232c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149667
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
2020-06-09 00:03:05 +00:00
Zichang Guo 4122ccb514 Revert "remove unused class_id.dart"
This reverts commit c67f4b206a.

Reason for revert: Golem flutter build is broken.
https://golem.corp.goog/BuildInfo?target=flutter-profile&machine-type=android-armv8&revision=99483

Original change's description:
> remove unused class_id.dart
> 
> class_id_fasta.dart is consumed by VM.
> Change-Id: Ib83588517670f8201d6c2c6baeced011f1607a75
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143341
> Commit-Queue: Zichang Guo <zichangguo@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

TBR=lrn@google.com,asiva@google.com,zichangguo@google.com

Change-Id: I85f873b16a8e29fa0af3d167a55eb676a07814b3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150469
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-06-08 22:34:36 +00:00
Vyacheslav Egorov d8a03b0a41 [vm] Fix disambiguated qualified names for tear-offs of async functions
Before this CL they erroneously had {body} appended to them.

Change-Id: Idc27d7a20b4b64194fb6fd16ac68ec8db3223f74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150420
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-08 21:34:52 +00:00
Zichang Guo c67f4b206a remove unused class_id.dart
class_id_fasta.dart is consumed by VM.
Change-Id: Ib83588517670f8201d6c2c6baeced011f1607a75
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143341
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-08 21:23:33 +00:00
Alexander Markov ecc7a21106 [vm/kernel] Add --from-dill option to kernel compilers
This option can be used to split AOT kernel generation into two rounds:

* The 1st round uses CFE to parse source files and generate intermediate
  dill file in *non-AOT* mode.

* The 2nd round loads intermediate dill file and applies AOT global
  transformations, then generates final dill file.

Each round is faster than one-shot generation of a dill file in AOT mode.

In order to use this 2-round compilation, command

  gen_kernel <other-options> --aot -o output.dill main.dart

should be replaced with the following 2 commands:

  gen_kernel <other-options> --no-aot -o intermediate.dill main.dart
  gen_kernel <other-options> --aot --from-dill intermediate.dill -o output.dill main.dart

Bug: b/158101962

Change-Id: I2d4deef45b50eab11df47f4a372598e6cf1d0edf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150272
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-08 18:16:33 +00:00
Martin Kustermann 7da7e9d06b [vm] Remove -lrt dependency: It was required for clock_gettime with GLIBC before 2.17 (~ 2012)
Originally this dependency got added in this CL:

   https://codereview.chromium.org/8463032


Debian Wheezy used to have older glibc but Wheezy's LTS has expired.


Change-Id: I667da14f7dc8054837d0946c041e1021a5f3128a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150104
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-06-08 17:23:01 +00:00
Aske Simon Christensen cf6f8903a5 [vm] IL instruction for UTF-8 scan.
Speeds up decoding across the board, with medium-length pure ASCII
strings seeing about 2x on X64 and IA32.

Closes https://github.com/dart-lang/sdk/issues/41702

Change-Id: I1c8e0bc69baaaeb6755d4c775e6fa0e6d18e1c57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148762
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-08 15:03:34 +00:00
Tess Strickland df435c9235 [vm/aot] For ELF output, make DW_AT_high_pc the end of the isolate text.
This avoids treating addresses within segments added after the isolate
text section as valid PC addresses for our DWARF information.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-linux-product-x64-try
Change-Id: Ibdac611d97b5a24226c226a3904c958f131ab961
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149290
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-08 08:35:32 +00:00
Régis Crelier c48263e901 Revert "[VM/nnbd] Canonicalize TypeParameter objects in the VM."
This reverts commit 6a98e2719e.

Reason for revert: Unexpected test failures

Original change's description:
> [VM/nnbd] Canonicalize TypeParameter objects in the VM.
> 
> Prior to this CL, type parameters were all assumed canonical, even duplicate ones.
> 
> Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.
> 
> This fixes performance issue https://github.com/dart-lang/sdk/issues/41421
> 
> Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

TBR=rmacnak@google.com,alexmarkov@google.com,asiva@google.com,regis@google.com

Change-Id: I0ca3b6b66e2281c285eba6b564f78c0e6b2f2217
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150265
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-05 23:36:45 +00:00
Regis Crelier 6a98e2719e [VM/nnbd] Canonicalize TypeParameter objects in the VM.
Prior to this CL, type parameters were all assumed canonical, even duplicate ones.

Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.

This fixes performance issue https://github.com/dart-lang/sdk/issues/41421

Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-05 22:56:50 +00:00
Regis Crelier a5f8ddac99 [VM/runtime] Introduce a trail in IsSubtypeOf() to avoid cycles.
Clean up signatures of runtime functions in object.{cc,h} using the trail to avoid cycles. Move the trail to the last parameter of these functions.
Introduce a trail in IsSubtypeOf() to avoid cycles introduced by bounds of F-bounded types. Issue uncovered by the new normalization tests.

Change-Id: I3241c7e4023a09c122e1594b7aff90b5b103f4f4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150180
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-05 19:57:46 +00:00
Alexander Markov b42aa2df68 [vm] Properly synchronize EnsureInitializerFunction
Initializer functions are created lazily at compile time when generating
LoadField which calls initializer. This may happen in the background
compiler thread, where Field objects are cloned.
EnsureInitializerFunction should be called from original field, and it
should be properly synchronized to make sure there are no races with
mutator thread.

Change-Id: Icc339afa2ee410385019c72c717737719767d367
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150166
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-05 17:55:14 +00:00
Ben Konyi 32615994fd [ VM Service / DDS ] Redirect web socket connection requests made to VM Service to DDS
Also fixes issue where test_helper wasn't running tests provided by
runDDSTest

Change-Id: I031a741a2aec30a3055153afce042105af2e5398
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149660
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-05 00:30:03 +00:00
Ryan Macnak 1cbf6c31e5 [vm, gc] Prevent a program with sufficient idle time and dominated by direct old-space allocations from avoiding scavenges for too long.
This is the idle equivalent of 3451c348db.

Change-Id: Ica6e0595c39257540ea731355868a107de2c2597
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149960
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-05 00:01:12 +00:00
Ben Konyi 62903873df [ VM ] Fix crash when expression compilation is attempted without an internal or external compilation service
Discovered using the DevTools widget inspector with a Flutter
application which did not have a flutter_tools instance connected. The
widget inspector attempts to evaluate expressions, the VM service
realizes there's no external compilation service and attempts to fall
back onto the kernel isolate's compilation service. The crash occurs as
KernelIsolate::InitializeState had not been called during initialization
as Dart_InitializeParams.start_kernel_isolate == false.

Fixes b/155649002

Change-Id: I9b1225f17dc4d4dff39503d4353b3bb539b08267
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149880
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-06-04 22:06:09 +00:00
Martin Kustermann 10df757a49 [vm/ffi] Fix issue due to unspecified argument evaluation order in C++
We already have tests that exercise this, namely:

  - ffi_2/regress_39044_test
  - ffi_2/vmspecific_send_port_id_test

Though the bug only appears if C++ compiler decides to evaluate arguments
in a different order. This happens to be only the case on Windows.

We don't have Windows hardware with Android phones on our CI, which is
why this was not caught earlier.

We have manually confirmed (via building app on windows with this fix
and running on android) that the issue is fixed by this change.

Fixes https://github.com/flutter/flutter/issues/54948

Change-Id: I51109cf1062964a5fb77948cffb9e2ba8fe2055f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149980
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-04 10:46:11 +00:00
Zichang Guo 7112027a9d Unlink file before Unix socket binds
Previously, an unix domain socket will be cleaned up within Socket's
finalizer. But if processes are killed, the file(socket) will remain and
prevent following bind().

Throw an exception when the file exists and no
active sockets has the same path.

Closes https://github.com/dart-lang/sdk/issues/42103
Change-Id: Ieb04b9e1b197064531ab6361c027b374c3d44411
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149081
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-03 22:10:40 +00:00
Kaushik Iska 02915ec5ce Revert "Replaces fuchsia.deprecatedtimezone"
This reverts commit cf30ff2953.

Bug: b/158105817 for more details
Change-Id: I8b37329f8d90cbf5012aa4fb3c5a45dac649f555
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149920
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-06-03 21:58:10 +00:00
Ryan Macnak f27d705c56 [vm, gc] Use the standard out-of-memory message when the scavenger fails to copy.
Bug: b/155227688
Change-Id: I865f4abaf82469c89739f3effeb0a4683ceb2686
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149900
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-03 21:00:10 +00:00
Alexander Markov 1d14868685 [vm/nnbd] Finish migration of vm/cc tests to NNBD
Also, vm/cc tests are enabled on NNBD bots.

Issue: https://github.com/dart-lang/sdk/issues/41314
Change-Id: Iddfa68de3de041436a009dd3426431211471b4dc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149780
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-03 18:09:39 +00:00
Nathan Rogers ff13c4e31a [fuchsia] Avoid unnecessary zx_clock_get(ZX_CLOCK_THREAD, ...) calls
When system tracing is enabled on the Fuchsia platform, avoid calling
|OS::GetCurrentThreadCPUMicros|.  The thread timestamp values are
discarded later, so querying them is wasteful w.r.t. both time and
trace buffer space.

Change-Id: I400075c89e69ddde6b032808859826c95f029008
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149395
Reviewed-by: Siva Annamalai <asiva@google.com>
Auto-Submit: Nathan Rogers <nathanrogers@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-06-03 17:27:41 +00:00
Vyacheslav Egorov 10c5dd0f06 [vm/compiler] Handle phis specially in TryCreateConstantReplacementFor.
When replacing an unboxed phi with its contant value we should not
try to insert unboxing instruction before the phi - as phis exist
outside of the normal stream of instructions and InsertBefore does
not work on them.

Instead we should insert unboxing into the block which contains
the phi.

Original test is expanded to cover this case as well now.

Fixes https://github.com/dart-lang/sdk/issues/42164

TEST=vm/cc/ConstantPropagator_Regress35371

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try
Fixed: 42164
Change-Id: I53f984216e53195206fb8247b0ed8999590415a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149842
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-03 15:00:49 +00:00
Alexander Markov f9eb40cc79 [vm/nnbd] Migate runtime/tests/vm/dart/* tests to NNBD
This change actually migrates vm/dart/* tests to NNBD by fixing
compile-time errors and adjusting tests where needed.

vm/dart/null_float32x4_simd_ops_test and vm/dart/null_float64x2_simd_ops_test
are deleted as they are superseded by static type checks.

vm/dart/regress_40462_test.dart is a huge source code auto-generated
by fuzzer and migrating and maintaining this source doesn't have much
value, so it is deleted.

There are still failures in strong mode due to dependencies on
the packages which are not migrated yet (https://github.com/dart-lang/sdk/issues/42146).

Migrated vm/dart/null_checks_with_dwarf_stack_traces_test fails both in
weak and strong mode due to https://github.com/dart-lang/sdk/issues/42149.

Issue: https://github.com/dart-lang/sdk/issues/41314
Change-Id: I5561f1c8705ec16def0c4e0efa495d15f4ea7259
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149493
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-02 22:49:09 +00:00