You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mkustermann opened this issue
Oct 18, 2019
· 2 comments
Assignees
Labels
area-vmUse area-vm for VM related issues, including code coverage, and the AOT and JIT backends.P1A high priority bug; for example, a single project is unusable or has many test failures
Right now we have a vm-dartkb-linux-release-x64-abi and tools/VERSION with two ABI numbers in it (ABI_VERSION and OLDEST_SUPPORTED_ABI_VERSION). If the former bot turns red we just bump one or both abi numbers.
Then we have runtime/vm/kernel_binary.h which contains a kMinSupportedKernelFormatVersion and kMaxSupportedKernelFormatVersion. Though the kernel format hasn't had a breaking change in a long time, the [min,max] is [18,35] atm, so the format itself is not breaking very often.
When the VM consumes kernel files it will in fact check whether the given kernel files lie within the kMinSupported.* and kMaxSupported* range.
=> The VM will refuse to load incompatible kernel versions (it returns dart_api.h errors) - which is good.
Though the VM needs more than just a kernel file it can read and understand. It also expects the contents of kernel files to have certain contents. This is a tight contract between dart:* libraries and VM. Adding/Removing native methods, ... can break this contract. For this reason (I suppose) we have the ABI bots.
=> Yet the VM does not check what ABI a kernel file has when consuming it. It will simply crash if the assumptions are not met (see e.g. b/142533773).
Without the VM actually checking the ABI version when consuming kernel files, what is the purpose of the ABI bot?
I assume the answer is that we should embed the ABI version in the kernel files, embedding min/max ABI versions in the VM and start checking compatibility.
area-vmUse area-vm for VM related issues, including code coverage, and the AOT and JIT backends.P1A high priority bug; for example, a single project is unusable or has many test failures
Right now we have a
vm-dartkb-linux-release-x64-abi
andtools/VERSION
with two ABI numbers in it (ABI_VERSION
andOLDEST_SUPPORTED_ABI_VERSION
). If the former bot turns red we just bump one or both abi numbers.Then we have
runtime/vm/kernel_binary.h
which contains akMinSupportedKernelFormatVersion
andkMaxSupportedKernelFormatVersion
. Though the kernel format hasn't had a breaking change in a long time, the[min,max]
is[18,35]
atm, so the format itself is not breaking very often.When the VM consumes kernel files it will in fact check whether the given kernel files lie within the
kMinSupported.*
andkMaxSupported*
range.=> The VM will refuse to load incompatible kernel versions (it returns
dart_api.h
errors) - which is good.Though the VM needs more than just a kernel file it can read and understand. It also expects the contents of kernel files to have certain contents. This is a tight contract between
dart:*
libraries and VM. Adding/Removing native methods, ... can break this contract. For this reason (I suppose) we have the ABI bots.=> Yet the VM does not check what ABI a kernel file has when consuming it. It will simply crash if the assumptions are not met (see e.g. b/142533773).
Without the VM actually checking the ABI version when consuming kernel files, what is the purpose of the ABI bot?
I assume the answer is that we should embed the ABI version in the kernel files, embedding min/max ABI versions in the VM and start checking compatibility.
/cc @mraleph @a-siva
The text was updated successfully, but these errors were encountered: