Summary: v2 of fixing an assert due to mismatch of the PL011 state struct size between the Rust and C impls.
Changes v1->v2: * in patch 3, adjust 'use' statements to maintain alpha order and to prefer 'size_of' and 'qemu_api::bindings::PL011State' over 'mem::size_of' and 'bindings::PL011State'. All patches are reviewed. NOTE: I won't be around to do a v3 of this series next week, I'm afraid, so if it needs any further tweaks I'd appreciate if somebody else could pick it up and make those, since this is a bug we need to fix for 10.0. More detailed info, same as v1 cover letter, below: We have some users of the PL011 struct which embed it directly into their own state structs. This means that the Rust version of the device must have a state struct that is the same size or smaller than the C struct. In commit 9b642097d6b7 ("rust: pl011: switch to safe chardev operation") the Rust PL011 state struct changed from having a bindings::CharBackend to a chardev::CharBackend, which made it grow larger than the C version. This results in an assertion at startup when QEMU was built with Rust enabled: $ qemu-system-arm -M raspi2b -display none ERROR:../../qom/object.c:562:object_initialize_with_type: assertion failed: (size >= type->instance_size) This series fixes that by the simple expedient of adding a padding field to the end of the C struct to ensure that it's big enough to also fit the Rust version of the device. It also moves the failure from runtime to compiletime, by adding a Rust compile-time assert that it hasn't made the state bigger than the C one, so if we do this again it should be caught before it gets into git. (We don't need to do the same thing for the HPET device, because there the HPETState is a private implementation detail of the C code, not exposed to its users.) thanks -- PMM Paolo Bonzini (1): rust: assertions: add static_assert Peter Maydell (2): hw/char/pl011: Pad PL011State struct to same size as Rust impl rust: pl011: Check size of state struct at compile time include/hw/char/pl011.h | 5 +++++ rust/wrapper.h | 1 + rust/hw/char/pl011/src/device.rs | 9 ++++++++- rust/qemu-api/src/assertions.rs | 22 ++++++++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) -- 2.43.0