-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[vm] Align entry point verification and the precompiler.
For entry-point pragma annotations, most of the time they are used with either no argument or with an argument that evaluates to either * false to denote the annotation should not take effect, or * null or true to denote the annotation should take effect. However, the user can also specify that only part of the operations on a member should be accessed from native code by using a string argument that is either 'call', 'set', or 'get'. The entry point verification in Invoke/InvokeGetter/InvokeSetter assumes that for getters and setters, the only valid string argument is 'get' or 'set', respectively. This is because those methods are called via `Dart_GetField`[0] and `Dart_SetField`, respectively, as if they were the getter or setter of a defined field. However, the precompiler previously assumed that the string argument 'call' was the only string argument that meant the link to a function's code object should be saved. Similarly, it assumed the string argument 'get' for functions meant that their implicit closure function should be saved, which ends up including getters. Furthermore, it did not do anything with setters annotated with the string argument 'set'. This means that the code link would not be saved for getters or setters that were annotated with the string argument expected by the entry point verifier. This CL aligns the precompiler to match the expectations of other parts of the codebase. It also changes TFA to report an error if a getter or setter is marked with the string argument 'call'. [0] `Dart_Invoke` can be called with the name of a getter that returns a closure, but doing so is semantically equivalent to calling `Dart_GetField` followed by `Dart_InvokeClosure`. TEST=vm/dart/entrypoint_verification_test Fixes: #59920 Change-Id: Ia2768bbaf9058bb14a1cdfb331eb85fa082a0e90 Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-product-x64-try,vm-aot-mac-product-arm64-try,vm-aot-obfuscate-linux-release-x64-try,vm-linux-debug-x64-try,vm-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/404823 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
- Loading branch information
Showing
7 changed files
with
378 additions
and
138 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.