New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ffi] Add support for abi-specific structs #42816
Labels
area-vm
Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends.
library-ffi
Comments
@dcharkes That's pretty neat. What happens if accessing field |
vsmenon
added
area-vm
Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends.
library-ffi
labels
Jul 24, 2020
copybara-service bot
pushed a commit
that referenced
this issue
Nov 3, 2021
This CL expands the ABIs in the FFI transform and VM from 3 groups to 18 individual ABIs in preparation of adding ABI-specific integer sizes and structs. This increases const lists with offsets in the kernel representation from 3 to 18 elements. We do not expect significant size increases or performance regressions from this. The constants are deduplicated in Dart and the optimizer should optimize indexed lookups in const lists away. However, landing this separately will enable us to verify that assumption. This also moves `Abi` to its own file and makes it an opaque class with a predefined set of instances so that we do not depend on its internals. That will enable us to keep `pkg/vm/lib/transformations/ffi/abi.dart` consistent with the `Abi` abstraction to be introduced in `dart:ffi` later for specifying ABI-specific integer sizes. Bug: #42563 Bug: #42816 List of ABIs decided based on what's currently used (as Dart SDK target platform, or Flutter target platform, or G3 target) and added windows_arm64 in anticipation of (flutter/flutter#53120). Excluded are macos_ia32 (#39810) because we discontinued support; and windows_arm, fuchsia_arm, fuchsia_ia32, ios_ia32, and macos_arm because these are unlikely to be added. TEST=pkg/front_end/testcases/*.expect TEST=tests/ffi/* Change-Id: I437707c18d8667490c063272a5f8a33d846e6061 Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-debug-x64-try,vm-ffi-android-debug-arm-try,vm-kernel-mac-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-precomp-linux-debug-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-ffi-android-debug-arm64c-try,vm-kernel-mac-release-arm64-try,vm-precomp-ffi-qemu-linux-release-arm-try,vm-kernel-precomp-android-release-arm64c-try,vm-kernel-precomp-android-release-arm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217184 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Clement Skau <cskau@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Dec 1, 2021
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: #42563 Bug: #42816 Closes: #45254 Later, we might open up the contents of `Abi` if need be. Some API design discussion notes: #42563 (comment) 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>
copybara-service bot
pushed a commit
that referenced
this issue
Dec 2, 2021
TEST=pkg/analyzer/test/src/diagnostics/abi_specific_integer_mapping_test.dart Bug: #42816 Change-Id: I7ae6e05073e6f28a42b5f8f7d06c9b5b91c510a7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221821 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
copybara-service bot
pushed a commit
that referenced
this issue
Dec 2, 2021
When ABI-specific integers are introduced, their mappings can be partial. We need to account for this in the marshaller. This CL refactors the marshaller API to take an char** error return parameter and changes the return type to a pointer (nullable) rather than a reference. Note that with only this CL we can not generate errors yet, because all native types are still complete. TEST=runtime/vm/compiler/ffi/native_type_vm_test.cc TEST=tests/ffi* Bug: #42816 Change-Id: Id97e73795c357e129e6280e8c5b528d18072c14d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221632 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area-vm
Use area-vm for VM related issues, including code coverage, FFI, and the AOT and JIT backends.
library-ffi
Sometimes structs are defined differently on different platforms. (Some fields might be commented out on some platforms.)
A workaround is to have a different struct for the different platforms, but that cascades into everything that is using that struct (function signatures, struct fields, and pointers).
We could introduce an AbiSpecificStruct that exposes all the different fields on all platforms in one api.
This would be the struct/union counterpart of #42563.
edit: We would probably make an API similar to https://api.dart.dev/stable/2.17.0/dart-ffi/AbiSpecificInteger-class.html with annotations instead of types.
The text was updated successfully, but these errors were encountered: