Commit graph

16608 commits

Author SHA1 Message Date
Teagan Strickland d854375bc0 [vm] Make dedup-instructions a global VM flag.
Also check the flag in all code that possibly deduplicate instructions
or needs to know whether instructions may have been deduplicated, so we
can test this code in non-product builds by turning on the flag.

Change-Id: Iefd1aa13a0f5a8a1cd51b547d554c9ae8e7410ac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134820
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-07 15:15:32 +00:00
Ryan Macnak 16782e6c17 [vm, gc] New-space alignment is not configurable.
Change-Id: I6bb1c3dab0319ac5d827c947f38cb6396d2f7d81
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134809
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-07 01:08:34 +00:00
Ben Konyi d4a1a474d8 [ VM ] Fix issue where Field::RecordStore was attempting to record a sentinel for non-initialized late fields.
Change-Id: If77b39765e025989f83ef5f689b723984878df0a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134803
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-06 23:44:24 +00:00
Alexander Markov 7bf057bdfa [vm/nnbd] Stop using Function::nnbd_mode() in a couple of places
This CL fixes crashes

../../runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc: 3637: error: expected: nnbd_mode == parsed_function()->function().nnbd_mode()

due to Function::nnbd_mode() returning incorrect result when function
belongs to a synthetic mixin application class.

Change-Id: I7860eb6120b7291848d655d8151af2472421920d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134785
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-06 22:44:34 +00:00
Zichang Guo 748bbb720a Revert "fix hanging of write on Windows"
This reverts commit eb075dcc21.

Reason for revert: Out of memory on IA32 and On MacOS, invalid path argument on MacOS.

Original change's description:
> fix hanging of write on Windows
> 
> When using File::Write(), Var size in int64_t is casted to DWORD(unsigned long). When Var size is out of DWORD range, casted value will be zero. Before calling into File::Write() on Windows, validate the size.
> 
> Bug: https://github.com/dart-lang/sdk/issues/40339
> Change-Id: I36fade62dfa3025f418405cb3e45c286dd6b7db1
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134440
> Reviewed-by: Zach Anderson <zra@google.com>
> Commit-Queue: Zichang Guo <zichangguo@google.com>

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

Change-Id: I9d515912ad99f523c6d19fac0c8fbbb23a897986
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/40339
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134768
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-02-06 20:34:32 +00:00
Zichang Guo eb075dcc21 fix hanging of write on Windows
When using File::Write(), Var size in int64_t is casted to DWORD(unsigned long). When Var size is out of DWORD range, casted value will be zero. Before calling into File::Write() on Windows, validate the size.

Bug: https://github.com/dart-lang/sdk/issues/40339
Change-Id: I36fade62dfa3025f418405cb3e45c286dd6b7db1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134440
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-02-06 19:58:52 +00:00
Jason Simmons 04339705d0 [vm] Bring back the Fuchsia implementation of File::OpenStdio
Change-Id: Ic143fabd106c693779799916da9d0e81809d580f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134762
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Jason Simmons <jsimmons@google.com>
2020-02-06 19:44:07 +00:00
Alexander Markov ff34fd8110 [vm/aot/tfa] Tree shake write-only fields
So far tree shaking was removing fields which are not used at all.
This change improves tree shaking of fields so fields
which are only written or used as interface targets can be removed.

The following limitations apply:

* Field is not removed if there is a constant object with that field, as
  it may impact identity of constant objects which is an observable
  behavior.
* Field is not removed if it has a non-trivial initializer as it may
  have side-effects.
* Late final fields are not removed, as writing such fields may have
  side-effect.
* When field is removed, we may need to introduce an abstract getter
  or abstract setter if field is used as a target of an interface call.
  If a field was written, then setter would be non-abstract (but empty).

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

Change-Id: I79c00158b8eb658081a647c5dbdecde481fddb41
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134204
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-06 19:31:32 +00:00
Liam Appelbe 130de1a837 [vm] Reland NNBD flag flip
Bug: https://github.com/dart-lang/sdk/issues/40179
Change-Id: I3ab5e1f5a0ee69e9850910eee59611eb4583e498
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134601
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
2020-02-06 17:52:52 +00:00
Samir Jindel 9ec978eb4f [vm] Don't use write barrier for stores of nullable bools.
Fixes https://github.com/dart-lang/sdk/issues/39591.

