From 4e9003ce8e4cf1e0e34d25716bc2f5d5b223760f Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Wed, 2 Jun 2010 12:05:41 -0500 Subject: [PATCH] Fix console_write_ch on 64-bit big-endian hosts Currently, console_ch_t is defined as an unsigned long. However, immediately after it's definition, we treat it as a uint32_t *. This will work on a little endian system because of the way bits are layed out but will fail miserably on big endian hosts. This patch fixes the code to do the correct thing. This addresses https://bugs.launchpad.net/qemu/+bug/568614 Reported-by: Devin J. Pohly Signed-off-by: Anthony Liguori diff --git a/console.h b/console.h index cac959f..ddd1bbf 100644 --- a/console.h +++ b/console.h @@ -326,9 +326,11 @@ static inline int ds_get_bytes_per_pixel(DisplayState *ds) typedef unsigned long console_ch_t; static inline void console_write_ch(console_ch_t *dest, uint32_t ch) { + uint32_t p; if (!(ch & 0xff)) ch |= ' '; - cpu_to_le32wu((uint32_t *) dest, ch); + cpu_to_le32wu(&p, ch); + *dest = p; } typedef void (*vga_hw_update_ptr)(void *); -- 1.7.0.4