acpi-build: fix misaligned access
authorMichael S. Tsirkin <mst@redhat.com>
Wed, 12 Mar 2014 14:13:58 +0000 (16:13 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 12 Mar 2014 15:12:00 +0000 (17:12 +0200)
clang build reported a misaligned access:
    runtime error: store to misaligned address 0x2b5aa47dfb19 for type
    'uint16_t' (aka 'unsigned short'), which requires 2 byte alignment
    0x2b5aa47dfb19: note: pointer points here
     45 53 54  0b ff ff 5b 80 50 45 4f  52 01 50 45 53 54 01 5b  81 0b 50
    45 4f 52 01 50  45 50 54 08 14

fix this up

Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/i386/acpi-build.c

index 7ecfd7004ba0ceecc490a5ec8bf6f7600df74266..4d781a1687ae521ed31f7d4cfe67481c6e9f2865 100644 (file)
@@ -1019,8 +1019,8 @@ build_ssdt(GArray *table_data, GArray *linker,
 
     patch_pci_windows(pci, ssdt_ptr, sizeof(ssdp_misc_aml));
 
-    *(uint16_t *)(ssdt_ptr + *ssdt_isa_pest) =
-        cpu_to_le16(misc->pvpanic_port);
+    ACPI_BUILD_SET_LE(ssdt_ptr, sizeof(ssdp_misc_aml),
+                      ssdt_isa_pest[0], 16, misc->pvpanic_port);
 
     {
         GArray *sb_scope = build_alloc_array();