Change-Id: I26ab979b54d74e3d0380c5002928ec897a8a7ef4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131073
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-02-06 17:40:42 +00:00
Jonas Termansen f688645909 [dart:io] [vm] Fix poll(2) loop while waiting for a process to exit.
The loop didn't correctly handle if the fd closed wasn't the last in the
list, instead it would skip an entry and would accidentally consider the
closed entry twice.

The error handling was also wrong, where a file descriptor could be
closed multiple times if an error occured after one of the file
descriptors had already been closed. Additionally the POLLERR and
POLLNVAL conditions were not handled.

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

Change-Id: I4b4da067bbaf40af329e37ccf45d85f8bbf6c914
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134723
Commit-Queue: Jonas Termansen <sortie@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-06 16:40:32 +00:00
Johnni Winther 80dacdf3a0 [kernel] Add Class.hasConstConstructor and Member.isNonNullableByDefault predicates
Closes #40440

Change-Id: I2776c165d23e2aa2bf5d7515741bd0f0d067b26d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134292
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2020-02-06 12:27:37 +00:00
Daco Harkes be38459b98 [vm] Arm Assembler simplify code for SubImmediateSetFlags
See https://dart-review.googlesource.com/c/sdk/+/124136/9/runtime/vm/compiler/assembler/assembler_arm.cc#3203

Change-Id: I8d2a1bb781f22d6aae0e02eacf042a203a44790d
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-product-arm-try,vm-ffi-android-release-arm-try,vm-kernel-linux-release-simarm-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-bare-linux-release-simarm-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm_x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134333
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-06 12:19:31 +00:00
Teagan Strickland 158f865f6c [vm/compiler] Fix parsing of Unicode escapes in S-expressions.
Change-Id: Ia8439b19f5c1901ad0205152ad1fdce0371cccad
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134720
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-02-06 12:08:51 +00:00
Victor Lima 43b69d4ba9 Refactor Instruction::speculative_mode()
The same instruction should be able to set different speculative
modes for its inputs when they are inserted by select representations,
e.g. static calls that have unboxed parameters might set unbox
instructions for those parameters as non speculative.

Change-Id: Ie450f0431e4dbbf0269869f520f59d5d5e946887
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134334
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Victor Agnez Lima <victoragnez@google.com>
2020-02-06 09:21:31 +00:00
Ben Konyi aadcb4418b [ DartFuzz ] Disable floating point operations when comparing different architectures
Comparing floating point results from different architectures can lead
to false divergences due to floating point errors or slightly different
implementations of specific operations (e.g., Float32x4.clamp behaves
differently around 0.0 for ARM and x64).

Should fix false divergences related to https://github.com/dart-lang/sdk/issues/40426

Change-Id: Ife0ab07d20e87add4e754e328bb8f7389920021d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134573
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-06 02:00:49 +00:00
Régis Crelier 3598d4340d [VM/nnbd] Consider nullability of type parameters in function type tests.
This also fixes issue #40259.

Change-Id: I2e603e927e98270bb24b726444490993e6360f97
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134572
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-06 01:45:29 +00:00
Ben Konyi 6548694a82 Reland "[ VM / DartDev ] Added support for format and pub commands via standalone VM"
Fixes a malloc/delete[] mismatch.

This reverts commit b3396cbdca.

Change-Id: I18fe142bc60bedd8af4c588ba4039742e1d34606
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134570
Reviewed-by: Liam Appelbe <liama@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-06 00:04:09 +00:00
Ryan Macnak d7fd79480e [vm] Don't hold IdleTimeHandler::mutex_ when entering a safepoint.
Change-Id: I8b6f6db81d1fa6047114ba4caea61dcbba8f316f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134580
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-05 23:29:02 +00:00
Martin Kustermann 7339b27f7f [vm/concurrency] Fix bug in Safepoint{Mutex,Monitor}Locker which can cause a deadlock
While a thread is outside a safepoint it should not perform any
long blocking operation and it must not acquire a Mutex/Monitor which
can be held while being inside a safepoint.

