* [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value()
@ 2026-03-25 2:42 Pierrick Bouvier
2026-03-25 2:42 ` [PATCH 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_* Pierrick Bouvier
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Pierrick Bouvier @ 2026-03-25 2:42 UTC (permalink / raw)
To: qemu-devel
Cc: Richard Henderson, Mahmoud Mandour, Alex Bennée,
Pierrick Bouvier, Alexandre Iooss
This series fixes qemu_plugin_mem_get_value() endianness on non x64 hosts.
As well, it updates documentation to make clear that value returned is in
host-endian order. Finally, it fixes tests/tcg/plugins/mem.c.
Pierrick Bouvier (2):
include/plugins/qemu-plugin.h: add note about endianness of value
returned by qemu_plugin_mem_get_value
tests/tcg/plugins/mem.c: fix endian swap in update_region_info
Richard Henderson (1):
tcg: Pass host-endian values to plugin_gen_mem_callbacks_*
include/plugins/qemu-plugin.h | 5 ++--
tcg/tcg-op-ldst.c | 52 ++++++++++++++++++-----------------
tests/tcg/plugins/mem.c | 12 ++++----
3 files changed, 36 insertions(+), 33 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_* 2026-03-25 2:42 [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier @ 2026-03-25 2:42 ` Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value Pierrick Bouvier ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 2:42 UTC (permalink / raw) To: qemu-devel Cc: Richard Henderson, Mahmoud Mandour, Alex Bennée, Pierrick Bouvier, Alexandre Iooss From: Richard Henderson <richard.henderson@linaro.org> If the host does not support swapped-endian loads and stores, then we emulate those within the tcg expanders with explicit bswap operations. However, we were passing values to the plugin interface in the middle of those bswap operations, which meant that we would pass values of the wrong endianness to plugins when running on hosts without swapped-endian loads and stores. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3351 Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Tested-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> --- tcg/tcg-op-ldst.c | 52 ++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c index 354d9968f92..22211ccb452 100644 --- a/tcg/tcg-op-ldst.c +++ b/tcg/tcg-op-ldst.c @@ -262,9 +262,6 @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr, addr_new = tci_extend_addr(addr); copy_addr = plugin_maybe_preserve_addr(addr); gen_ldst1(INDEX_op_qemu_ld, TCG_TYPE_I32, tcgv_i32_temp(val), addr_new, oi); - plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi, - QEMU_PLUGIN_MEM_R); - maybe_free_addr(addr, addr_new); if ((orig_memop ^ memop) & MO_BSWAP) { switch (orig_memop & MO_SIZE) { @@ -280,6 +277,10 @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr, g_assert_not_reached(); } } + + plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_R); + maybe_free_addr(addr, addr_new); } void tcg_gen_qemu_ld_i32_chk(TCGv_i32 val, TCGTemp *addr, TCGArg idx, @@ -290,10 +291,10 @@ void tcg_gen_qemu_ld_i32_chk(TCGv_i32 val, TCGTemp *addr, TCGArg idx, tcg_gen_qemu_ld_i32_int(val, addr, idx, memop); } -static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr, +static void tcg_gen_qemu_st_i32_int(TCGv_i32 orig_val, TCGTemp *addr, TCGArg idx, MemOp memop) { - TCGv_i32 swap = NULL; + TCGv_i32 val = orig_val; MemOpIdx orig_oi, oi; TCGTemp *addr_new; @@ -302,29 +303,29 @@ static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr, orig_oi = oi = make_memop_idx(memop, idx); if ((memop & MO_BSWAP) && !tcg_target_has_memory_bswap(memop)) { - swap = tcg_temp_ebb_new_i32(); + val = tcg_temp_ebb_new_i32(); switch (memop & MO_SIZE) { case MO_16: - tcg_gen_bswap16_i32(swap, val, 0); + tcg_gen_bswap16_i32(val, orig_val, 0); break; case MO_32: - tcg_gen_bswap32_i32(swap, val); + tcg_gen_bswap32_i32(val, orig_val); break; default: g_assert_not_reached(); } - val = swap; memop &= ~MO_BSWAP; oi = make_memop_idx(memop, idx); } addr_new = tci_extend_addr(addr); gen_ldst1(INDEX_op_qemu_st, TCG_TYPE_I32, tcgv_i32_temp(val), addr_new, oi); - plugin_gen_mem_callbacks_i32(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); + plugin_gen_mem_callbacks_i32(orig_val, NULL, addr, orig_oi, + QEMU_PLUGIN_MEM_W); maybe_free_addr(addr, addr_new); - if (swap) { - tcg_temp_free_i32(swap); + if (val != orig_val) { + tcg_temp_free_i32(val); } } @@ -360,9 +361,6 @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr, addr_new = tci_extend_addr(addr); copy_addr = plugin_maybe_preserve_addr(addr); gen_ld_i64(val, addr_new, oi); - plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi, - QEMU_PLUGIN_MEM_R); - maybe_free_addr(addr, addr_new); if ((orig_memop ^ memop) & MO_BSWAP) { int flags = (orig_memop & MO_SIGN @@ -382,6 +380,10 @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr, g_assert_not_reached(); } } + + plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi, + QEMU_PLUGIN_MEM_R); + maybe_free_addr(addr, addr_new); } void tcg_gen_qemu_ld_i64_chk(TCGv_i64 val, TCGTemp *addr, TCGArg idx, @@ -392,10 +394,10 @@ void tcg_gen_qemu_ld_i64_chk(TCGv_i64 val, TCGTemp *addr, TCGArg idx, tcg_gen_qemu_ld_i64_int(val, addr, idx, memop); } -static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr, +static void tcg_gen_qemu_st_i64_int(TCGv_i64 orig_val, TCGTemp *addr, TCGArg idx, MemOp memop) { - TCGv_i64 swap = NULL; + TCGv_i64 val = orig_val; MemOpIdx orig_oi, oi; TCGTemp *addr_new; @@ -404,32 +406,32 @@ static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr, orig_oi = oi = make_memop_idx(memop, idx); if ((memop & MO_BSWAP) && !tcg_target_has_memory_bswap(memop)) { - swap = tcg_temp_ebb_new_i64(); + val = tcg_temp_ebb_new_i64(); switch (memop & MO_SIZE) { case MO_16: - tcg_gen_bswap16_i64(swap, val, 0); + tcg_gen_bswap16_i64(val, orig_val, 0); break; case MO_32: - tcg_gen_bswap32_i64(swap, val, 0); + tcg_gen_bswap32_i64(val, orig_val, 0); break; case MO_64: - tcg_gen_bswap64_i64(swap, val); + tcg_gen_bswap64_i64(val, orig_val); break; default: g_assert_not_reached(); } - val = swap; memop &= ~MO_BSWAP; oi = make_memop_idx(memop, idx); } addr_new = tci_extend_addr(addr); gen_st_i64(val, addr_new, oi); - plugin_gen_mem_callbacks_i64(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W); + plugin_gen_mem_callbacks_i64(orig_val, NULL, addr, orig_oi, + QEMU_PLUGIN_MEM_W); maybe_free_addr(addr, addr_new); - if (swap) { - tcg_temp_free_i64(swap); + if (val != orig_val) { + tcg_temp_free_i64(val); } } -- 2.47.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value 2026-03-25 2:42 [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_* Pierrick Bouvier @ 2026-03-25 2:42 ` Pierrick Bouvier 2026-03-25 15:17 ` Alex Bennée 2026-03-25 2:42 ` [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info Pierrick Bouvier 2026-03-25 21:53 ` [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier 3 siblings, 1 reply; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 2:42 UTC (permalink / raw) To: qemu-devel Cc: Richard Henderson, Mahmoud Mandour, Alex Bennée, Pierrick Bouvier, Alexandre Iooss Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> --- include/plugins/qemu-plugin.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h index 2ce7a7fb6c3..4eb1d2cd85c 100644 --- a/include/plugins/qemu-plugin.h +++ b/include/plugins/qemu-plugin.h @@ -374,7 +374,8 @@ enum qemu_plugin_mem_value_type { * * @type: the memory access size * @data: the value accessed during the memory operation (value after - * read/write) + * read/write). It's directly stored following host endianness, so no + * further swap is needed. */ typedef struct { enum qemu_plugin_mem_value_type type; @@ -682,7 +683,7 @@ bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info); * qemu_plugin_mem_get_value() - return last value loaded/stored * @info: opaque memory transaction handle * - * Returns: memory value + * Returns: memory value in host-endian order (no further swap is necessary). */ QEMU_PLUGIN_API qemu_plugin_mem_value qemu_plugin_mem_get_value(qemu_plugin_meminfo_t info); -- 2.47.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value 2026-03-25 2:42 ` [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value Pierrick Bouvier @ 2026-03-25 15:17 ` Alex Bennée 2026-03-25 15:23 ` Pierrick Bouvier 0 siblings, 1 reply; 9+ messages in thread From: Alex Bennée @ 2026-03-25 15:17 UTC (permalink / raw) To: Pierrick Bouvier Cc: qemu-devel, Richard Henderson, Mahmoud Mandour, Alexandre Iooss Pierrick Bouvier <pierrick.bouvier@linaro.org> writes: > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > --- > include/plugins/qemu-plugin.h | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h > index 2ce7a7fb6c3..4eb1d2cd85c 100644 > --- a/include/plugins/qemu-plugin.h > +++ b/include/plugins/qemu-plugin.h > @@ -374,7 +374,8 @@ enum qemu_plugin_mem_value_type { > * > * @type: the memory access size > * @data: the value accessed during the memory operation (value after > - * read/write) > + * read/write). It's directly stored following host endianness, so no > + * further swap is needed. > */ > typedef struct { > enum qemu_plugin_mem_value_type type; > @@ -682,7 +683,7 @@ bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info); > * qemu_plugin_mem_get_value() - return last value loaded/stored > * @info: opaque memory transaction handle > * > - * Returns: memory value > + * Returns: memory value in host-endian order (no further swap is necessary). > */ > QEMU_PLUGIN_API > qemu_plugin_mem_value qemu_plugin_mem_get_value(qemu_plugin_meminfo_t info); I'd be tempted to fold this into the change that makes it happen in 1/3. -- Alex Bennée Virtualisation Tech Lead @ Linaro ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value 2026-03-25 15:17 ` Alex Bennée @ 2026-03-25 15:23 ` Pierrick Bouvier 0 siblings, 0 replies; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 15:23 UTC (permalink / raw) To: Alex Bennée Cc: qemu-devel, Richard Henderson, Mahmoud Mandour, Alexandre Iooss On 3/25/26 8:17 AM, Alex Bennée wrote: > Pierrick Bouvier <pierrick.bouvier@linaro.org> writes: > >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> >> --- >> include/plugins/qemu-plugin.h | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h >> index 2ce7a7fb6c3..4eb1d2cd85c 100644 >> --- a/include/plugins/qemu-plugin.h >> +++ b/include/plugins/qemu-plugin.h >> @@ -374,7 +374,8 @@ enum qemu_plugin_mem_value_type { >> * >> * @type: the memory access size >> * @data: the value accessed during the memory operation (value after >> - * read/write) >> + * read/write). It's directly stored following host endianness, so no >> + * further swap is needed. >> */ >> typedef struct { >> enum qemu_plugin_mem_value_type type; >> @@ -682,7 +683,7 @@ bool qemu_plugin_mem_is_store(qemu_plugin_meminfo_t info); >> * qemu_plugin_mem_get_value() - return last value loaded/stored >> * @info: opaque memory transaction handle >> * >> - * Returns: memory value >> + * Returns: memory value in host-endian order (no further swap is necessary). >> */ >> QEMU_PLUGIN_API >> qemu_plugin_mem_value qemu_plugin_mem_get_value(qemu_plugin_meminfo_t info); > > I'd be tempted to fold this into the change that makes it happen in 1/3. > It was already supposed to be the behavior (x64 host did the right thing by accident since it skips swap operation and rely on moveb), and other host architectures had a bug that went unnoticed until recently. Regards, Pierrick ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info 2026-03-25 2:42 [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_* Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value Pierrick Bouvier @ 2026-03-25 2:42 ` Pierrick Bouvier 2026-03-25 15:20 ` Alex Bennée 2026-03-25 21:53 ` [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier 3 siblings, 1 reply; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 2:42 UTC (permalink / raw) To: qemu-devel Cc: Richard Henderson, Mahmoud Mandour, Alex Bennée, Pierrick Bouvier, Alexandre Iooss value returned by qemu_plugin_mem_get_value() is always in host-endian order, so we need to convert TO target endianness and not FROM it. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> --- tests/tcg/plugins/mem.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/tcg/plugins/mem.c b/tests/tcg/plugins/mem.c index 1ee257f855b..6b0732dc0fd 100644 --- a/tests/tcg/plugins/mem.c +++ b/tests/tcg/plugins/mem.c @@ -154,20 +154,20 @@ static void update_region_info(uint64_t region, uint64_t offset, val_size = 1; break; case QEMU_PLUGIN_MEM_VALUE_U16: - swapped_value.data.u16 = be ? GUINT16_FROM_BE(value.data.u16) : - GUINT16_FROM_LE(value.data.u16); + swapped_value.data.u16 = be ? GUINT16_TO_BE(value.data.u16) : + GUINT16_TO_LE(value.data.u16); val_ptr = &swapped_value.data.u16; val_size = 2; break; case QEMU_PLUGIN_MEM_VALUE_U32: - swapped_value.data.u32 = be ? GUINT32_FROM_BE(value.data.u32) : - GUINT32_FROM_LE(value.data.u32); + swapped_value.data.u32 = be ? GUINT32_TO_BE(value.data.u32) : + GUINT32_TO_LE(value.data.u32); val_ptr = &swapped_value.data.u32; val_size = 4; break; case QEMU_PLUGIN_MEM_VALUE_U64: - swapped_value.data.u64 = be ? GUINT64_FROM_BE(value.data.u64) : - GUINT64_FROM_LE(value.data.u64); + swapped_value.data.u64 = be ? GUINT64_TO_BE(value.data.u64) : + GUINT64_TO_LE(value.data.u64); val_ptr = &swapped_value.data.u64; val_size = 8; break; -- 2.47.3 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info 2026-03-25 2:42 ` [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info Pierrick Bouvier @ 2026-03-25 15:20 ` Alex Bennée 2026-03-25 15:25 ` Pierrick Bouvier 0 siblings, 1 reply; 9+ messages in thread From: Alex Bennée @ 2026-03-25 15:20 UTC (permalink / raw) To: Pierrick Bouvier Cc: qemu-devel, Richard Henderson, Mahmoud Mandour, Alexandre Iooss Pierrick Bouvier <pierrick.bouvier@linaro.org> writes: > value returned by qemu_plugin_mem_get_value() is always in host-endian > order, so we need to convert TO target endianness and not FROM it. > > Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > tests/tcg/plugins/mem.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/tests/tcg/plugins/mem.c b/tests/tcg/plugins/mem.c > index 1ee257f855b..6b0732dc0fd 100644 > --- a/tests/tcg/plugins/mem.c > +++ b/tests/tcg/plugins/mem.c > @@ -154,20 +154,20 @@ static void update_region_info(uint64_t region, uint64_t offset, > val_size = 1; > break; > case QEMU_PLUGIN_MEM_VALUE_U16: > - swapped_value.data.u16 = be ? GUINT16_FROM_BE(value.data.u16) : > - GUINT16_FROM_LE(value.data.u16); > + swapped_value.data.u16 = be ? GUINT16_TO_BE(value.data.u16) : > + GUINT16_TO_LE(value.data.u16); > val_ptr = &swapped_value.data.u16; > val_size = 2; > break; > case QEMU_PLUGIN_MEM_VALUE_U32: > - swapped_value.data.u32 = be ? GUINT32_FROM_BE(value.data.u32) : > - GUINT32_FROM_LE(value.data.u32); > + swapped_value.data.u32 = be ? GUINT32_TO_BE(value.data.u32) : > + GUINT32_TO_LE(value.data.u32); > val_ptr = &swapped_value.data.u32; > val_size = 4; > break; > case QEMU_PLUGIN_MEM_VALUE_U64: > - swapped_value.data.u64 = be ? GUINT64_FROM_BE(value.data.u64) : > - GUINT64_FROM_LE(value.data.u64); > + swapped_value.data.u64 = be ? GUINT64_TO_BE(value.data.u64) : > + GUINT64_TO_LE(value.data.u64); > val_ptr = &swapped_value.data.u64; > val_size = 8; > break; -- Alex Bennée Virtualisation Tech Lead @ Linaro ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info 2026-03-25 15:20 ` Alex Bennée @ 2026-03-25 15:25 ` Pierrick Bouvier 0 siblings, 0 replies; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 15:25 UTC (permalink / raw) To: Alex Bennée Cc: qemu-devel, Richard Henderson, Mahmoud Mandour, Alexandre Iooss On 3/25/26 8:20 AM, Alex Bennée wrote: > Pierrick Bouvier <pierrick.bouvier@linaro.org> writes: > >> value returned by qemu_plugin_mem_get_value() is always in host-endian >> order, so we need to convert TO target endianness and not FROM it. >> >> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> > > Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > >> --- >> tests/tcg/plugins/mem.c | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) >> As a complement, GUINT*_FROM_* and GUINT*_TO_* do the same thing (they both swap value). The FROM/TO name simply acts as a documentation when reading the code. That's why it was working before as expected, even though it was sending the wrong hint for the reader. Regards, Pierrick ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() 2026-03-25 2:42 [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier ` (2 preceding siblings ...) 2026-03-25 2:42 ` [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info Pierrick Bouvier @ 2026-03-25 21:53 ` Pierrick Bouvier 3 siblings, 0 replies; 9+ messages in thread From: Pierrick Bouvier @ 2026-03-25 21:53 UTC (permalink / raw) To: qemu-devel, qemu-stable, Michael Tokarev Cc: Richard Henderson, Mahmoud Mandour, Alex Bennée, Alexandre Iooss On 3/24/26 7:42 PM, Pierrick Bouvier wrote: > This series fixes qemu_plugin_mem_get_value() endianness on non x64 hosts. > As well, it updates documentation to make clear that value returned is in > host-endian order. Finally, it fixes tests/tcg/plugins/mem.c. > > Pierrick Bouvier (2): > include/plugins/qemu-plugin.h: add note about endianness of value > returned by qemu_plugin_mem_get_value > tests/tcg/plugins/mem.c: fix endian swap in update_region_info > > Richard Henderson (1): > tcg: Pass host-endian values to plugin_gen_mem_callbacks_* > > include/plugins/qemu-plugin.h | 5 ++-- > tcg/tcg-op-ldst.c | 52 ++++++++++++++++++----------------- > tests/tcg/plugins/mem.c | 12 ++++---- > 3 files changed, 36 insertions(+), 33 deletions(-) > This series is a good candidate for stable also. Thanks, Pierrick ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-03-25 21:53 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-03-25 2:42 [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 1/3] tcg: Pass host-endian values to plugin_gen_mem_callbacks_* Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 2/3] include/plugins/qemu-plugin.h: add note about endianness of value returned by qemu_plugin_mem_get_value Pierrick Bouvier 2026-03-25 15:17 ` Alex Bennée 2026-03-25 15:23 ` Pierrick Bouvier 2026-03-25 2:42 ` [PATCH 3/3] tests/tcg/plugins/mem.c: fix endian swap in update_region_info Pierrick Bouvier 2026-03-25 15:20 ` Alex Bennée 2026-03-25 15:25 ` Pierrick Bouvier 2026-03-25 21:53 ` [PATCH 0/3] plugins: fix endianness for qemu_plugin_mem_get_value() Pierrick Bouvier
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox