9b42e2d1663ce3855097e7f8acaeaffc511f88a3
18 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
92e5746494 |
Reland "[vm/ffi] Add class modifiers"
This is a reland of commit
|
||
|
|
7471994270 |
Revert "[vm/ffi] Add class modifiers"
This reverts commit
|
||
|
|
1755f89092 |
[vm/ffi] Add class modifiers
Adds class modifiers to `dart:ffi`. Migrates all user-defined subclasses of `Struct`, `Union`, `Opaque`, and `AbiSpecificInteger` to be `final class`es. Does not remove the manual error checking, so some errors will show up twice now in language version 3.0. In language version <3.0, only the FFI-specific error will show up. In a follow-up CL, we will try to make the language-errors to show up also <3.0 so that we can remove the FFI-specific errors. Examples of duplicated errors: pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_test.dart TEST=pkg/analyzer/test/ (for the analyzer) TEST=pkg/front_end/testcases/ (for the CFE) TEST=test/ffi/ (for the VM) CoreLibraryReviewExempt: No need for dart2js to review. Bug: https://github.com/dart-lang/sdk/issues/51683 Change-Id: I2964ceccb7db59fbdaf6be5319f5e4ec2dabe0f3 Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-win-release-try,pkg-mac-release-try,vm-precomp-ffi-qemu-linux-release-riscv64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,vm-reload-rollback-linux-debug-x64-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/289223 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Devon Carew <devoncarew@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Jackson Gardner <jacksongardner@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
29d7be011e |
[cfe] Omit line/column from sdk constant coverage
This is done to avoid unnecessary dependency on sdk sources. Change-Id: I5a72df4bb3a808a5a6398ae45ca587b43734314d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251264 Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com> |
||
|
|
c2339ee782 |
[dart2wasm] Basic FFI support
Implements memory access through the `Pointer`, `Struct` and `Union` FFI types. `Pointer` supports `fromAddress`, `address`, `elementAt`, `cast`, `value`, `ref` (only getter), `[]`, `[]=` (not for structs and unions), `==` and `hashCode`. Structs and unions support getters and setters for their members. `Pointer`, `Struct` and `Union` are all represented as `i32`, both internally and in imports and exports. They currently don't have any boxed representation, which means they can't be nullable (a `Pointer` can still contain `nullptr` - the C null) and can't be assigned to supertypes (i.e. `Object`, `dynamic`, type variables), stored in containers nor passed as arguments or return values of local functions or function expressions. To pass an FFI value in these situations, box it manually by storing it in a field. For the FFI integer types, only the explicitly sized versions (e.g. `Int8`, `Uint32`) are supported. Whenever the feature is used, the module will import a memory by the name "ffi.memory", which will be accessed by the operations. This also adds an optional commandline argument to `run_wasm.js` to specify the module containing the FFI code. When such a module is specified, it will be instantiated first, and its exports will appear as imports to the Dart module under the "ffi" module name. Change-Id: Ie55b072056f972b42db6b75e0c676944bbe88c1a Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237686 Reviewed-by: Joshua Litt <joshualitt@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Aske Simon Christensen <askesc@google.com> |
||
|
|
3156c5629d |
[cfe/ffi] Implement Finalizable
This CL implements `Finalizable` by means of a CFE transform. The transform is implemented in the existing FFI transform to avoid the overhead of traversing the AST an extra time. The FFI transform slows down ~15-30% on Flutter Gallery. For more info see the design doc. TEST=`dart pkg/vm/test/transformations/ffi_test.dart` Design doc: go/dart-vm-finalizable Bug: https://github.com/dart-lang/sdk/issues/47777 Change-Id: I0bf9dead90a61631b7f215dc19fbaa9e40e63c8d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/227501 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
045b9c1715 |
Reland "[vm/ffi] Add common C types"
We're adding these types to `dart:ffi` rather than `package:ffi` so that they can be used with `FfiNative`s. Adds `NativeType`s for the following C types: * unsigned char * signed char * short * unsigned short * int * unsigned int * long * unsigned long * long long * unsigned long long * uintptr_t * size_t * wchar_t Because the C standard only defines minimum sizes for many of these types, future platforms might diverge from the typical size even if all platforms currently agree on a size. To avoid having to reification later, we define all types as AbiSpecificIntegers rather than typedefs, even if all current target platforms agree on the size. Closes: https://github.com/dart-lang/sdk/issues/36140 TEST=tests/ffi/c_types_test.dart Original patch in patchset 1. * Removes `Char` for now until package:win32 has rolled to 2.3.8 in Flutter. https://pub.dev/packages/win32/versions/2.3.8/changelog https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8824468064587445729/+/u/Android_Views_Integration_Tests/stdout * Adds `c_type.dart` in `ffi_source.gni` which should fix `IntPtr` missing when analyzing `path_provider_linux`. (However, I was unable to reproduce the issue locally.) https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8824468064571399025/+/u/run_test.dart_for_flutter_plugins_shard_and_subshard_analyze/test_stdout `/tmp/flutter_plugins.KZMNMC/packages/path_provider/path_provider_linux$ ~/flt/engine/src/out/host_debug/dart-sdk/bin/dart analyze --fatal-infos` Change-Id: I89130cccba285fc9c483bb53f5710a302f2b104f Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,vm-canary-linux-debug-try,vm-fuchsia-release-x64-try,vm-kernel-gcc-linux-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-mac-debug-x64-try,vm-kernel-mac-release-arm64-try,vm-kernel-nnbd-win-release-ia32-try,vm-kernel-nnbd-win-release-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-win-release-x64-try,flutter-analyze-try,flutter-engine-linux-try,flutter-frontend-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/229156 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
5183ba3ca4 |
Revert "[vm/ffi] Add common C types"
This reverts commit
|
||
|
|
85a87ca7ae |
[vm/ffi] Add common C types
We're adding these types to `dart:ffi` rather than `package:ffi` so that they can be used with `FfiNative`s. Adds `NativeType`s for the following C types: * char * unsigned char * signed char * short * unsigned short * int * unsigned int * long * unsigned long * long long * unsigned long long * uintptr_t * size_t * wchar_t Because the C standard only defines minimum sizes for many of these types, future platforms might diverge from the typical size even if all platforms currently agree on a size. To avoid having to reification later, we define all types as AbiSpecificIntegers rather than typedefs, even if all current target platforms agree on the size. Closes: https://github.com/dart-lang/sdk/issues/36140 TEST=tests/ffi/c_types_test.dart Change-Id: Ie97d253856d787386529231e8060f879069be886 Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,vm-canary-linux-debug-try,vm-fuchsia-release-x64-try,vm-kernel-gcc-linux-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-mac-debug-x64-try,vm-kernel-mac-release-arm64-try,vm-kernel-nnbd-win-release-ia32-try,vm-kernel-nnbd-win-release-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-win-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/228541 Reviewed-by: Martin Kustermann <kustermann@google.com> |
||
|
|
acdf82de17 |
[vm/ffi] ABI-specific integers
This CL adds support for users defining integers which are mapped to
differing sizes and signedness based on the application binary interface
the Dart VM is running on.
Notable implementation design decisions:
- ABIs are open world, so that adding an ABI to the Dart VM does not
break existing definitions. Thus, we only figure out in the VM that
we're missing a mapping. We throw compile-time errors.
- In AOT, these show up in the precompilation step.
- In JIT, these show up as `_CompileTimeError` at runtime. Note that
these can be caught. So in subsequent compilation steps we need to
ensure that we also throw the same compile-time error.
- We match on the call-sites (streaming_flowgraph_builder) rather than
method bodies (kernel_to_il) of AbiSpecific loads and stores so that
we can compile for the int-size of the call site.
API design decisions:
https://github.com/dart-lang/sdk/issues/42563#issuecomment-981774001
Closes: https://github.com/dart-lang/sdk/issues/42563
TEST=tests/ffi_2/abi_*_test.dart
TEST=tests/ffi/function_*_generated_test.dart
TEST=tests/ffi/vmspecific_static_checks_test.dart
Change-Id: I8c8df36fab939b6fb614c5f1ee8e1bf46b6e9521
Cq-Include-Trybots: luci.dart.try:analyzer-linux-release-try,analyzer-nnbd-linux-release-try,app-kernel-linux-debug-x64-try,benchmark-linux-try,dart-sdk-linux-try,front-end-linux-release-x64-try,front-end-nnbd-linux-release-x64-try,pkg-linux-debug-try,vm-canary-linux-debug-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-fuchsia-release-x64-try,vm-kernel-checked-linux-release-x64-try,vm-kernel-gcc-linux-try,vm-kernel-linux-debug-x64c-try,vm-kernel-mac-debug-x64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-nnbd-win-release-ia32-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-precomp-asan-linux-release-x64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-android-release-arm64c-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-win-debug-x64c-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-precomp-ffi-qemu-linux-release-arm-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221501
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
|
||
|
|
663357209c |
[vm/ffi] Introduce Abi
This introduces the application binary interface (ABI) concept to `dart:ffi` as a class with opaque instances. We will use this for providing mappings for ABI-specific types. Bug: https://github.com/dart-lang/sdk/issues/42563 Bug: https://github.com/dart-lang/sdk/issues/42816 Closes: https://github.com/dart-lang/sdk/issues/45254 Later, we might open up the contents of `Abi` if need be. Some API design discussion notes: https://github.com/dart-lang/sdk/issues/42563#issuecomment-981774001 TEST=tests/ffi/abi_test.dart Change-Id: Iebf290fc12f37d6f4236432ddf27ab3e12bde06d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221627 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
ed802c248d |
[CFE] Fix constant coverage for super calls
Previously super calls used the constructer they we're super's for as callers when accounting for coverage. That's not accurate (in that it's not the cause for the evaluation) and is fixed here. Change-Id: Icee2b64c568063c7729a0b9a70f0a6ec36aedae6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205644 Commit-Queue: Jens Johansen <jensj@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> |
||
|
|
be893fdf27 |
[vm/ffi] Add providesSymbol to DynamicLibrary
This adds the providesSymbol method to DynamicLibrary. It returns whether the library contains a function with the given name. As per dlsym(3), it is valid for dlsym to return nullptr in a success case if the symbol actually has a NULL value. So I've changed the logic to check for dlerror() after we invoke dlsym(), both in the existing lookup and in the new method. Closes https://github.com/dart-lang/sdk/issues/46192 TEST=tests/ffi(_2)/has_symbol_test.dart Change-Id: Ibcb1c051cc0cdd95a104fe86ef2fc76da5bafb5d Cq-Include-Trybots: luci.dart.try:vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64-try,vm-ffi-android-debug-arm-try,vm-kernel-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-mac-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/201900 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
8a2b7bb5d5 |
[vm/ffi] Support Unions
Closes: https://github.com/dart-lang/sdk/issues/38491 tools/test.py ffi ffi_2 TEST=tests/ffi(_2)/(.*)by_value_(*.)_test.dart Change-Id: I6d29f7e3c3046cda4a15c9b42063c66b064787be Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-mac-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-nnbd-mac-release-x64-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-precomp-android-release-arm_x64-try,analyzer-analysis-server-linux-try,vm-kernel-precomp-linux-debug-x64c-try,vm-kernel-linux-debug-x64c-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/194420 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com> |
||
|
|
4ba4fd3f1d |
[analyzer/ffi] Inline array annotation const dimensions
Moves the Array forwarding constructors and _ArraySize class out of the patch files so that the analyzer can reason about them. (The analyzer does not include patch files, because it does not know whether it's analyzing for VM or JS backend.) Closes: https://github.com/dart-lang/sdk/issues/45507 Change-Id: Ia0eb4bbca40b906a1e636714f53c5c73dcfc3cad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193403 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> |
||
|
|
ffa5d16ae7 |
[vm/ffi] Support multi-dimensional inline arrays
This CL only changes dart:ffi API, CFE, and analyzer. No VM changes were needed because the dimensions of inline arrays can be flattened before passing them to the VM. The multi-dimensionality does not impact the ABI. Closes: https://github.com/dart-lang/sdk/issues/45023 TEST=pkg/analyzer/test/src/diagnostics/size_annotation_dimensions_test.dart TEST=pkg/front_end/testcases/nnbd/ffi_struct_inline_array_multi_dimensional.dart TEST=tests/ffi/function_structs_by_value_generated_test.dart TEST=tests/ffi/inline_array_multi_dimensional_test.dart Change-Id: Ica2c01fccbea7e513879365b34086d8968b54c5b Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-mac-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-nnbd-mac-release-x64-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-precomp-android-release-arm_x64-try,analyzer-analysis-server-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/188286 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com> |
||
|
|
0295dfc74e |
[vm] Support redirecting external const factories
This CL introduces the first combination of `external const factory` with `@patch const factory (.*) = (.*)`. This specific combination was never used in the core libraries, and did not work. Half of the fix is a missing flag from the CFE: https://dart-review.googlesource.com/c/sdk/+/187440 The other half of the fix is matching on the kRedirectingFactoryConstructor tag, and allowing constructor names in procedure targets (even though we never compile those expressions because they are invalid). Bug: https://github.com/dart-lang/sdk/issues/45101 TEST=Using redirecting const factory in patch file in core lib. TEST=tests/ffi(_2)/* Change-Id: I5524bde928290bf32aaea9170eda1f2d03127fa6 Cq-Include-Trybots: luci.dart.try:benchmark-linux-try,front-end-linux-release-x64-try,vm-kernel-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/187003 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com> Reviewed-by: Clement Skau <cskau@google.com> |
||
|
|
d45fd0f9d5 |
[vm/ffi] Support inline arrays in Structs
Adds support for single dimension inline arrays in structs. Multi- dimensional arrays will be supported in a future CL. This CL adds: - CFE static error checks for inline arrays. - CFE transformations for inline arrays. - VM consumption of inline array fields for NativeType. - Test generator support for inline arrays + generated tests. Previous CLs added support for inline arrays in: - analyzer https://dart-review.googlesource.com/c/sdk/+/183684 - updated in this CL to new API. - ABI calculation https://dart-review.googlesource.com/c/sdk/+/183682 Closes: https://github.com/dart-lang/sdk/issues/35763 Open issue: https://github.com/dart-lang/sdk/issues/45101 CFE transformations are tested with expectation files: TEST=pkg/front_end/testcases/(.*)/ffi_struct_inline_array.dart Trampolines and CArray API are tested with end-to-end Dart tests: TEST=tests/ffi(_2)/(.*)by_value(.*)test.dart TEST=tests/ffi(_2)/inline_array_test.dart Compile-time errors (both CFE and analyzer) are tested in: TEST=tests/ffi(_2)/vmspecific_static_checks_test.dart Change-Id: I014c0e4153f1b885638adce80de6ab3cac8e6bb2 Cq-Include-Trybots: luci.dart.try:dart-sdk-linux-try,dart-sdk-mac-try,dart-sdk-win-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-mac-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-nnbd-mac-release-x64-try,vm-kernel-nnbd-win-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-msan-linux-release-x64-try,vm-kernel-precomp-msan-linux-release-x64-try,vm-kernel-precomp-android-release-arm_x64-try,analyzer-analysis-server-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/183640 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Clement Skau <cskau@google.com> |