Right now we can have this situation

   GC wants to safepoint
   T1 is in a safepoint, acquires lock L and wants to leave safepoint (waits for GC to finish)
   T2 is not in a safepoint and tries to acquire lock L

With this CL, we ensure to always transition to a safepoint before
performing Lock/Enter/Wait.

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

Change-Id: I79c55c79bfe828a319f5b035880f578ef62d913a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134323
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-02-05 23:17:59 +00:00
Martin Kustermann 5f42db7441 [vm/concurrency] Make some service tests more robust
This is extracted to make the shared heap cl a bit smaller.

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

Change-Id: I2f5b959aefcb2de96f51c39667a18612debd17e3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134522
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2020-02-05 22:02:19 +00:00
Ben Konyi b3396cbdca Revert "[ VM / DartDev ] Added support for format and pub commands via standalone VM"
This reverts commit 1b959d6127.

Reason for revert: ASAN failures

Original change's description:
> [ VM / DartDev ] Added support for `format` and `pub` commands via standalone VM
> 
> Initial work to allow for Dart snapshots to be executed based on a verb
> provided to the VM. Examples:
> 
> - `dart format` === `dartfmt`
> - `dart pub run test` === `pub run test`
> 
> Change-Id: I22c9c2ab6790b485395f1148419c517641f693ac
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133663
> Commit-Queue: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

TBR=bkonyi@google.com,asiva@google.com

Change-Id: I35d9ff260e5f35f4e36b1e22ecf8b9dc1d2e3ed2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134564
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-05 20:56:19 +00:00
Ben Konyi a9bc5edbae [ dartfuzz ] Additional logging cleanup
Change-Id: I5bf18fb17089902b463ebb6561f40069047ee665
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134540
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-05 19:47:59 +00:00
Ben Konyi 1b959d6127 [ VM / DartDev ] Added support for format and pub commands via standalone VM
Initial work to allow for Dart snapshots to be executed based on a verb
provided to the VM. Examples:

- `dart format` === `dartfmt`
- `dart pub run test` === `pub run test`

Change-Id: I22c9c2ab6790b485395f1148419c517641f693ac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133663
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-02-05 19:37:14 +00:00
Ryan Macnak ac2cdd6ec1 [vm] Reject reloads that would remove fields from const objects.
Bug: https://github.com/dart-lang/sdk/issues/40442
Change-Id: I84db73dcea909fb2b911ce3def88284d2712d65c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134383
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-05 18:42:53 +00:00
Ben Konyi 763bcae067 Reland "[ VM / Service ] Added getClientName, setClientName and requireResumeApproval RPCs"
This reverts commit 37f4a44a27.

Reason for revert: Relanding after infra issues cleared

Original change's description:
> Revert "[ VM / Service ] Added `getClientName`, `setClientName` and `requireResumeApproval` RPCs"
> 
> This reverts commit 48808f7dce.
> 
> Reason for revert: Unable to approve failures.
> 
> Original change's description:
> > [ VM / Service ] Added `getClientName`, `setClientName` and `requireResumeApproval` RPCs
> > 
> > Add support for naming VM service clients which allows for resume
> > permissions to be set for all clients of the same name. If a client
> > name requires resume approval, an isolate won't be resumed until all
> > clients which require resume approval have called the `resume` RPC.
> > 
> > Resume approvals can be set for the following pause events:
> > - PauseOnStart
> > - PausePostRequest (issued after `reloadSources(pause: true)`)
> > - PauseOnExit
> > 
> > Change-Id: I7dde3d8aaeccfcf47fa84f1f92159846f1560e16
> > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133621
> > Commit-Queue: Ben Konyi <bkonyi@google.com>
> > Reviewed-by: Siva Annamalai <asiva@google.com>
> > Reviewed-by: Gary Roumanis <grouma@google.com>
> 
> TBR=jacobr@google.com,bkonyi@google.com,rmacnak@google.com,asiva@google.com,grouma@google.com
> 
> Change-Id: I8e60416ad8cbec9ad93f4e34e9bf9af5a516c6dc
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134465
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Commit-Queue: Ben Konyi <bkonyi@google.com>

TBR=jacobr@google.com,bkonyi@google.com,rmacnak@google.com,asiva@google.com,grouma@google.com

Change-Id: Ibd9d831774e5c4dd500da026f41b173589a9aefd
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134415
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-05 18:14:39 +00:00
Alexander Markov e8cb7f1bc9 [vm/nnbd] Make sure nullability is not changed after type testing stub is selected
Fixes https://github.com/dart-lang/sdk/issues/40465

Change-Id: Iaa221440e941b725e8ca123b6708b510b8ef015b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134413
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-02-05 18:02:20 +00:00
Daco Harkes 73160d74bc [vm/ffi] Revert erroneous assertions
Reverts adding the asserts from https://dart-review.googlesource.com/c/sdk/+/129081/47/runtime/vm/compiler/ffi/abi.cc

Change-Id: I2575cfa717a464f92c29ac8e5439d1173ce13cf0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134337
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-02-05 16:53:10 +00:00
Daco Harkes b17459731a [vm] fix ifdefs after constants refactoring
Change-Id: I273ca9df6bf0ed45f8441d4f8acc91f8452d884c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134336
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-05 16:36:09 +00:00
Aske Simon Christensen 4ab9c71a6b [vm/aot] Enable table dispatch by default.
Most benchmarks see speed improvements, especially the ones doing many
highly polymorphic calls. DeltaBlue on X64 is 35% faster.

ARM64 instructions size reduction on Flutter benchmarks ranges from
1.6% to 2.5% (0.7% to 1.2% on total size).

In terms of absolute numbers, the most significant size changes in the
Flutter Gallery snapshot are:

                 v7 before v7 after v7 diff  v8 before v8 after v8 diff
Instructions       6034448  5964136  -70312    5880528  5740112 -140416
ObjectPool          139175   102704  -36471     141186   104720  -36466
UnlinkedCall          5795     3331   -2464       5795     3331   -2464
DispatchTable            0    48802  +48802          0    48796  +48796
CompressedStackMaps 410194   421222  +11028     461743   470841   +9098
Total              6589612  6540195  -49417    6489252  6367800 -121452

Change-Id: I78663b423c91ab105fc52a8e0bcb47eaf8cc57fb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131833
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-05 16:07:09 +00:00
Daco Harkes a71d60c1cf [vm/ffi] Support Linux on Arm 32-bit (hardfp)
Implement the hardfp calling convention.

Tested QEMU locally as the bots are not online yet.

tools/test.py -m debug -a arm -c dartkp --use-qemu ffi_2 ; tools/test.py -m debug -a arm -c dartk --use-qemu ffi_2
Test configuration:
    custom configuration(architecture: arm, compiler: dartkp, mode: debug, runtime: dart_precompiled, system: linux, use-qemu)
Suites tested: ffi_2
[00:45 | 100% | +  189 | -    0]
Test configuration:
    custom configuration(architecture: arm, compiler: dartk, mode: debug, runtime: vm, system: linux, use-qemu)
Suites tested: ffi_2
[09:52 | 100% | +  189 | -    0]

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

Change-Id: Ic34175bdf9b9f359f1126aeb157362e76443921a
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
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/124136
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-05 14:22:59 +00:00
Daco Harkes 8408232522 [vm/ffi] Replace FFI compiler pipeline
Introduces NativeRepresentation and NativeLocation for the compilation of FFI.

NativeRepresentations are able to express all representations (or types) of the native ABIs we bind to with FFI, this is more representations that than that are used in Dart itself.
NativeLocations are able to express all locations of the native ABIs we bind to with FFI, this is more types of locations than that are used for the Dart calling convention.
See the documentation in the respective files.

These NativeLocations and NativeRepresentations are computed by the NativeCallingConvention and consumed by the Marshaller and Assemblers.

This reenginering is required for go/dart-ffi-by-value, hardfp (Arm S and D fpu registers), and iOS 64 bit (non-word-aligned stack arguments).

In addition, by using the NativeRepresentations we also get slightly reduced code size:

