On Thu, Feb 15, 2024 at 11:02:22AM -0700, Thomas Bertschinger wrote: > On Thu, Feb 15, 2024 at 12:23:12PM -0500, Brian Foster wrote: > > I can't really comment on the Rust context, but could you add a comment > > to explain why the ifdef is here? I.e., even something as simple as > > "Rust disallows packed and aligned on ..." is useful. > > > > Brian > > I'll work on a v2 with an explanatory comment. > > > Also out of curiosity, is there some reason these two attributes > > together presumably isn't a problem for LE? > > The root of the problem is that rustc won't compile types with both > packed and align attributes. However, rust-bindgen tries to be helpful > and when generating Rust bindings for C types with both attrs, will > avoid placing one or the other attribute if it can do so without > changing the type's layout. > > For LE, the "packed" attr is unneeded because the struct is "naturally > packed", but the "align(8)" attr is needed because the struct's natural > alignment is 4. > > For BE, the "packed" attr is needed because there are some members that > are not aligned (e.g., `size` has as offset of 23 but wants to be at > 24), so rust-bindgen cannot omit it. Thus we have to remove "align(8)" > to get a type that rustc can compile.
Specifically, when i was designing bkey, I wanted the header to be no bigger than necessary so that bkey_packed could use the rest. That means that decently offten extent keys will fit into only 8 bytes, instead of spilling over to 16. But packed_bkey treats the part after the header - the packed section - as a single multi word, variable length integer. And bkey, the unpacked version, is just a special case version of a bkey_packed; all the packed bkey code will work on keys in any packed format, the in-memory representation of an unpacked key also is just one type of packed key... So that constrains the key part of a bkig endian bkey to start right after the header... So if we ever do a bkey_v2 and need to expand the hedaer by another byte for some reason, that would clean up that wart :)
