dart-sdk/runtime
Simon Binder a44a524bb0 [vm/ffi]: Add Native.addressOf
This adds the `Native.addressOf` function, which takes a constant tear-
off of a method annotated with `@Native` as a parameter and returns a
pointer to the underlying C function.

The CFE will resolve these calls in two steps: First, the existing
transformer for `@Native` methods adds a pragma describing the fully-
resolved native annotation (with the asset id inferred from the library
if not given explicitly). Then, the FFI use sites transformer rewrites
calls to `Native.addressOf` by searching for this pragma on the passed
function and passing the `Native` constants to `Native._addressOf`. The
latter method is implemented in the VM, which can re-use existing parts
already used for `@Native` calls.
An alternative implementation strategy would have been to forward
`addressOf` calls to `Native.ffi_resolver_function` directly without
any special consideration in the VM. However, the chosen approach makes
it easier to support static linking in the future, as this requires
unresolved symbols in the generated assembly.

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

TEST=pkg/vm/testcases/transformations/ffi/ffinative.dart
TEST=tests/ffi/native_assets/asset_*_test.dart
TEST=tests/ffi/vmspecific_static_checks_ffinative_test.dart
TEST=pkg/analyzer/test/src/diagnostics/ffi_native_test.dart

Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64c-try,vm-aot-win-release-x64-try,vm-kernel-precomp-linux-release-x64-try
CoreLibraryReviewExempt: VM & dart2wasm only feature
Change-Id: Ic8e3a390146dffd44c95578f975a4472db79a0ee
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/333920
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2023-12-05 13:10:36 +00:00
..
bin [vm, compiler] Unwind record alignment. 2023-12-04 21:49:24 +00:00
docs doc(runtime): Small Correction on Runtime Doc (2nd attempt) 2023-11-30 13:25:34 +00:00
include [vm/ffi] Improve Dart_InitializeApiDL doc 2023-12-02 04:33:55 +00:00
lib [vm] Remove dead code for resolving Isolate.spawn entry points by qualified name. 2023-12-04 21:18:59 +00:00
observatory [ Service ] Delete kill_paused_test and kill_running_test 2023-11-29 17:55:49 +00:00
platform [vm/aot] Fix BoxInt64 in deferred units 2023-11-28 13:15:56 +00:00
tests [test] Remove use of waitFor from isolate stress tests. 2023-12-04 21:26:59 +00:00
tools [vm] Fix some cross compilation issues from Linux to Windows 2023-11-13 14:25:28 +00:00
vm [vm/ffi]: Add Native.addressOf 2023-12-05 13:10:36 +00:00
.clang-tidy
.gitignore
BUILD.gn [build] Switch to Fuchsia core SDK. 2023-11-10 19:23:11 +00:00
codereview.settings
configs.gni
CPPLINT.cfg
OWNERS
PRESUBMIT.py
runtime_args.gni
vm-jit.shard.cml [test] Cleanup building Fuchsia packages/components. 2023-10-31 17:11:51 +00:00
vm.shard.cml [test] Cleanup building Fuchsia packages/components. 2023-10-31 17:11:51 +00:00