-
Notifications
You must be signed in to change notification settings - Fork 5.4k
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
Allow dynamic types in configurables #6760
base: master
Are you sure you want to change the base?
Conversation
0383319
to
e4a24e9
Compare
CodSpeed Performance ReportMerging #6760 will not alter performanceComparing Summary
|
869de4b
to
6f3f3be
Compare
f6ae306
to
4a625ca
Compare
|
||
assert_eq!(generated_loader_abi, used_loader_abi); | ||
dbg!(&generated_loader_abi_path, &used_loader_abi_path); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dbg!(&generated_loader_abi_path, &used_loader_abi_path); |
|
||
[patch.crates-io] | ||
fuel-abi-types = { git = "https://github.com/FuelLabs/fuel-abi-types", branch = "xunilrj/indirect-configurables" } | ||
fuels = { git = "https://github.com/FuelLabs/fuels-rs", branch = "hal3e/dynamic-configurables" } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the plan to wait for the fuels
branches to be merged this PR goes out?
Description
This PR implements "dynamic types" for configurables. This means those types which the encoded bytes buffer does not have a know size at compilation time. For example: Vec, Dictionaries, string slices etc...
The major problem these pose is that the ABI json has the offset to their encoded bytes; and if their buffer size changes, that would invalidate the offset of configurables coming after them inside the json.
To solve this issue, these types will have their buffer read indirectly. This means that, at the predefined offset will be another offset, this last one from the start of the data section that will point to their encoded bytes, which can be shared if needed as it is read-only.
If the buffer is not reused, it is expected that it will live at the end of the binary, where it will not invalidate any of the ABI json offsets.
Example:
Each
config
at the IR has a new field for some "flags". Currently we only have one flag, which is if the decode is direct (0) or indirect(1). Direct means that the encoded bytes are inside the configurable section. Indirect means that the compiler puts an offset inside the configurable section, but the encoded bytes will be append at the end of the binary.The generated asm now have a new ".offset of", which will be materialized into the offset from the start of
.data
section (NOT the configurable section).and the generated bytecode will be:
The
.data
section offset can be read directly from the binary as it lives at the start of the binary.more precisely at:
Checklist
Breaking*
orNew Feature
labels where relevant.