On 03.03.26, 12:20, "Peter Maydell" <[email protected] <mailto:[email protected]>> wrote:
> On Fri, 27 Feb 2026 at 12:55, Martin Kröning > <[email protected] > <mailto:[email protected]>> wrote: > > > > These functions are needed to support semihosting on CPUs that support > > runtime-configurable endianness. They should not be used in other contexts. > > > > Signed-off-by: Martin Kröning <[email protected] > > <mailto:[email protected]>> > > --- > > include/exec/tswap.h | 36 ++++++++++++++++++++++++++++++++++++ > > 1 file changed, 36 insertions(+) > > > > diff --git a/include/exec/tswap.h b/include/exec/tswap.h > > index 9e94fa0021..6d9301129d 100644 > > --- a/include/exec/tswap.h > > +++ b/include/exec/tswap.h > > @@ -10,6 +10,7 @@ > > > > #include "qemu/bswap.h" > > #include "qemu/target-info.h" > > +#include "hw/core/cpu.h" > > > > /* > > * If we're in target-specific code, we can hard-code the swapping > > @@ -72,4 +73,39 @@ static inline void tswap64s(uint64_t *s) > > } > > #endif > > > > +/* > > + * If we're in semihosting code, have to swap depending on the currently > > + * configured endianness of the CPU. These functions should not be used in > > + * other contexts. > > + */ > > +#define cpu_internal_needs_bswap(cpu) \ > > + (HOST_BIG_ENDIAN != cpu_internal_is_big_endian(cpu)) > > + > > +static inline uint16_t cpu_internal_tswap16(CPUState *cpu, uint16_t s) > > +{ > > + if (target_needs_bswap() || cpu_internal_needs_bswap(cpu)) { > > > I don't think these should have the target_needs_bswap() > check in them. Otherwise for a normally big-endian CPU on > a little-endian host where the CPU is currently in > little-endian mode, target_needs_bswap() will return true > and we'll swap the data, even though we should not > (because cpu_internal_needs_bswap() returns false). You are right. Thanks for catching that. Should I send a new series immediately or wait for further reviews? Cheers, Martin
smime.p7s
Description: S/MIME cryptographic signature