* The tracking of sizes is improved, so less sign/zero-extension operations are required.
* UnboxedWidthExtenderInstr is fully removed, the size extension is done inside the native moves, coalescing moves and size extension when possible.
* BitCastInstr is only used when really needed. This reduces code-size on arm32 softfp.

This fixes the iOS arm64 calling convention, manually tested with https://github.com/flutter/flutter/pull/46078 and https://dart-review.googlesource.com/c/sdk/+/131074.

Fixes: https://github.com/dart-lang/sdk/issues/39637
Issue: https://github.com/dart-lang/sdk/issues/36309
Issue: https://github.com/dart-lang/sdk/issues/36730

Change-Id: I8878bc0f314277bab4ca22f417c6295ecc017720
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
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/129081
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-05 08:46:07 +00:00
Daco Harkes 3284ef81a6 [vm] Clean up constants namespacing
This commit undoes https://dart-review.googlesource.com/c/sdk/+/97325 because we removed DBC.

Fixes: https://github.com/dart-lang/sdk/issues/40457
Change-Id: I873a8c6daa2ef79f7b0a5dff00d52f12d5770476
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134298
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-05 08:46:07 +00:00
Daco Harkes 43fe0b35d8 [vm] Clean up Location templating
This commit undoes https://dart-review.googlesource.com/c/sdk/+/97312 because we removed DBC.

Fixes: https://github.com/dart-lang/sdk/issues/40458
Change-Id: I7e08544e4c57d34c6f4bfc10aeed8ab87ed31953
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134297
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-05 08:46:07 +00:00
Ben Konyi 37f4a44a27 Revert "[ VM / Service ] Added getClientName, setClientName and requireResumeApproval RPCs"
This reverts commit 48808f7dce.

Reason for revert: Unable to approve failures.

Original change's description:
> [ VM / Service ] Added `getClientName`, `setClientName` and `requireResumeApproval` RPCs
> 
> Add support for naming VM service clients which allows for resume
> permissions to be set for all clients of the same name. If a client
> name requires resume approval, an isolate won't be resumed until all
> clients which require resume approval have called the `resume` RPC.
> 
> Resume approvals can be set for the following pause events:
> - PauseOnStart
> - PausePostRequest (issued after `reloadSources(pause: true)`)
> - PauseOnExit
> 
> Change-Id: I7dde3d8aaeccfcf47fa84f1f92159846f1560e16
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133621
> Commit-Queue: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>
> Reviewed-by: Gary Roumanis <grouma@google.com>

TBR=jacobr@google.com,bkonyi@google.com,rmacnak@google.com,asiva@google.com,grouma@google.com

Change-Id: I8e60416ad8cbec9ad93f4e34e9bf9af5a516c6dc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134465
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-05 01:13:17 +00:00
Ben Konyi 48808f7dce [ VM / Service ] Added getClientName, setClientName and requireResumeApproval RPCs
Add support for naming VM service clients which allows for resume
permissions to be set for all clients of the same name. If a client
name requires resume approval, an isolate won't be resumed until all
clients which require resume approval have called the `resume` RPC.

Resume approvals can be set for the following pause events:
- PauseOnStart
- PausePostRequest (issued after `reloadSources(pause: true)`)
- PauseOnExit

Change-Id: I7dde3d8aaeccfcf47fa84f1f92159846f1560e16
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133621
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Gary Roumanis <grouma@google.com>
2020-02-05 00:02:17 +00:00
Ryan Macnak 68d178f223 [vm] Remove FLAG_support_service and FLAG_support_reload, superseded by PRODUCT define.
When these were originally added, we thought we would be able to use them in place of ifdefs and rely on the compiler optimizations and linker GC to remove things. This turned out not to reliably remove what we wanted removed, so we ended up with the ifdefs anyway.

Change-Id: I62e74d60d92b18a688b9dffaf77b1440c10a07ff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134402
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2020-02-04 23:31:17 +00:00
Ben Konyi bbe0e3b768 [ DartFuzz ] Quality of life improvements in log output
- Updated reproduction commands to not include bot paths (should be
copy-pasteable and runnable from $SDK_ROOT now).
- Fixed issue where Dart SDK revision wasn't being printed on the bots

Change-Id: Ia53986332eb7997d5b3911c5de4e5ce1d61e6eb3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134420
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-02-04 22:06:30 +00:00
Martin Kustermann e171ff4a6d [vm/concurrency] Speed up isolate communication via normal snapshotting
Do not lock forwarding table during snapshot writing:

This is a follow-up to [0], which made the [WeakTable] used during
snapshot writing per isolate. Since each isolate has it's own table
now, there's not reason to lock it during snapshot writing.

Furthermore we speed up RawObject::InVMIsolateHeap() which was super slow
due to locking "vm-isolate"'s page space and walking all pages.

[0] https://dart-review.googlesource.com/c/sdk/+/114858


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

Change-Id: I783ea6083c199058e76895fcde38dc06af6991d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134299
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-02-04 20:46:36 +00:00
Régis Crelier dfce72bbf9 [VM/nnbd] Fix canonicalization of type 'Never' (fixes #40249).
Change-Id: Ib3dc4fc6d31aeadb331fda017fc8b4f1a8ae8221
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134382
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-02-04 20:31:56 +00:00
Ryan Macnak 7c472c396c [vm] Speed-up the stack overflow check as used by reload stress testing.
Avoid calling Function::ToFullyQualifiedCString when it is not needed.

Change-Id: I7d8ed879bb47e5e06c456bec73e4e00ae0181cd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134241
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-02-04 18:16:59 +00:00
Teagan Strickland bb24f98616 Revert "[vm/aot] Remove object wrapping of bare instructions for AOT snapshots."
This reverts commit 7475c637c3.

Reason for revert: Breakage on simarm_x64 (and thus arm_x64)

Original change's description:
> [vm/aot] Remove object wrapping of bare instructions for AOT snapshots.
> 
> Now, when writing an AOT snapshot in bare instructions mode, only
> the actual instructions in the RawInstructions payload are serialized
> instead of the entire RawInstructions object.
> 
> Since there are no longer RawInstructions objects in these AOT
> snapshots, we also change how Code objects are serialized. Instead
> of just containing a reference to the RawInstructions object, we
> serialize two pieces of information: where the instructions
> payload for this Code object begins and whether there was a single
> entry for the instructions payload. (To save space, the single
> entry bit is serialized as the low order bit of the unchecked
> offset, which was already being serialized).
> 
> While we also need the length of the instructions payload, we
> approximate it for all but the last Code object by subtracting
> the next Code object's payload start from this Code object's
> payload start. For the last Code object, we assume it extends
> to the end of the instructions image.
> 
> Changes on flutter gallery in release mode:
> armv7: instructions size -2.66%, total size -1.68%
> armv8: instructions size -5.81%, total size -3.49%
> 
> Fixes https://github.com/dart-lang/sdk/issues/38451.
> 
> Change-Id: Ia458e8d99bae18f5c3b6e849df2519027f06f574
> Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131067
> Commit-Queue: Teagan Strickland <sstrickl@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

TBR=kustermann@google.com,rmacnak@google.com,sstrickl@google.com

Change-Id: If2c8ca6b0993211b2509b275af7ff11a8fa2baa3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-simarm_x64-try, vm-kernel-precomp-android-release-arm64-try, vm-kernel-precomp-android-release-arm_x64-try, vm-kernel-precomp-mac-release-simarm64-try, vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134322
Reviewed-by: Teagan Strickland <sstrickl@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2020-02-04 17:32:28 +00:00
Teagan Strickland 592e59691b Revert "[gardening] Fix assert failure on (sim)arm_x64 due to 7475c63."
This reverts commit 30e80f0a64.

Reason for revert: Other failures were hiding under the ASSERT failure.

Original change's description:
> [gardening] Fix assert failure on (sim)arm_x64 due to 7475c63.
> 
> Also since we write out a target word for the
> InstructionsSection::instructions_length_ field, make that field a
> uword, not a uint32_t.
> 
> Change-Id: I8032cf49aae9528702778ee3ed717c08cb281e54
> Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-bare-linux-release-x64-try
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134290
> Reviewed-by: Martin Kustermann <kustermann@google.com>

TBR=kustermann@google.com,dacoharkes@google.com,sstrickl@google.com

Change-Id: I694411d9e986062148888aaddedc75673039dfe0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-simarm_x64-try, vm-kernel-precomp-bare-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134321
Reviewed-by: Teagan Strickland <sstrickl@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2020-02-04 17:30:58 +00:00
Liam Appelbe a793c36c77 [test] Run late field tests in optimised mode
Fix the tests by disabling the optimisation that turns getter calls into
raw gets if the field is late, and by calling recording the null init
store in bytecode mode.

Change-Id: I8f12e3237cd32c890b5cef8d00c32940e937330d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134180
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-04 16:51:38 +00:00
Teagan Strickland 30e80f0a64 [gardening] Fix assert failure on (sim)arm_x64 due to 7475c63.
Also since we write out a target word for the
InstructionsSection::instructions_length_ field, make that field a
uword, not a uint32_t.

Change-Id: I8032cf49aae9528702778ee3ed717c08cb281e54
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-bare-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134290
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-04 16:01:52 +00:00
Victor Lima e076e793a7 [vm] Allow unboxed integer fields in AOT
flutter arm-v8:
  gallery instructions size: -0.46%
  gallery total size: -0.35%

  sync_star_generated (Pixel 2): -8.04% (less is better)
  velocity_tracker_bench (Pixel 2): -9.18% (less is better)

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

Change-Id: Ieb7bf426af37f77fd543ebc5314a94224da3aaeb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132606
Commit-Queue: Victor Agnez Lima <victoragnez@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-04 12:37:21 +00:00
Teagan Strickland 7475c637c3 [vm/aot] Remove object wrapping of bare instructions for AOT snapshots.
Now, when writing an AOT snapshot in bare instructions mode, only
the actual instructions in the RawInstructions payload are serialized
instead of the entire RawInstructions object.

Since there are no longer RawInstructions objects in these AOT
snapshots, we also change how Code objects are serialized. Instead
of just containing a reference to the RawInstructions object, we
serialize two pieces of information: where the instructions
payload for this Code object begins and whether there was a single
entry for the instructions payload. (To save space, the single
entry bit is serialized as the low order bit of the unchecked
offset, which was already being serialized).

While we also need the length of the instructions payload, we
approximate it for all but the last Code object by subtracting
the next Code object's payload start from this Code object's
payload start. For the last Code object, we assume it extends
to the end of the instructions image.

Changes on flutter gallery in release mode:
armv7: instructions size -2.66%, total size -1.68%
armv8: instructions size -5.81%, total size -3.49%

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

Change-Id: Ia458e8d99bae18f5c3b6e849df2519027f06f574
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131067
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-02-04 10:28:43 +00:00
Vyacheslav Egorov ab56c2f841 [runtime/docs] Add custom lexer for shell sessions in runtime wiki.
This was missing from the previous wiki related commit.

TBR=aam@google.com

Change-Id: Ib68ead3bab2841bb8e02cb93fd71bce7515ff335
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134285
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-02-04 09:16:52 +00:00
Vyacheslav Egorov 857b911f3b [vm/docs] Publish "Introduction to Dart VM" source and build tools.
Change-Id: I30068d6492bd6ec4ce42cc50d4a481960a0197fe
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133985
Reviewed-by: Alexander Aprelev <aam@google.com>
2020-02-04 09:04:32 +00:00
Jens Johansen 18c281c624 [observatory] Allow to say 'break package:foo/file.dart:42'
This CL updates the parsing of "break" statements in the debug console
in observatory, as well as handling that the same script can be a part
of several libraries.

Before one could get stuff like this:
$ break package:front_end/src/fasta/scope.dart:389
Function 'package:front_end/src/fasta/scope.dart:389' not found
$ break scope.dart:389
Script 'scope.dart' is ambiguous

The first one is fixes by this CL: We now allow package uris and thus
no longer think it's a function. In this case it wouldn't have mattered
though, it would just say it was ambiguous, as the last case.
This is caused by the same script being found twice. By using a set
instead of a list, that's fixed too.

Change-Id: I3931c8f2abc0a3a5a77cff516da8767037196bf2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133593
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2020-02-04 08:57:01 +00:00