All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
@ 2011-08-28 20:43 Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
                   ` (7 more replies)
  0 siblings, 8 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers

These patches fix the packing of structures which were affected by
the new compiler attribute -mms-bitfields (which is needed for glib-2.0).

I compiled qemu.exe with and without -mms-bitfields and compared
the resulting struct alignment using pahole and codiff.

The patches are split for different maintainers.
Feel free to combine them on commit.

I suggest replacing the remaining code with __attribute__((packed))
or __attribute__((__packed__)) in separate patches.

Cheers,
Stefan

[PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
[PATCH 2/7] block/vvfat: Fix packing for w32
[PATCH 3/7] acpi: Fix packing for w32
[PATCH 4/7] hpet: Fix packing for w32
[PATCH 5/7] usb: Fix packing for w32
[PATCH 6/7] virtio: Fix packing for w32
[PATCH 7/7] slirp: Fix packing for w32

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-28 20:47   ` Andreas Färber
  2011-08-30 17:57   ` Blue Swirl
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32 Stefan Weil
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers

A packed struct needs different gcc attributes for compilations
with MinGW compilers because glib-2.0 adds compiler flag
-mms-bitfields which modifies the packing algorithm.

Attribute gcc_struct reverses the negative effects of -mms-bitfields.
QEMU_PACKED sets this attribute and must be used for any packed
struct which is affected by -mms-bitfields.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 compiler.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/compiler.h b/compiler.h
index 9af5dc6..a2d5959 100644
--- a/compiler.h
+++ b/compiler.h
@@ -12,6 +12,12 @@
 #define QEMU_WARN_UNUSED_RESULT
 #endif
 
+#if defined(_WIN32)
+# define QEMU_PACKED __attribute__((gcc_struct, packed))
+#else
+# define QEMU_PACKED __attribute__((packed))
+#endif
+
 #define QEMU_BUILD_BUG_ON(x) \
     typedef char qemu_build_bug_on__##__LINE__[(x)?-1:1];
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-29  8:09   ` Kevin Wolf
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 3/7] acpi: " Stefan Weil
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Kevin Wolf

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 block/vvfat.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/block/vvfat.c b/block/vvfat.c
index d6a07ef..ae1c03d 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -200,7 +200,7 @@ static int array_index(array_t* array, void* pointer)
 }
 
 /* These structures are used to fake a disk and the VFAT filesystem.
- * For this reason we need to use __attribute__((packed)). */
+ * For this reason we need to use QEMU_PACKED. */
 
 typedef struct bootsector_t {
     uint8_t jump[3];
@@ -224,7 +224,7 @@ typedef struct bootsector_t {
 	    uint8_t signature;
 	    uint32_t id;
 	    uint8_t volume_label[11];
-	} __attribute__((packed)) fat16;
+        } QEMU_PACKED fat16;
 	struct {
 	    uint32_t sectors_per_fat;
 	    uint16_t flags;
@@ -233,12 +233,12 @@ typedef struct bootsector_t {
 	    uint16_t info_sector;
 	    uint16_t backup_boot_sector;
 	    uint16_t ignored;
-	} __attribute__((packed)) fat32;
+        } QEMU_PACKED fat32;
     } u;
     uint8_t fat_type[8];
     uint8_t ignored[0x1c0];
     uint8_t magic[2];
-} __attribute__((packed)) bootsector_t;
+} QEMU_PACKED bootsector_t;
 
 typedef struct {
     uint8_t head;
@@ -253,7 +253,7 @@ typedef struct partition_t {
     mbr_chs_t end_CHS;
     uint32_t start_sector_long;
     uint32_t length_sector_long;
-} __attribute__((packed)) partition_t;
+} QEMU_PACKED partition_t;
 
 typedef struct mbr_t {
     uint8_t ignored[0x1b8];
@@ -261,7 +261,7 @@ typedef struct mbr_t {
     uint8_t ignored2[2];
     partition_t partition[4];
     uint8_t magic[2];
-} __attribute__((packed)) mbr_t;
+} QEMU_PACKED mbr_t;
 
 typedef struct direntry_t {
     uint8_t name[8];
@@ -276,7 +276,7 @@ typedef struct direntry_t {
     uint16_t mdate;
     uint16_t begin;
     uint32_t size;
-} __attribute__((packed)) direntry_t;
+} QEMU_PACKED direntry_t;
 
 /* this structure are used to transparently access the files */
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 3/7] acpi: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32 Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 4/7] hpet: " Stefan Weil
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Isaku Yamahata

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/acpi.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/hw/acpi.c b/hw/acpi.c
index d04b965..1cf35e1 100644
--- a/hw/acpi.c
+++ b/hw/acpi.c
@@ -32,7 +32,7 @@ struct acpi_table_header {
     uint32_t oem_revision;    /* OEM revision number */
     char asl_compiler_id[4];  /* ASL compiler vendor ID */
     uint32_t asl_compiler_revision; /* ASL compiler revision number */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define ACPI_TABLE_HDR_SIZE sizeof(struct acpi_table_header)
 #define ACPI_TABLE_PFX_SIZE sizeof(uint16_t)  /* size of the extra prefix */
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 4/7] hpet: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
                   ` (2 preceding siblings ...)
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 3/7] acpi: " Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 5/7] usb: " Stefan Weil
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Alexander Graf

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Alexander Graf <agraf@suse.de>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/hpet_emul.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/hpet_emul.h b/hw/hpet_emul.h
index 8bf312a..6128702 100644
--- a/hw/hpet_emul.h
+++ b/hw/hpet_emul.h
@@ -59,13 +59,13 @@ struct hpet_fw_entry
     uint64_t address;
     uint16_t min_tick;
     uint8_t page_prot;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 struct hpet_fw_config
 {
     uint8_t count;
     struct hpet_fw_entry hpet[8];
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 extern struct hpet_fw_config hpet_cfg;
 #endif
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 5/7] usb: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
                   ` (3 preceding siblings ...)
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 4/7] hpet: " Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 6/7] virtio: " Stefan Weil
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Gerd Hoffmann

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/usb-ccid.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/hw/usb-ccid.c b/hw/usb-ccid.c
index 66aeb21..c2f9241 100644
--- a/hw/usb-ccid.c
+++ b/hw/usb-ccid.c
@@ -176,56 +176,56 @@ enum {
      */
 };
 
-typedef struct __attribute__ ((__packed__)) CCID_Header {
+typedef struct QEMU_PACKED CCID_Header {
     uint8_t     bMessageType;
     uint32_t    dwLength;
     uint8_t     bSlot;
     uint8_t     bSeq;
 } CCID_Header;
 
-typedef struct __attribute__ ((__packed__)) CCID_BULK_IN {
+typedef struct QEMU_PACKED CCID_BULK_IN {
     CCID_Header hdr;
     uint8_t     bStatus;        /* Only used in BULK_IN */
     uint8_t     bError;         /* Only used in BULK_IN */
 } CCID_BULK_IN;
 
-typedef struct __attribute__ ((__packed__)) CCID_SlotStatus {
+typedef struct QEMU_PACKED CCID_SlotStatus {
     CCID_BULK_IN b;
     uint8_t     bClockStatus;
 } CCID_SlotStatus;
 
-typedef struct __attribute__ ((__packed__)) CCID_Parameter {
+typedef struct QEMU_PACKED CCID_Parameter {
     CCID_BULK_IN b;
     uint8_t     bProtocolNum;
     uint8_t     abProtocolDataStructure[0];
 } CCID_Parameter;
 
-typedef struct __attribute__ ((__packed__)) CCID_DataBlock {
+typedef struct QEMU_PACKED CCID_DataBlock {
     CCID_BULK_IN b;
     uint8_t      bChainParameter;
     uint8_t      abData[0];
 } CCID_DataBlock;
 
 /* 6.1.4 PC_to_RDR_XfrBlock */
-typedef struct __attribute__ ((__packed__)) CCID_XferBlock {
+typedef struct QEMU_PACKED CCID_XferBlock {
     CCID_Header  hdr;
     uint8_t      bBWI; /* Block Waiting Timeout */
     uint16_t     wLevelParameter; /* XXX currently unused */
     uint8_t      abData[0];
 } CCID_XferBlock;
 
-typedef struct __attribute__ ((__packed__)) CCID_IccPowerOn {
+typedef struct QEMU_PACKED CCID_IccPowerOn {
     CCID_Header hdr;
     uint8_t     bPowerSelect;
     uint16_t    abRFU;
 } CCID_IccPowerOn;
 
-typedef struct __attribute__ ((__packed__)) CCID_IccPowerOff {
+typedef struct QEMU_PACKED CCID_IccPowerOff {
     CCID_Header hdr;
     uint16_t    abRFU;
 } CCID_IccPowerOff;
 
-typedef struct __attribute__ ((__packed__)) CCID_SetParameters {
+typedef struct QEMU_PACKED CCID_SetParameters {
     CCID_Header hdr;
     uint8_t     bProtocolNum;
     uint16_t   abRFU;
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 6/7] virtio: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
                   ` (4 preceding siblings ...)
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 5/7] usb: " Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 7/7] slirp: " Stefan Weil
  2011-08-28 21:43 ` [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Blue Swirl
  7 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Anthony Liguori

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/virtio-balloon.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/hw/virtio-balloon.h b/hw/virtio-balloon.h
index e20cf6b..73300dd 100644
--- a/hw/virtio-balloon.h
+++ b/hw/virtio-balloon.h
@@ -50,6 +50,6 @@ struct virtio_balloon_config
 typedef struct VirtIOBalloonStat {
     uint16_t tag;
     uint64_t val;
-} __attribute__((packed)) VirtIOBalloonStat;
+} QEMU_PACKED VirtIOBalloonStat;
 
 #endif
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 7/7] slirp: Fix packing for w32
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
                   ` (5 preceding siblings ...)
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 6/7] virtio: " Stefan Weil
@ 2011-08-28 20:43 ` Stefan Weil
  2011-08-29 10:12   ` Jan Kiszka
  2011-08-28 21:43 ` [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Blue Swirl
  7 siblings, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-28 20:43 UTC (permalink / raw)
  To: QEMU Developers; +Cc: Jan Kiszka

Use QEMU_PACKED to eliminate the effects of compiler option
-mms-bitfields.

Cc: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 slirp/slirp.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/slirp/slirp.h b/slirp/slirp.h
index dcf99d5..28a5c03 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -199,7 +199,7 @@ struct arphdr {
     uint32_t      ar_sip;           /* sender IP address       */
     unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
     uint32_t      ar_tip;           /* target IP address       */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define ARP_TABLE_SIZE 16
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
@ 2011-08-28 20:47   ` Andreas Färber
  2011-08-29  5:12     ` Stefan Weil
  2011-08-30 17:57   ` Blue Swirl
  1 sibling, 1 reply; 32+ messages in thread
From: Andreas Färber @ 2011-08-28 20:47 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

Am 28.08.2011 um 22:43 schrieb Stefan Weil:

> A packed struct needs different gcc attributes for compilations
> with MinGW compilers because glib-2.0 adds compiler flag
> -mms-bitfields which modifies the packing algorithm.

Is that algorithm actually needed anywhere? If not, is there no GCC  
option to fix this centrally in configure for win32 only?

Andreas

> Attribute gcc_struct reverses the negative effects of -mms-bitfields.
> QEMU_PACKED sets this attribute and must be used for any packed
> struct which is affected by -mms-bitfields.
>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
> compiler.h |    6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/compiler.h b/compiler.h
> index 9af5dc6..a2d5959 100644
> --- a/compiler.h
> +++ b/compiler.h
> @@ -12,6 +12,12 @@
> #define QEMU_WARN_UNUSED_RESULT
> #endif
>
> +#if defined(_WIN32)
> +# define QEMU_PACKED __attribute__((gcc_struct, packed))
> +#else
> +# define QEMU_PACKED __attribute__((packed))
> +#endif
> +
> #define QEMU_BUILD_BUG_ON(x) \
>     typedef char qemu_build_bug_on__##__LINE__[(x)?-1:1];
>
> -- 
> 1.7.0.4
>
>

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
                   ` (6 preceding siblings ...)
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 7/7] slirp: " Stefan Weil
@ 2011-08-28 21:43 ` Blue Swirl
  2011-08-29  5:01   ` Stefan Weil
  7 siblings, 1 reply; 32+ messages in thread
From: Blue Swirl @ 2011-08-28 21:43 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> These patches fix the packing of structures which were affected by
> the new compiler attribute -mms-bitfields (which is needed for glib-2.0).
>
> I compiled qemu.exe with and without -mms-bitfields and compared
> the resulting struct alignment using pahole and codiff.

If a structure is only used internally by QEMU (not used in network,
disk or guest interfaces), changes in padding don't matter. In fact,
in those cases it may be better to remove the packing, because then
the fields may be naturally aligned and that gives better performance
on most architectures. Could you please check if this is the case for
any of the structs?

> The patches are split for different maintainers.
> Feel free to combine them on commit.
>
> I suggest replacing the remaining code with __attribute__((packed))
> or __attribute__((__packed__)) in separate patches.
>
> Cheers,
> Stefan
>
> [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
> [PATCH 2/7] block/vvfat: Fix packing for w32
> [PATCH 3/7] acpi: Fix packing for w32
> [PATCH 4/7] hpet: Fix packing for w32
> [PATCH 5/7] usb: Fix packing for w32
> [PATCH 6/7] virtio: Fix packing for w32
> [PATCH 7/7] slirp: Fix packing for w32
>
>
>

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-28 21:43 ` [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Blue Swirl
@ 2011-08-29  5:01   ` Stefan Weil
  2011-08-29  7:19     ` Gerd Hoffmann
  2011-08-29  8:34     ` TeLeMan
  0 siblings, 2 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-29  5:01 UTC (permalink / raw)
  To: Blue Swirl
  Cc: Kevin Wolf, QEMU Developers, Alexander Graf, Isaku Yamahata,
	Jan Kiszka, Gerd Hoffmann

Am 28.08.2011 23:43, schrieb Blue Swirl:
> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>> These patches fix the packing of structures which were affected by
>> the new compiler attribute -mms-bitfields (which is needed for glib-2.0).
>>
>> I compiled qemu.exe with and without -mms-bitfields and compared
>> the resulting struct alignment using pahole and codiff.
>
> If a structure is only used internally by QEMU (not used in network,
> disk or guest interfaces), changes in padding don't matter. In fact,
> in those cases it may be better to remove the packing, because then
> the fields may be naturally aligned and that gives better performance
> on most architectures. Could you please check if this is the case for
> any of the structs?

I did this already, but also forward your question to the maintainers.
Here is my result:

[PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
[PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
[PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
[PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
[PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest interface?)
[PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)

All those struct statements need the pack attribute (otherwise the code
would have to be rewritten which is of course always possible).

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-28 20:47   ` Andreas Färber
@ 2011-08-29  5:12     ` Stefan Weil
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-29  5:12 UTC (permalink / raw)
  To: Andreas Färber; +Cc: QEMU Developers

Am 28.08.2011 22:47, schrieb Andreas Färber:
> Am 28.08.2011 um 22:43 schrieb Stefan Weil:
>
>> A packed struct needs different gcc attributes for compilations
>> with MinGW compilers because glib-2.0 adds compiler flag
>> -mms-bitfields which modifies the packing algorithm.
>
> Is that algorithm actually needed anywhere? If not, is there no GCC 
> option to fix this centrally in configure for win32 only?
>
> Andreas

I think it is needed: glib-2.0 requires -mms-bitfields for MinGW which
breaks networking (and more) for w32 hosts because of changes
in struct alignment. A central solution would require removal of
-mms-bitfields or its effects. This is possible, but very risky,
because it will raise problems with glib-2.0 and w32 libraries.
Therefore a central solution was rejected.

See this thread:
http://lists.gnu.org/archive/html/qemu-devel/2011-08/msg01877.html

Stefan

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-29  5:01   ` Stefan Weil
@ 2011-08-29  7:19     ` Gerd Hoffmann
  2011-08-29  8:34     ` TeLeMan
  1 sibling, 0 replies; 32+ messages in thread
From: Gerd Hoffmann @ 2011-08-29  7:19 UTC (permalink / raw)
  To: Stefan Weil
  Cc: Kevin Wolf, Alexander Graf, QEMU Developers, Blue Swirl,
	Isaku Yamahata, Jan Kiszka

   Hi,

>> If a structure is only used internally by QEMU (not used in network,
>> disk or guest interfaces), changes in padding don't matter.

> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)

Patch looks good (and is needed as the structs are part of the guest 
interface).

cheers,
   Gerd

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32 Stefan Weil
@ 2011-08-29  8:09   ` Kevin Wolf
  0 siblings, 0 replies; 32+ messages in thread
From: Kevin Wolf @ 2011-08-29  8:09 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

Am 28.08.2011 22:43, schrieb Stefan Weil:
> Use QEMU_PACKED to eliminate the effects of compiler option
> -mms-bitfields.
> 
> Cc: Kevin Wolf <kwolf@redhat.com>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>

Acked-by: Kevin Wolf <kwolf@redhat.com>

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-29  5:01   ` Stefan Weil
  2011-08-29  7:19     ` Gerd Hoffmann
@ 2011-08-29  8:34     ` TeLeMan
  2011-08-29  9:39       ` Alexander Graf
  2011-08-29 19:55       ` Stefan Weil
  1 sibling, 2 replies; 32+ messages in thread
From: TeLeMan @ 2011-08-29  8:34 UTC (permalink / raw)
  To: Stefan Weil
  Cc: Kevin Wolf, QEMU Developers, Alexander Graf, Blue Swirl,
	Isaku Yamahata, Jan Kiszka, Gerd Hoffmann

On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>
>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>>>
>>> These patches fix the packing of structures which were affected by
>>> the new compiler attribute -mms-bitfields (which is needed for glib-2.0).
>>>
>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>> the resulting struct alignment using pahole and codiff.
>>
>> If a structure is only used internally by QEMU (not used in network,
>> disk or guest interfaces), changes in padding don't matter. In fact,
>> in those cases it may be better to remove the packing, because then
>> the fields may be naturally aligned and that gives better performance
>> on most architectures. Could you please check if this is the case for
>> any of the structs?
>
> I did this already, but also forward your question to the maintainers.
> Here is my result:
>
> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest interface?)
> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>
> All those struct statements need the pack attribute (otherwise the code
> would have to be rewritten which is of course always possible).
gesn_cdb in atapi.c,  VMDK4Header in vmdk.c and many structures in
bt.h need be fixed too.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-29  8:34     ` TeLeMan
@ 2011-08-29  9:39       ` Alexander Graf
  2011-08-29 19:55       ` Stefan Weil
  1 sibling, 0 replies; 32+ messages in thread
From: Alexander Graf @ 2011-08-29  9:39 UTC (permalink / raw)
  To: TeLeMan
  Cc: Kevin Wolf, Isaku Yamahata, QEMU Developers, Blue Swirl,
	Jan Kiszka, Gerd Hoffmann





Am 29.08.2011 um 10:34 schrieb TeLeMan <geleman@gmail.com>:

> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>> 
>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>>>> 
>>>> These patches fix the packing of structures which were affected by
>>>> the new compiler attribute -mms-bitfields (which is needed for glib-2.0).
>>>> 
>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>> the resulting struct alignment using pahole and codiff.
>>> 
>>> If a structure is only used internally by QEMU (not used in network,
>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>> in those cases it may be better to remove the packing, because then
>>> the fields may be naturally aligned and that gives better performance
>>> on most architectures. Could you please check if this is the case for
>>> any of the structs?
>> 
>> I did this already, but also forward your question to the maintainers.
>> Here is my result:
>> 
>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest interface?)
>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>> 
>> All those struct statements need the pack attribute (otherwise the code
>> would have to be rewritten which is of course always possible).
> gesn_cdb in atapi.c,  VMDK4Header in vmdk.c and many structures in
> bt.h need be fixed too.

Yes, please go through the complete source code and either replace the packed attribute by your macro or remove the unused ones. This patch set feels very x86-guest focused :)

I would however wait for another day and check if anyone is offended by the macro approach in general.

Thanks a lot for doing this!

Alex

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 7/7] slirp: Fix packing for w32
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 7/7] slirp: " Stefan Weil
@ 2011-08-29 10:12   ` Jan Kiszka
  2011-08-29 18:22     ` Stefan Weil
  0 siblings, 1 reply; 32+ messages in thread
From: Jan Kiszka @ 2011-08-29 10:12 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

On 2011-08-28 22:43, Stefan Weil wrote:
> Use QEMU_PACKED to eliminate the effects of compiler option
> -mms-bitfields.
> 
> Cc: Jan Kiszka <jan.kiszka@siemens.com>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
>  slirp/slirp.h |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/slirp/slirp.h b/slirp/slirp.h
> index dcf99d5..28a5c03 100644
> --- a/slirp/slirp.h
> +++ b/slirp/slirp.h
> @@ -199,7 +199,7 @@ struct arphdr {
>      uint32_t      ar_sip;           /* sender IP address       */
>      unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
>      uint32_t      ar_tip;           /* target IP address       */
> -} __attribute__((packed));
> +} QEMU_PACKED;
>  
>  #define ARP_TABLE_SIZE 16
>  

There are further cases in slirp. Please address them as well.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 7/7] slirp: Fix packing for w32
  2011-08-29 10:12   ` Jan Kiszka
@ 2011-08-29 18:22     ` Stefan Weil
  2011-08-29 21:15       ` Jan Kiszka
  0 siblings, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-29 18:22 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: QEMU Developers

Am 29.08.2011 12:12, schrieb Jan Kiszka:
> On 2011-08-28 22:43, Stefan Weil wrote:
>> Use QEMU_PACKED to eliminate the effects of compiler option
>> -mms-bitfields.
>>
>> Cc: Jan Kiszka<jan.kiszka@siemens.com>
>> Signed-off-by: Stefan Weil<weil@mail.berlios.de>
>> ---
>>   slirp/slirp.h |    2 +-
>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/slirp/slirp.h b/slirp/slirp.h
>> index dcf99d5..28a5c03 100644
>> --- a/slirp/slirp.h
>> +++ b/slirp/slirp.h
>> @@ -199,7 +199,7 @@ struct arphdr {
>>       uint32_t      ar_sip;           /* sender IP address       */
>>       unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
>>       uint32_t      ar_tip;           /* target IP address       */
>> -} __attribute__((packed));
>> +} QEMU_PACKED;
>>
>>   #define ARP_TABLE_SIZE 16
>>
>
> There are further cases in slirp. Please address them as well.
>
> Jan

I only addressed those cases which are affected by -mms-bitfields, see
http://lists.gnu.org/archive/html/qemu-devel/2011-08/msg03428.html.

Other files with __attribute__((packed)) will be handled in separate 
patches.

I don't think that I missed a case which breaks slirp, but if I did,
just tell me the struct name so I can fix it, too.

Stefan

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-29  8:34     ` TeLeMan
  2011-08-29  9:39       ` Alexander Graf
@ 2011-08-29 19:55       ` Stefan Weil
  2011-08-30  7:44         ` Kevin Wolf
  1 sibling, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-29 19:55 UTC (permalink / raw)
  To: TeLeMan
  Cc: Kevin Wolf, QEMU Developers, Alexander Graf, Blue Swirl,
	Isaku Yamahata, Jan Kiszka, Gerd Hoffmann

Am 29.08.2011 10:34, schrieb TeLeMan:
> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>
>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> 
>>> wrote:
>>>>
>>>> These patches fix the packing of structures which were affected by
>>>> the new compiler attribute -mms-bitfields (which is needed for 
>>>> glib-2.0).
>>>>
>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>> the resulting struct alignment using pahole and codiff.
>>>
>>> If a structure is only used internally by QEMU (not used in network,
>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>> in those cases it may be better to remove the packing, because then
>>> the fields may be naturally aligned and that gives better performance
>>> on most architectures. Could you please check if this is the case for
>>> any of the structs?
>>
>> I did this already, but also forward your question to the maintainers.
>> Here is my result:
>>
>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest 
>> interface?)
>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>>
>> All those struct statements need the pack attribute (otherwise the code
>> would have to be rewritten which is of course always possible).
> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
> bt.h need be fixed too.

Oops, you are right. Obviously I missed all anonymous structs:
codiff simply ignores them, and pahole must be called with
flags -a -A to show them. Who invented packing of structs?

Comparing the output of pahole -a -A is less elegant than using
codiff, but shows the structs which you mentioned.

I suggest to apply my patch series first because it fixes
the most important bugs in networking. The remaining
bugs are in code which is used less often. They will be
fixed by a second patch series which replaces all remaining
packed attributes.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 7/7] slirp: Fix packing for w32
  2011-08-29 18:22     ` Stefan Weil
@ 2011-08-29 21:15       ` Jan Kiszka
  0 siblings, 0 replies; 32+ messages in thread
From: Jan Kiszka @ 2011-08-29 21:15 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

[-- Attachment #1: Type: text/plain, Size: 1524 bytes --]

On 2011-08-29 20:22, Stefan Weil wrote:
> Am 29.08.2011 12:12, schrieb Jan Kiszka:
>> On 2011-08-28 22:43, Stefan Weil wrote:
>>> Use QEMU_PACKED to eliminate the effects of compiler option
>>> -mms-bitfields.
>>>
>>> Cc: Jan Kiszka<jan.kiszka@siemens.com>
>>> Signed-off-by: Stefan Weil<weil@mail.berlios.de>
>>> ---
>>>   slirp/slirp.h |    2 +-
>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/slirp/slirp.h b/slirp/slirp.h
>>> index dcf99d5..28a5c03 100644
>>> --- a/slirp/slirp.h
>>> +++ b/slirp/slirp.h
>>> @@ -199,7 +199,7 @@ struct arphdr {
>>>       uint32_t      ar_sip;           /* sender IP address       */
>>>       unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
>>>       uint32_t      ar_tip;           /* target IP address       */
>>> -} __attribute__((packed));
>>> +} QEMU_PACKED;
>>>
>>>   #define ARP_TABLE_SIZE 16
>>>
>>
>> There are further cases in slirp. Please address them as well.
>>
>> Jan
> 
> I only addressed those cases which are affected by -mms-bitfields, see
> http://lists.gnu.org/archive/html/qemu-devel/2011-08/msg03428.html.
> 
> Other files with __attribute__((packed)) will be handled in separate
> patches.

OK, but this was not clear from the patch description.

> 
> I don't think that I missed a case which breaks slirp, but if I did,
> just tell me the struct name so I can fix it, too.

From just looking at the slirp struct, you are likely safe as none
should have odd layouts.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-29 19:55       ` Stefan Weil
@ 2011-08-30  7:44         ` Kevin Wolf
  2011-08-30 17:25           ` Stefan Weil
  0 siblings, 1 reply; 32+ messages in thread
From: Kevin Wolf @ 2011-08-30  7:44 UTC (permalink / raw)
  To: Stefan Weil
  Cc: TeLeMan, QEMU Developers, Alexander Graf, Blue Swirl,
	Isaku Yamahata, Jan Kiszka, Gerd Hoffmann

Am 29.08.2011 21:55, schrieb Stefan Weil:
> Am 29.08.2011 10:34, schrieb TeLeMan:
>> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>>
>>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> 
>>>> wrote:
>>>>>
>>>>> These patches fix the packing of structures which were affected by
>>>>> the new compiler attribute -mms-bitfields (which is needed for 
>>>>> glib-2.0).
>>>>>
>>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>>> the resulting struct alignment using pahole and codiff.
>>>>
>>>> If a structure is only used internally by QEMU (not used in network,
>>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>>> in those cases it may be better to remove the packing, because then
>>>> the fields may be naturally aligned and that gives better performance
>>>> on most architectures. Could you please check if this is the case for
>>>> any of the structs?
>>>
>>> I did this already, but also forward your question to the maintainers.
>>> Here is my result:
>>>
>>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest 
>>> interface?)
>>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>>>
>>> All those struct statements need the pack attribute (otherwise the code
>>> would have to be rewritten which is of course always possible).
>> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
>> bt.h need be fixed too.
> 
> Oops, you are right. Obviously I missed all anonymous structs:
> codiff simply ignores them, and pahole must be called with
> flags -a -A to show them. Who invented packing of structs?
> 
> Comparing the output of pahole -a -A is less elegant than using
> codiff, but shows the structs which you mentioned.
> 
> I suggest to apply my patch series first because it fixes
> the most important bugs in networking. The remaining
> bugs are in code which is used less often. They will be
> fixed by a second patch series which replaces all remaining
> packed attributes.

Shouldn't we have a look at every packed structure instead of just
fixing what we notice as broken in the x86 emulator binary with one
given configuration? I think if there is a QEMU_PACKED, we should use it
consistently, or is there a reason not to do so?

Kevin

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-30  7:44         ` Kevin Wolf
@ 2011-08-30 17:25           ` Stefan Weil
  2011-08-30 18:29             ` Alexander Graf
  0 siblings, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-30 17:25 UTC (permalink / raw)
  To: Kevin Wolf
  Cc: TeLeMan, QEMU Developers, Alexander Graf, Blue Swirl,
	Isaku Yamahata, Jan Kiszka, Gerd Hoffmann

Am 30.08.2011 09:44, schrieb Kevin Wolf:
> Am 29.08.2011 21:55, schrieb Stefan Weil:
>> Am 29.08.2011 10:34, schrieb TeLeMan:
>>> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>>>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>>>
>>>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de>
>>>>> wrote:
>>>>>>
>>>>>> These patches fix the packing of structures which were affected by
>>>>>> the new compiler attribute -mms-bitfields (which is needed for
>>>>>> glib-2.0).
>>>>>>
>>>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>>>> the resulting struct alignment using pahole and codiff.
>>>>>
>>>>> If a structure is only used internally by QEMU (not used in network,
>>>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>>>> in those cases it may be better to remove the packing, because then
>>>>> the fields may be naturally aligned and that gives better performance
>>>>> on most architectures. Could you please check if this is the case for
>>>>> any of the structs?
>>>>
>>>> I did this already, but also forward your question to the maintainers.
>>>> Here is my result:
>>>>
>>>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>>>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>>>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>>>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>>>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest
>>>> interface?)
>>>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network 
>>>> interface)
>>>>
>>>> All those struct statements need the pack attribute (otherwise the code
>>>> would have to be rewritten which is of course always possible).
>>> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
>>> bt.h need be fixed too.
>>
>> Oops, you are right. Obviously I missed all anonymous structs:
>> codiff simply ignores them, and pahole must be called with
>> flags -a -A to show them. Who invented packing of structs?
>>
>> Comparing the output of pahole -a -A is less elegant than using
>> codiff, but shows the structs which you mentioned.
>>
>> I suggest to apply my patch series first because it fixes
>> the most important bugs in networking. The remaining
>> bugs are in code which is used less often. They will be
>> fixed by a second patch series which replaces all remaining
>> packed attributes.
>
> Shouldn't we have a look at every packed structure instead of just
> fixing what we notice as broken in the x86 emulator binary with one
> given configuration? I think if there is a QEMU_PACKED, we should use it
> consistently, or is there a reason not to do so?
>
> Kevin

Hi Kevin,

yes, we should use QEMU_PACKED instead of any __attribute__((packed)).

The first 7 patches simply introduce QEMU_PACKED
and fix the most important bugs for those users who run
QEMU on Windows. There was only a bug report for broken
networking (fixed by Jan's committed patch and the above
slirp patch). These fixes work for all targets, so
chances are good that Windows users will have
working binaries for the commonly used scenarios with
any target - although I only examined qemu.exe.

For this reason, these patches should be applied to git
master as soon as possible.

I did not intend to have a look at every packed structure
as was suggested by Alex, Blue and others.
I simply wanted to run a global replace (perl -pi -e ...)
which replaced the remaining __attributes__.

Reviewing every __attribute__ takes much more time of course:
there are more than 250 of them.
I don't think that a review is really necessary, because usually
"packed" is not added just for fun, and most QEMU code
was already reviewed. A small rate of unnecessary QEMU_PACKED
would do no harm, because only performance suffers a little.

If more people agreed that QEMU_PACKED can be introduced
mechanically by a script without a new review, I could send
a patch very soon.

Cheers,
Stefan

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
  2011-08-28 20:47   ` Andreas Färber
@ 2011-08-30 17:57   ` Blue Swirl
  2011-08-30 18:29     ` Paolo Bonzini
  1 sibling, 1 reply; 32+ messages in thread
From: Blue Swirl @ 2011-08-30 17:57 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> A packed struct needs different gcc attributes for compilations
> with MinGW compilers because glib-2.0 adds compiler flag
> -mms-bitfields which modifies the packing algorithm.
>
> Attribute gcc_struct reverses the negative effects of -mms-bitfields.
> QEMU_PACKED sets this attribute and must be used for any packed
> struct which is affected by -mms-bitfields.
>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
>  compiler.h |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/compiler.h b/compiler.h
> index 9af5dc6..a2d5959 100644
> --- a/compiler.h
> +++ b/compiler.h
> @@ -12,6 +12,12 @@
>  #define QEMU_WARN_UNUSED_RESULT
>  #endif
>
> +#if defined(_WIN32)
> +# define QEMU_PACKED __attribute__((gcc_struct, packed))

Maybe we could also use gcc_struct also for non-win32?

> +#else
> +# define QEMU_PACKED __attribute__((packed))
> +#endif
> +
>  #define QEMU_BUILD_BUG_ON(x) \
>     typedef char qemu_build_bug_on__##__LINE__[(x)?-1:1];
>
> --
> 1.7.0.4
>
>
>

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-30 17:57   ` Blue Swirl
@ 2011-08-30 18:29     ` Paolo Bonzini
  2011-08-30 20:17       ` Stefan Weil
  0 siblings, 1 reply; 32+ messages in thread
From: Paolo Bonzini @ 2011-08-30 18:29 UTC (permalink / raw)
  To: Blue Swirl; +Cc: QEMU Developers

On 08/30/2011 07:57 PM, Blue Swirl wrote:
>> >
>> >  +#if defined(_WIN32)
>> >  +# define QEMU_PACKED __attribute__((gcc_struct, packed))
> Maybe we could also use gcc_struct also for non-win32?
>
>> >  +#else
>> >  +# define QEMU_PACKED __attribute__((packed))
>> >  +#endif

Indeed.

Paolo

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-30 17:25           ` Stefan Weil
@ 2011-08-30 18:29             ` Alexander Graf
  2011-08-30 19:57               ` Blue Swirl
  2011-08-31  7:40               ` Kevin Wolf
  0 siblings, 2 replies; 32+ messages in thread
From: Alexander Graf @ 2011-08-30 18:29 UTC (permalink / raw)
  To: Stefan Weil
  Cc: Kevin Wolf, TeLeMan, QEMU Developers, Blue Swirl, Isaku Yamahata,
	Jan Kiszka, Gerd Hoffmann, Aurelien Jarno


On 30.08.2011, at 19:25, Stefan Weil wrote:

> Am 30.08.2011 09:44, schrieb Kevin Wolf:
>> Am 29.08.2011 21:55, schrieb Stefan Weil:
>>> Am 29.08.2011 10:34, schrieb TeLeMan:
>>>> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>>>>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>>>> 
>>>>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de>
>>>>>> wrote:
>>>>>>> 
>>>>>>> These patches fix the packing of structures which were affected by
>>>>>>> the new compiler attribute -mms-bitfields (which is needed for
>>>>>>> glib-2.0).
>>>>>>> 
>>>>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>>>>> the resulting struct alignment using pahole and codiff.
>>>>>> 
>>>>>> If a structure is only used internally by QEMU (not used in network,
>>>>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>>>>> in those cases it may be better to remove the packing, because then
>>>>>> the fields may be naturally aligned and that gives better performance
>>>>>> on most architectures. Could you please check if this is the case for
>>>>>> any of the structs?
>>>>> 
>>>>> I did this already, but also forward your question to the maintainers.
>>>>> Here is my result:
>>>>> 
>>>>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>>>>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>>>>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>>>>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>>>>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest
>>>>> interface?)
>>>>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>>>>> 
>>>>> All those struct statements need the pack attribute (otherwise the code
>>>>> would have to be rewritten which is of course always possible).
>>>> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
>>>> bt.h need be fixed too.
>>> 
>>> Oops, you are right. Obviously I missed all anonymous structs:
>>> codiff simply ignores them, and pahole must be called with
>>> flags -a -A to show them. Who invented packing of structs?
>>> 
>>> Comparing the output of pahole -a -A is less elegant than using
>>> codiff, but shows the structs which you mentioned.
>>> 
>>> I suggest to apply my patch series first because it fixes
>>> the most important bugs in networking. The remaining
>>> bugs are in code which is used less often. They will be
>>> fixed by a second patch series which replaces all remaining
>>> packed attributes.
>> 
>> Shouldn't we have a look at every packed structure instead of just
>> fixing what we notice as broken in the x86 emulator binary with one
>> given configuration? I think if there is a QEMU_PACKED, we should use it
>> consistently, or is there a reason not to do so?
>> 
>> Kevin
> 
> Hi Kevin,
> 
> yes, we should use QEMU_PACKED instead of any __attribute__((packed)).
> 
> The first 7 patches simply introduce QEMU_PACKED
> and fix the most important bugs for those users who run
> QEMU on Windows. There was only a bug report for broken
> networking (fixed by Jan's committed patch and the above
> slirp patch). These fixes work for all targets, so
> chances are good that Windows users will have
> working binaries for the commonly used scenarios with
> any target - although I only examined qemu.exe.
> 
> For this reason, these patches should be applied to git
> master as soon as possible.
> 
> I did not intend to have a look at every packed structure
> as was suggested by Alex, Blue and others.
> I simply wanted to run a global replace (perl -pi -e ...)
> which replaced the remaining __attributes__.
> 
> Reviewing every __attribute__ takes much more time of course:
> there are more than 250 of them.
> I don't think that a review is really necessary, because usually
> "packed" is not added just for fun, and most QEMU code
> was already reviewed. A small rate of unnecessary QEMU_PACKED
> would do no harm, because only performance suffers a little.
> 
> If more people agreed that QEMU_PACKED can be introduced
> mechanically by a script without a new review, I could send
> a patch very soon.

I think that's the better approach to the partial commit. Just introduce QEMU_PACKED, provide the script/sed cmdline you ran over the tree and replace it in every file. That makes more sense to commit than the partial conversion.

But please wait for a second opinion here :)


Alex

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-30 18:29             ` Alexander Graf
@ 2011-08-30 19:57               ` Blue Swirl
  2011-08-31  7:40               ` Kevin Wolf
  1 sibling, 0 replies; 32+ messages in thread
From: Blue Swirl @ 2011-08-30 19:57 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Kevin Wolf, Isaku Yamahata, TeLeMan, QEMU Developers, Jan Kiszka,
	Gerd Hoffmann, Aurelien Jarno

On Tue, Aug 30, 2011 at 6:29 PM, Alexander Graf <agraf@suse.de> wrote:
>
> On 30.08.2011, at 19:25, Stefan Weil wrote:
>
>> Am 30.08.2011 09:44, schrieb Kevin Wolf:
>>> Am 29.08.2011 21:55, schrieb Stefan Weil:
>>>> Am 29.08.2011 10:34, schrieb TeLeMan:
>>>>> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>>>>>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>>>>>
>>>>>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> These patches fix the packing of structures which were affected by
>>>>>>>> the new compiler attribute -mms-bitfields (which is needed for
>>>>>>>> glib-2.0).
>>>>>>>>
>>>>>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>>>>>> the resulting struct alignment using pahole and codiff.
>>>>>>>
>>>>>>> If a structure is only used internally by QEMU (not used in network,
>>>>>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>>>>>> in those cases it may be better to remove the packing, because then
>>>>>>> the fields may be naturally aligned and that gives better performance
>>>>>>> on most architectures. Could you please check if this is the case for
>>>>>>> any of the structs?
>>>>>>
>>>>>> I did this already, but also forward your question to the maintainers.
>>>>>> Here is my result:
>>>>>>
>>>>>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>>>>>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>>>>>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>>>>>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>>>>>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest
>>>>>> interface?)
>>>>>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>>>>>>
>>>>>> All those struct statements need the pack attribute (otherwise the code
>>>>>> would have to be rewritten which is of course always possible).
>>>>> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
>>>>> bt.h need be fixed too.
>>>>
>>>> Oops, you are right. Obviously I missed all anonymous structs:
>>>> codiff simply ignores them, and pahole must be called with
>>>> flags -a -A to show them. Who invented packing of structs?
>>>>
>>>> Comparing the output of pahole -a -A is less elegant than using
>>>> codiff, but shows the structs which you mentioned.
>>>>
>>>> I suggest to apply my patch series first because it fixes
>>>> the most important bugs in networking. The remaining
>>>> bugs are in code which is used less often. They will be
>>>> fixed by a second patch series which replaces all remaining
>>>> packed attributes.
>>>
>>> Shouldn't we have a look at every packed structure instead of just
>>> fixing what we notice as broken in the x86 emulator binary with one
>>> given configuration? I think if there is a QEMU_PACKED, we should use it
>>> consistently, or is there a reason not to do so?
>>>
>>> Kevin
>>
>> Hi Kevin,
>>
>> yes, we should use QEMU_PACKED instead of any __attribute__((packed)).
>>
>> The first 7 patches simply introduce QEMU_PACKED
>> and fix the most important bugs for those users who run
>> QEMU on Windows. There was only a bug report for broken
>> networking (fixed by Jan's committed patch and the above
>> slirp patch). These fixes work for all targets, so
>> chances are good that Windows users will have
>> working binaries for the commonly used scenarios with
>> any target - although I only examined qemu.exe.
>>
>> For this reason, these patches should be applied to git
>> master as soon as possible.
>>
>> I did not intend to have a look at every packed structure
>> as was suggested by Alex, Blue and others.
>> I simply wanted to run a global replace (perl -pi -e ...)
>> which replaced the remaining __attributes__.
>>
>> Reviewing every __attribute__ takes much more time of course:
>> there are more than 250 of them.
>> I don't think that a review is really necessary, because usually
>> "packed" is not added just for fun, and most QEMU code
>> was already reviewed. A small rate of unnecessary QEMU_PACKED
>> would do no harm, because only performance suffers a little.
>>
>> If more people agreed that QEMU_PACKED can be introduced
>> mechanically by a script without a new review, I could send
>> a patch very soon.
>
> I think that's the better approach to the partial commit. Just introduce QEMU_PACKED, provide the script/sed cmdline you ran over the tree and replace it in every file. That makes more sense to commit than the partial conversion.
>
> But please wait for a second opinion here :)

I'm leaning slightly towards mechanical approach for consistency.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures
  2011-08-30 18:29     ` Paolo Bonzini
@ 2011-08-30 20:17       ` Stefan Weil
  0 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-30 20:17 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Blue Swirl, QEMU Developers

[-- Attachment #1: Type: text/plain, Size: 888 bytes --]

Am 30.08.2011 20:29, schrieb Paolo Bonzini:
> On 08/30/2011 07:57 PM, Blue Swirl wrote:
>>> >
>>> >  +#if defined(_WIN32)
>>> >  +# define QEMU_PACKED __attribute__((gcc_struct, packed))
>> Maybe we could also use gcc_struct also for non-win32?
>>
>>> >  +#else
>>> >  +# define QEMU_PACKED __attribute__((packed))
>>> >  +#endif
>
> Indeed.
>
> Paolo
>

No. Extract from gcc documentation:

"Two attributes are currently defined for i386 configurations: 
|ms_struct| and |gcc_struct"

For non i386 configuration, these configurations are undefined:

mipsel-linux-gnu-gcc -c -Wall test.c
test.c:3: warning: ‘gcc_struct’ attribute directive ignored

Therefore, we cannot use gcc_struct for most supported hosts.
Linux i386 or x86_64 would support it, but they don't need it...

We need one #if ... #else ... #endif to avoid 250 of them :-)

Stefan

|

[-- Attachment #2: Type: text/html, Size: 1617 bytes --]

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields
  2011-08-30 18:29             ` Alexander Graf
  2011-08-30 19:57               ` Blue Swirl
@ 2011-08-31  7:40               ` Kevin Wolf
  2011-08-31 10:37                 ` [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED Stefan Weil
                                   ` (2 more replies)
  1 sibling, 3 replies; 32+ messages in thread
From: Kevin Wolf @ 2011-08-31  7:40 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Isaku Yamahata, TeLeMan, QEMU Developers, Blue Swirl, Jan Kiszka,
	Gerd Hoffmann, Aurelien Jarno

Am 30.08.2011 20:29, schrieb Alexander Graf:
> 
> On 30.08.2011, at 19:25, Stefan Weil wrote:
> 
>> Am 30.08.2011 09:44, schrieb Kevin Wolf:
>>> Am 29.08.2011 21:55, schrieb Stefan Weil:
>>>> Am 29.08.2011 10:34, schrieb TeLeMan:
>>>>> On Mon, Aug 29, 2011 at 13:01, Stefan Weil <weil@mail.berlios.de> wrote:
>>>>>> Am 28.08.2011 23:43, schrieb Blue Swirl:
>>>>>>>
>>>>>>> On Sun, Aug 28, 2011 at 8:43 PM, Stefan Weil <weil@mail.berlios.de>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> These patches fix the packing of structures which were affected by
>>>>>>>> the new compiler attribute -mms-bitfields (which is needed for
>>>>>>>> glib-2.0).
>>>>>>>>
>>>>>>>> I compiled qemu.exe with and without -mms-bitfields and compared
>>>>>>>> the resulting struct alignment using pahole and codiff.
>>>>>>>
>>>>>>> If a structure is only used internally by QEMU (not used in network,
>>>>>>> disk or guest interfaces), changes in padding don't matter. In fact,
>>>>>>> in those cases it may be better to remove the packing, because then
>>>>>>> the fields may be naturally aligned and that gives better performance
>>>>>>> on most architectures. Could you please check if this is the case for
>>>>>>> any of the structs?
>>>>>>
>>>>>> I did this already, but also forward your question to the maintainers.
>>>>>> Here is my result:
>>>>>>
>>>>>> [PATCH 2/7] block/vvfat: Fix packing for w32: needs packing (disk)
>>>>>> [PATCH 3/7] acpi: Fix packing for w32: needs packing (bios interface)
>>>>>> [PATCH 4/7] hpet: Fix packing for w32: needs packing (bios interface)
>>>>>> [PATCH 5/7] usb: Fix packing for w32: needs packing (usb interface)
>>>>>> [PATCH 6/7] virtio: Fix packing for w32: needs packing? (guest
>>>>>> interface?)
>>>>>> [PATCH 7/7] slirp: Fix packing for w32: needs packing (network interface)
>>>>>>
>>>>>> All those struct statements need the pack attribute (otherwise the code
>>>>>> would have to be rewritten which is of course always possible).
>>>>> gesn_cdb in atapi.c, VMDK4Header in vmdk.c and many structures in
>>>>> bt.h need be fixed too.
>>>>
>>>> Oops, you are right. Obviously I missed all anonymous structs:
>>>> codiff simply ignores them, and pahole must be called with
>>>> flags -a -A to show them. Who invented packing of structs?
>>>>
>>>> Comparing the output of pahole -a -A is less elegant than using
>>>> codiff, but shows the structs which you mentioned.
>>>>
>>>> I suggest to apply my patch series first because it fixes
>>>> the most important bugs in networking. The remaining
>>>> bugs are in code which is used less often. They will be
>>>> fixed by a second patch series which replaces all remaining
>>>> packed attributes.
>>>
>>> Shouldn't we have a look at every packed structure instead of just
>>> fixing what we notice as broken in the x86 emulator binary with one
>>> given configuration? I think if there is a QEMU_PACKED, we should use it
>>> consistently, or is there a reason not to do so?
>>>
>>> Kevin
>>
>> Hi Kevin,
>>
>> yes, we should use QEMU_PACKED instead of any __attribute__((packed)).
>>
>> The first 7 patches simply introduce QEMU_PACKED
>> and fix the most important bugs for those users who run
>> QEMU on Windows. There was only a bug report for broken
>> networking (fixed by Jan's committed patch and the above
>> slirp patch). These fixes work for all targets, so
>> chances are good that Windows users will have
>> working binaries for the commonly used scenarios with
>> any target - although I only examined qemu.exe.
>>
>> For this reason, these patches should be applied to git
>> master as soon as possible.
>>
>> I did not intend to have a look at every packed structure
>> as was suggested by Alex, Blue and others.
>> I simply wanted to run a global replace (perl -pi -e ...)
>> which replaced the remaining __attributes__.
>>
>> Reviewing every __attribute__ takes much more time of course:
>> there are more than 250 of them.
>> I don't think that a review is really necessary, because usually
>> "packed" is not added just for fun, and most QEMU code
>> was already reviewed. A small rate of unnecessary QEMU_PACKED
>> would do no harm, because only performance suffers a little.
>>
>> If more people agreed that QEMU_PACKED can be introduced
>> mechanically by a script without a new review, I could send
>> a patch very soon.
> 
> I think that's the better approach to the partial commit. Just introduce QEMU_PACKED, provide the script/sed cmdline you ran over the tree and replace it in every file. That makes more sense to commit than the partial conversion.
> 
> But please wait for a second opinion here :)

I agree.

Kevin

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED
  2011-08-31  7:40               ` Kevin Wolf
@ 2011-08-31 10:37                 ` Stefan Weil
  2011-09-03 21:12                   ` Blue Swirl
  2011-08-31 10:38                 ` [Qemu-devel] [PATCH 1/2] Add new macro QEMU_PACKED for packed C structures Stefan Weil
  2011-08-31 10:38                 ` [Qemu-devel] [PATCH 2/2] Use new macro QEMU_PACKED for packed structures Stefan Weil
  2 siblings, 1 reply; 32+ messages in thread
From: Stefan Weil @ 2011-08-31 10:37 UTC (permalink / raw)
  To: QEMU Developers

The new series adds macro QEMU_PACKED and converts most
code locations mechanically (script) to use this macro.

See log message of patch 2/2 for the few exceptions.

[PATCH 1/2] Add new macro QEMU_PACKED for packed C structures
[PATCH 2/2] Use new macro QEMU_PACKED for packed structures

Cheers,
Stefan

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 1/2] Add new macro QEMU_PACKED for packed C structures
  2011-08-31  7:40               ` Kevin Wolf
  2011-08-31 10:37                 ` [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED Stefan Weil
@ 2011-08-31 10:38                 ` Stefan Weil
  2011-08-31 10:38                 ` [Qemu-devel] [PATCH 2/2] Use new macro QEMU_PACKED for packed structures Stefan Weil
  2 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-31 10:38 UTC (permalink / raw)
  To: QEMU Developers

A packed struct needs different gcc attributes for compilations
with MinGW compilers because glib-2.0 adds compiler flag
-mms-bitfields which modifies the packing algorithm.

Attribute gcc_struct reverses the negative effects of -mms-bitfields.
QEMU_PACKED sets this attribute and must be used for any packed
struct which is affected by -mms-bitfields.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 compiler.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/compiler.h b/compiler.h
index 9af5dc6..a2d5959 100644
--- a/compiler.h
+++ b/compiler.h
@@ -12,6 +12,12 @@
 #define QEMU_WARN_UNUSED_RESULT
 #endif
 
+#if defined(_WIN32)
+# define QEMU_PACKED __attribute__((gcc_struct, packed))
+#else
+# define QEMU_PACKED __attribute__((packed))
+#endif
+
 #define QEMU_BUILD_BUG_ON(x) \
     typedef char qemu_build_bug_on__##__LINE__[(x)?-1:1];
 
-- 
1.7.2.5

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* [Qemu-devel] [PATCH 2/2] Use new macro QEMU_PACKED for packed structures
  2011-08-31  7:40               ` Kevin Wolf
  2011-08-31 10:37                 ` [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED Stefan Weil
  2011-08-31 10:38                 ` [Qemu-devel] [PATCH 1/2] Add new macro QEMU_PACKED for packed C structures Stefan Weil
@ 2011-08-31 10:38                 ` Stefan Weil
  2 siblings, 0 replies; 32+ messages in thread
From: Stefan Weil @ 2011-08-31 10:38 UTC (permalink / raw)
  To: QEMU Developers

Most changes were made using these commands:

git grep -la '__attribute__((packed))'|xargs perl -pi -e 's/__attribute__\(\(packed\)\)/QEMU_PACKED/'
git grep -la '__attribute__ ((packed))'|xargs perl -pi -e 's/__attribute__ \(\(packed\)\)/QEMU_PACKED/'
git grep -la '__attribute__((__packed__))'|xargs perl -pi -e 's/__attribute__\(\(__packed__\)\)/QEMU_PACKED/'
git grep -la '__attribute__ ((__packed__))'|xargs perl -pi -e 's/__attribute__ \(\(__packed__\)\)/QEMU_PACKED/'
git grep -la '__attribute((packed))'|xargs perl -pi -e 's/__attribute\(\(packed\)\)/QEMU_PACKED/'

Whitespace in linux-user/syscall_defs.h was fixed manually
to avoid warnings from scripts/checkpatch.pl.

Manual changes were also applied to hw/pc.c.

I did not fix indentation with tabs in block/vvfat.c.
The patch will show 4 errors with scripts/checkpatch.pl.

Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 a.out.h                   |    2 +-
 block.c                   |    2 +-
 block/parallels.c         |    2 +-
 block/qcow2-snapshot.c    |    2 +-
 block/vmdk.c              |    2 +-
 block/vvfat.c             |   14 +-
 hw/9pfs/virtio-9p.h       |    2 +-
 hw/acpi.c                 |    2 +-
 hw/bt.h                   |  332 ++++++++++++++++++++++----------------------
 hw/hpet_emul.h            |    4 +-
 hw/ide/ahci.h             |    6 +-
 hw/ide/atapi.c            |    4 +-
 hw/milkymist-tmu2.c       |    2 +-
 hw/pc.c                   |    4 +-
 hw/pxa2xx_lcd.c           |    2 +-
 hw/r2d.c                  |    2 +-
 hw/rc4030.c               |    2 +-
 hw/smbios.c               |    6 +-
 hw/smbios.h               |   22 ++--
 hw/srp.h                  |   10 +-
 hw/usb-ccid.c             |   18 ++--
 hw/virtio-balloon.h       |    2 +-
 hw/virtio-blk.h           |    2 +-
 hw/virtio-net.h           |    2 +-
 hw/virtio-serial.h        |    2 +-
 hw/vmware_vga.c           |    2 +-
 hw/zaurus.c               |    2 +-
 linux-user/syscall_defs.h |   16 +-
 m68k-semi.c               |    4 +-
 nbd.h                     |    4 +-
 slirp/ip.h                |   16 +-
 slirp/slirp.h             |    2 +-
 target-i386/kvm.c         |    2 +-
 target-i386/svm.h         |    8 +-
 target-s390x/cpu.h        |    2 +-
 tests/test-i386.c         |   10 +-
 36 files changed, 259 insertions(+), 259 deletions(-)

diff --git a/a.out.h b/a.out.h
index dfc104e..33ca7f7 100644
--- a/a.out.h
+++ b/a.out.h
@@ -151,7 +151,7 @@ struct external_lineno {
 #define E_FILNMLEN	14	/* # characters in a file name		*/
 #define E_DIMNUM	4	/* # array dimensions in auxiliary entry */
 
-struct __attribute__((packed)) external_syment
+struct QEMU_PACKED external_syment
 {
   union {
     char e_name[E_SYMNMLEN];
diff --git a/block.c b/block.c
index 03a21d8..43742b7 100644
--- a/block.c
+++ b/block.c
@@ -1327,7 +1327,7 @@ struct partition {
         uint8_t end_cyl;            /* end cylinder */
         uint32_t start_sect;        /* starting sector counting from 0 */
         uint32_t nr_sects;          /* nr of sectors in partition */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /* try to guess the disk logical geometry from the MSDOS partition table. Return 0 if OK, -1 if could not guess */
 static int guess_disk_lchs(BlockDriverState *bs,
diff --git a/block/parallels.c b/block/parallels.c
index 37d151d..c64103d 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -43,7 +43,7 @@ struct parallels_header {
     uint32_t catalog_entries;
     uint32_t nb_sectors;
     char padding[24];
-} __attribute__((packed));
+} QEMU_PACKED;
 
 typedef struct BDRVParallelsState {
 
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index 3e6bf8b..bdc33ba 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -26,7 +26,7 @@
 #include "block_int.h"
 #include "block/qcow2.h"
 
-typedef struct __attribute__((packed)) QCowSnapshotHeader {
+typedef struct QEMU_PACKED QCowSnapshotHeader {
     /* header is 8 byte aligned */
     uint64_t l1_table_offset;
 
diff --git a/block/vmdk.c b/block/vmdk.c
index 8da87ac..5f673e9 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -56,7 +56,7 @@ typedef struct {
     int64_t grain_offset;
     char filler[1];
     char check_bytes[4];
-} __attribute__((packed)) VMDK4Header;
+} QEMU_PACKED VMDK4Header;
 
 #define L2_CACHE_SIZE 16
 
diff --git a/block/vvfat.c b/block/vvfat.c
index d6a07ef..187ac96 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -200,7 +200,7 @@ static int array_index(array_t* array, void* pointer)
 }
 
 /* These structures are used to fake a disk and the VFAT filesystem.
- * For this reason we need to use __attribute__((packed)). */
+ * For this reason we need to use QEMU_PACKED. */
 
 typedef struct bootsector_t {
     uint8_t jump[3];
@@ -224,7 +224,7 @@ typedef struct bootsector_t {
 	    uint8_t signature;
 	    uint32_t id;
 	    uint8_t volume_label[11];
-	} __attribute__((packed)) fat16;
+	} QEMU_PACKED fat16;
 	struct {
 	    uint32_t sectors_per_fat;
 	    uint16_t flags;
@@ -233,12 +233,12 @@ typedef struct bootsector_t {
 	    uint16_t info_sector;
 	    uint16_t backup_boot_sector;
 	    uint16_t ignored;
-	} __attribute__((packed)) fat32;
+	} QEMU_PACKED fat32;
     } u;
     uint8_t fat_type[8];
     uint8_t ignored[0x1c0];
     uint8_t magic[2];
-} __attribute__((packed)) bootsector_t;
+} QEMU_PACKED bootsector_t;
 
 typedef struct {
     uint8_t head;
@@ -253,7 +253,7 @@ typedef struct partition_t {
     mbr_chs_t end_CHS;
     uint32_t start_sector_long;
     uint32_t length_sector_long;
-} __attribute__((packed)) partition_t;
+} QEMU_PACKED partition_t;
 
 typedef struct mbr_t {
     uint8_t ignored[0x1b8];
@@ -261,7 +261,7 @@ typedef struct mbr_t {
     uint8_t ignored2[2];
     partition_t partition[4];
     uint8_t magic[2];
-} __attribute__((packed)) mbr_t;
+} QEMU_PACKED mbr_t;
 
 typedef struct direntry_t {
     uint8_t name[8];
@@ -276,7 +276,7 @@ typedef struct direntry_t {
     uint16_t mdate;
     uint16_t begin;
     uint32_t size;
-} __attribute__((packed)) direntry_t;
+} QEMU_PACKED direntry_t;
 
 /* this structure are used to transparently access the files */
 
diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h
index 1d8c1b1..d00a502 100644
--- a/hw/9pfs/virtio-9p.h
+++ b/hw/9pfs/virtio-9p.h
@@ -314,7 +314,7 @@ struct virtio_9p_config
     uint16_t tag_len;
     /* Variable size tag name */
     uint8_t tag[0];
-} __attribute__((packed));
+} QEMU_PACKED;
 
 typedef struct V9fsMkState {
     V9fsPDU *pdu;
diff --git a/hw/acpi.c b/hw/acpi.c
index d04b965..1cf35e1 100644
--- a/hw/acpi.c
+++ b/hw/acpi.c
@@ -32,7 +32,7 @@ struct acpi_table_header {
     uint32_t oem_revision;    /* OEM revision number */
     char asl_compiler_id[4];  /* ASL compiler vendor ID */
     uint32_t asl_compiler_revision; /* ASL compiler revision number */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define ACPI_TABLE_HDR_SIZE sizeof(struct acpi_table_header)
 #define ACPI_TABLE_PFX_SIZE sizeof(uint16_t)  /* size of the extra prefix */
diff --git a/hw/bt.h b/hw/bt.h
index 3797254..a48b8d4 100644
--- a/hw/bt.h
+++ b/hw/bt.h
@@ -26,7 +26,7 @@
 /* BD Address */
 typedef struct {
     uint8_t b[6];
-} __attribute__((packed)) bdaddr_t;
+} QEMU_PACKED bdaddr_t;
 
 #define BDADDR_ANY	(&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
 #define BDADDR_ALL	(&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
@@ -446,13 +446,13 @@ typedef struct {
     uint8_t	lap[3];
     uint8_t	length;		/* 1.28s units */
     uint8_t	num_rsp;
-} __attribute__ ((packed)) inquiry_cp;
+} QEMU_PACKED inquiry_cp;
 #define INQUIRY_CP_SIZE 5
 
 typedef struct {
     uint8_t		status;
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) status_bdaddr_rp;
+} QEMU_PACKED status_bdaddr_rp;
 #define STATUS_BDADDR_RP_SIZE 7
 
 #define OCF_INQUIRY_CANCEL		0x0002
@@ -464,7 +464,7 @@ typedef struct {
     uint8_t	lap[3];
     uint8_t	length;		/* 1.28s units */
     uint8_t	num_rsp;
-} __attribute__ ((packed)) periodic_inquiry_cp;
+} QEMU_PACKED periodic_inquiry_cp;
 #define PERIODIC_INQUIRY_CP_SIZE 9
 
 #define OCF_EXIT_PERIODIC_INQUIRY	0x0004
@@ -477,55 +477,55 @@ typedef struct {
     uint8_t	pscan_mode;
     uint16_t	clock_offset;
     uint8_t	role_switch;
-} __attribute__ ((packed)) create_conn_cp;
+} QEMU_PACKED create_conn_cp;
 #define CREATE_CONN_CP_SIZE 13
 
 #define OCF_DISCONNECT			0x0006
 typedef struct {
     uint16_t	handle;
     uint8_t	reason;
-} __attribute__ ((packed)) disconnect_cp;
+} QEMU_PACKED disconnect_cp;
 #define DISCONNECT_CP_SIZE 3
 
 #define OCF_ADD_SCO			0x0007
 typedef struct {
     uint16_t	handle;
     uint16_t	pkt_type;
-} __attribute__ ((packed)) add_sco_cp;
+} QEMU_PACKED add_sco_cp;
 #define ADD_SCO_CP_SIZE 4
 
 #define OCF_CREATE_CONN_CANCEL		0x0008
 typedef struct {
     uint8_t	status;
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) create_conn_cancel_cp;
+} QEMU_PACKED create_conn_cancel_cp;
 #define CREATE_CONN_CANCEL_CP_SIZE 6
 
 typedef struct {
     uint8_t	status;
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) create_conn_cancel_rp;
+} QEMU_PACKED create_conn_cancel_rp;
 #define CREATE_CONN_CANCEL_RP_SIZE 7
 
 #define OCF_ACCEPT_CONN_REQ		0x0009
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	role;
-} __attribute__ ((packed)) accept_conn_req_cp;
+} QEMU_PACKED accept_conn_req_cp;
 #define ACCEPT_CONN_REQ_CP_SIZE	7
 
 #define OCF_REJECT_CONN_REQ		0x000A
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	reason;
-} __attribute__ ((packed)) reject_conn_req_cp;
+} QEMU_PACKED reject_conn_req_cp;
 #define REJECT_CONN_REQ_CP_SIZE	7
 
 #define OCF_LINK_KEY_REPLY		0x000B
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	link_key[16];
-} __attribute__ ((packed)) link_key_reply_cp;
+} QEMU_PACKED link_key_reply_cp;
 #define LINK_KEY_REPLY_CP_SIZE 22
 
 #define OCF_LINK_KEY_NEG_REPLY		0x000C
@@ -535,7 +535,7 @@ typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	pin_len;
     uint8_t	pin_code[16];
-} __attribute__ ((packed)) pin_code_reply_cp;
+} QEMU_PACKED pin_code_reply_cp;
 #define PIN_CODE_REPLY_CP_SIZE 23
 
 #define OCF_PIN_CODE_NEG_REPLY		0x000E
@@ -544,32 +544,32 @@ typedef struct {
 typedef struct {
     uint16_t	 handle;
     uint16_t	 pkt_type;
-} __attribute__ ((packed)) set_conn_ptype_cp;
+} QEMU_PACKED set_conn_ptype_cp;
 #define SET_CONN_PTYPE_CP_SIZE 4
 
 #define OCF_AUTH_REQUESTED		0x0011
 typedef struct {
     uint16_t	 handle;
-} __attribute__ ((packed)) auth_requested_cp;
+} QEMU_PACKED auth_requested_cp;
 #define AUTH_REQUESTED_CP_SIZE 2
 
 #define OCF_SET_CONN_ENCRYPT		0x0013
 typedef struct {
     uint16_t	handle;
     uint8_t	encrypt;
-} __attribute__ ((packed)) set_conn_encrypt_cp;
+} QEMU_PACKED set_conn_encrypt_cp;
 #define SET_CONN_ENCRYPT_CP_SIZE 3
 
 #define OCF_CHANGE_CONN_LINK_KEY	0x0015
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) change_conn_link_key_cp;
+} QEMU_PACKED change_conn_link_key_cp;
 #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
 
 #define OCF_MASTER_LINK_KEY		0x0017
 typedef struct {
     uint8_t	key_flag;
-} __attribute__ ((packed)) master_link_key_cp;
+} QEMU_PACKED master_link_key_cp;
 #define MASTER_LINK_KEY_CP_SIZE 1
 
 #define OCF_REMOTE_NAME_REQ		0x0019
@@ -578,50 +578,50 @@ typedef struct {
     uint8_t	pscan_rep_mode;
     uint8_t	pscan_mode;
     uint16_t	clock_offset;
-} __attribute__ ((packed)) remote_name_req_cp;
+} QEMU_PACKED remote_name_req_cp;
 #define REMOTE_NAME_REQ_CP_SIZE 10
 
 #define OCF_REMOTE_NAME_REQ_CANCEL	0x001A
 typedef struct {
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) remote_name_req_cancel_cp;
+} QEMU_PACKED remote_name_req_cancel_cp;
 #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
 
 typedef struct {
     uint8_t		status;
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) remote_name_req_cancel_rp;
+} QEMU_PACKED remote_name_req_cancel_rp;
 #define REMOTE_NAME_REQ_CANCEL_RP_SIZE 7
 
 #define OCF_READ_REMOTE_FEATURES	0x001B
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_remote_features_cp;
+} QEMU_PACKED read_remote_features_cp;
 #define READ_REMOTE_FEATURES_CP_SIZE 2
 
 #define OCF_READ_REMOTE_EXT_FEATURES	0x001C
 typedef struct {
     uint16_t	handle;
     uint8_t	page_num;
-} __attribute__ ((packed)) read_remote_ext_features_cp;
+} QEMU_PACKED read_remote_ext_features_cp;
 #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
 
 #define OCF_READ_REMOTE_VERSION		0x001D
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_remote_version_cp;
+} QEMU_PACKED read_remote_version_cp;
 #define READ_REMOTE_VERSION_CP_SIZE 2
 
 #define OCF_READ_CLOCK_OFFSET		0x001F
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_clock_offset_cp;
+} QEMU_PACKED read_clock_offset_cp;
 #define READ_CLOCK_OFFSET_CP_SIZE 2
 
 #define OCF_READ_LMP_HANDLE		0x0020
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_lmp_handle_cp;
+} QEMU_PACKED read_lmp_handle_cp;
 #define READ_LMP_HANDLE_CP_SIZE 2
 
 typedef struct {
@@ -629,7 +629,7 @@ typedef struct {
     uint16_t	handle;
     uint8_t	lmp_handle;
     uint32_t	reserved;
-} __attribute__ ((packed)) read_lmp_handle_rp;
+} QEMU_PACKED read_lmp_handle_rp;
 #define READ_LMP_HANDLE_RP_SIZE 8
 
 #define OCF_SETUP_SYNC_CONN		0x0028
@@ -641,7 +641,7 @@ typedef struct {
     uint16_t	voice_setting;
     uint8_t	retrans_effort;
     uint16_t	pkt_type;
-} __attribute__ ((packed)) setup_sync_conn_cp;
+} QEMU_PACKED setup_sync_conn_cp;
 #define SETUP_SYNC_CONN_CP_SIZE 17
 
 #define OCF_ACCEPT_SYNC_CONN_REQ	0x0029
@@ -653,14 +653,14 @@ typedef struct {
     uint16_t	voice_setting;
     uint8_t	retrans_effort;
     uint16_t	pkt_type;
-} __attribute__ ((packed)) accept_sync_conn_req_cp;
+} QEMU_PACKED accept_sync_conn_req_cp;
 #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
 
 #define OCF_REJECT_SYNC_CONN_REQ	0x002A
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	reason;
-} __attribute__ ((packed)) reject_sync_conn_req_cp;
+} QEMU_PACKED reject_sync_conn_req_cp;
 #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
 
 /* Link Policy */
@@ -671,7 +671,7 @@ typedef struct {
     uint16_t	handle;
     uint16_t	max_interval;
     uint16_t	min_interval;
-} __attribute__ ((packed)) hold_mode_cp;
+} QEMU_PACKED hold_mode_cp;
 #define HOLD_MODE_CP_SIZE 6
 
 #define OCF_SNIFF_MODE			0x0003
@@ -681,13 +681,13 @@ typedef struct {
     uint16_t	min_interval;
     uint16_t	attempt;
     uint16_t	timeout;
-} __attribute__ ((packed)) sniff_mode_cp;
+} QEMU_PACKED sniff_mode_cp;
 #define SNIFF_MODE_CP_SIZE 10
 
 #define OCF_EXIT_SNIFF_MODE		0x0004
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) exit_sniff_mode_cp;
+} QEMU_PACKED exit_sniff_mode_cp;
 #define EXIT_SNIFF_MODE_CP_SIZE 2
 
 #define OCF_PARK_MODE			0x0005
@@ -695,13 +695,13 @@ typedef struct {
     uint16_t	handle;
     uint16_t	max_interval;
     uint16_t	min_interval;
-} __attribute__ ((packed)) park_mode_cp;
+} QEMU_PACKED park_mode_cp;
 #define PARK_MODE_CP_SIZE 6
 
 #define OCF_EXIT_PARK_MODE		0x0006
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) exit_park_mode_cp;
+} QEMU_PACKED exit_park_mode_cp;
 #define EXIT_PARK_MODE_CP_SIZE 2
 
 #define OCF_QOS_SETUP			0x0007
@@ -711,56 +711,56 @@ typedef struct {
     uint32_t	peak_bandwidth;		/* Byte per seconds */
     uint32_t	latency;		/* Microseconds */
     uint32_t	delay_variation;	/* Microseconds */
-} __attribute__ ((packed)) hci_qos;
+} QEMU_PACKED hci_qos;
 #define HCI_QOS_CP_SIZE 17
 typedef struct {
     uint16_t 	handle;
     uint8_t 	flags;			/* Reserved */
     hci_qos 	qos;
-} __attribute__ ((packed)) qos_setup_cp;
+} QEMU_PACKED qos_setup_cp;
 #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
 
 #define OCF_ROLE_DISCOVERY		0x0009
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) role_discovery_cp;
+} QEMU_PACKED role_discovery_cp;
 #define ROLE_DISCOVERY_CP_SIZE 2
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	role;
-} __attribute__ ((packed)) role_discovery_rp;
+} QEMU_PACKED role_discovery_rp;
 #define ROLE_DISCOVERY_RP_SIZE 4
 
 #define OCF_SWITCH_ROLE			0x000B
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	role;
-} __attribute__ ((packed)) switch_role_cp;
+} QEMU_PACKED switch_role_cp;
 #define SWITCH_ROLE_CP_SIZE 7
 
 #define OCF_READ_LINK_POLICY		0x000C
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_link_policy_cp;
+} QEMU_PACKED read_link_policy_cp;
 #define READ_LINK_POLICY_CP_SIZE 2
 typedef struct {
     uint8_t 	status;
     uint16_t	handle;
     uint16_t	policy;
-} __attribute__ ((packed)) read_link_policy_rp;
+} QEMU_PACKED read_link_policy_rp;
 #define READ_LINK_POLICY_RP_SIZE 5
 
 #define OCF_WRITE_LINK_POLICY		0x000D
 typedef struct {
     uint16_t	handle;
     uint16_t	policy;
-} __attribute__ ((packed)) write_link_policy_cp;
+} QEMU_PACKED write_link_policy_cp;
 #define WRITE_LINK_POLICY_CP_SIZE 4
 typedef struct {
     uint8_t 	status;
     uint16_t	handle;
-} __attribute__ ((packed)) write_link_policy_rp;
+} QEMU_PACKED write_link_policy_rp;
 #define WRITE_LINK_POLICY_RP_SIZE 3
 
 #define OCF_READ_DEFAULT_LINK_POLICY	0x000E
@@ -776,7 +776,7 @@ typedef struct {
     uint16_t	max_local_latency;
     uint16_t	min_remote_timeout;
     uint16_t	min_local_timeout;
-} __attribute__ ((packed)) sniff_subrate_cp;
+} QEMU_PACKED sniff_subrate_cp;
 #define SNIFF_SUBRATE_CP_SIZE 10
 
 /* Host Controller and Baseband */
@@ -785,7 +785,7 @@ typedef struct {
 #define OCF_SET_EVENT_MASK		0x0001
 typedef struct {
     uint8_t	mask[8];
-} __attribute__ ((packed)) set_event_mask_cp;
+} QEMU_PACKED set_event_mask_cp;
 #define SET_EVENT_MASK_CP_SIZE 8
 
 #define OCF_RESET			0x0003
@@ -795,7 +795,7 @@ typedef struct {
     uint8_t	flt_type;
     uint8_t	cond_type;
     uint8_t	condition[0];
-} __attribute__ ((packed)) set_event_flt_cp;
+} QEMU_PACKED set_event_flt_cp;
 #define SET_EVENT_FLT_CP_SIZE 2
 
 enum bt_filter_type {
@@ -821,26 +821,26 @@ enum conn_setup_cond {
 #define OCF_FLUSH			0x0008
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) flush_cp;
+} QEMU_PACKED flush_cp;
 #define FLUSH_CP_SIZE 2
 
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
-} __attribute__ ((packed)) flush_rp;
+} QEMU_PACKED flush_rp;
 #define FLUSH_RP_SIZE 3
 
 #define OCF_READ_PIN_TYPE		0x0009
 typedef struct {
     uint8_t	status;
     uint8_t	pin_type;
-} __attribute__ ((packed)) read_pin_type_rp;
+} QEMU_PACKED read_pin_type_rp;
 #define READ_PIN_TYPE_RP_SIZE 2
 
 #define OCF_WRITE_PIN_TYPE		0x000A
 typedef struct {
     uint8_t	pin_type;
-} __attribute__ ((packed)) write_pin_type_cp;
+} QEMU_PACKED write_pin_type_cp;
 #define WRITE_PIN_TYPE_CP_SIZE 1
 
 #define OCF_CREATE_NEW_UNIT_KEY		0x000B
@@ -849,89 +849,89 @@ typedef struct {
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	read_all;
-} __attribute__ ((packed)) read_stored_link_key_cp;
+} QEMU_PACKED read_stored_link_key_cp;
 #define READ_STORED_LINK_KEY_CP_SIZE 7
 typedef struct {
     uint8_t	status;
     uint16_t	max_keys;
     uint16_t	num_keys;
-} __attribute__ ((packed)) read_stored_link_key_rp;
+} QEMU_PACKED read_stored_link_key_rp;
 #define READ_STORED_LINK_KEY_RP_SIZE 5
 
 #define OCF_WRITE_STORED_LINK_KEY	0x0011
 typedef struct {
     uint8_t	num_keys;
     /* variable length part */
-} __attribute__ ((packed)) write_stored_link_key_cp;
+} QEMU_PACKED write_stored_link_key_cp;
 #define WRITE_STORED_LINK_KEY_CP_SIZE 1
 typedef struct {
     uint8_t	status;
     uint8_t	num_keys;
-} __attribute__ ((packed)) write_stored_link_key_rp;
+} QEMU_PACKED write_stored_link_key_rp;
 #define READ_WRITE_LINK_KEY_RP_SIZE 2
 
 #define OCF_DELETE_STORED_LINK_KEY	0x0012
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	delete_all;
-} __attribute__ ((packed)) delete_stored_link_key_cp;
+} QEMU_PACKED delete_stored_link_key_cp;
 #define DELETE_STORED_LINK_KEY_CP_SIZE 7
 typedef struct {
     uint8_t	status;
     uint16_t	num_keys;
-} __attribute__ ((packed)) delete_stored_link_key_rp;
+} QEMU_PACKED delete_stored_link_key_rp;
 #define DELETE_STORED_LINK_KEY_RP_SIZE 3
 
 #define OCF_CHANGE_LOCAL_NAME		0x0013
 typedef struct {
     char	name[248];
-} __attribute__ ((packed)) change_local_name_cp;
+} QEMU_PACKED change_local_name_cp;
 #define CHANGE_LOCAL_NAME_CP_SIZE 248 
 
 #define OCF_READ_LOCAL_NAME		0x0014
 typedef struct {
     uint8_t	status;
     char	name[248];
-} __attribute__ ((packed)) read_local_name_rp;
+} QEMU_PACKED read_local_name_rp;
 #define READ_LOCAL_NAME_RP_SIZE 249 
 
 #define OCF_READ_CONN_ACCEPT_TIMEOUT	0x0015
 typedef struct {
     uint8_t	status;
     uint16_t	timeout;
-} __attribute__ ((packed)) read_conn_accept_timeout_rp;
+} QEMU_PACKED read_conn_accept_timeout_rp;
 #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
 
 #define OCF_WRITE_CONN_ACCEPT_TIMEOUT	0x0016
 typedef struct {
     uint16_t	timeout;
-} __attribute__ ((packed)) write_conn_accept_timeout_cp;
+} QEMU_PACKED write_conn_accept_timeout_cp;
 #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
 
 #define OCF_READ_PAGE_TIMEOUT		0x0017
 typedef struct {
     uint8_t	status;
     uint16_t	timeout;
-} __attribute__ ((packed)) read_page_timeout_rp;
+} QEMU_PACKED read_page_timeout_rp;
 #define READ_PAGE_TIMEOUT_RP_SIZE 3
 
 #define OCF_WRITE_PAGE_TIMEOUT		0x0018
 typedef struct {
     uint16_t	timeout;
-} __attribute__ ((packed)) write_page_timeout_cp;
+} QEMU_PACKED write_page_timeout_cp;
 #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
 
 #define OCF_READ_SCAN_ENABLE		0x0019
 typedef struct {
     uint8_t	status;
     uint8_t	enable;
-} __attribute__ ((packed)) read_scan_enable_rp;
+} QEMU_PACKED read_scan_enable_rp;
 #define READ_SCAN_ENABLE_RP_SIZE 2
 
 #define OCF_WRITE_SCAN_ENABLE		0x001A
 typedef struct {
     uint8_t	scan_enable;
-} __attribute__ ((packed)) write_scan_enable_cp;
+} QEMU_PACKED write_scan_enable_cp;
 #define WRITE_SCAN_ENABLE_CP_SIZE 1
 
 enum scan_enable_bits {
@@ -945,14 +945,14 @@ typedef struct {
     uint8_t	status;
     uint16_t	interval;
     uint16_t	window;
-} __attribute__ ((packed)) read_page_activity_rp;
+} QEMU_PACKED read_page_activity_rp;
 #define READ_PAGE_ACTIVITY_RP_SIZE 5
 
 #define OCF_WRITE_PAGE_ACTIVITY		0x001C
 typedef struct {
     uint16_t	interval;
     uint16_t	window;
-} __attribute__ ((packed)) write_page_activity_cp;
+} QEMU_PACKED write_page_activity_cp;
 #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
 
 #define OCF_READ_INQ_ACTIVITY		0x001D
@@ -960,14 +960,14 @@ typedef struct {
     uint8_t	status;
     uint16_t	interval;
     uint16_t	window;
-} __attribute__ ((packed)) read_inq_activity_rp;
+} QEMU_PACKED read_inq_activity_rp;
 #define READ_INQ_ACTIVITY_RP_SIZE 5
 
 #define OCF_WRITE_INQ_ACTIVITY		0x001E
 typedef struct {
     uint16_t	interval;
     uint16_t	window;
-} __attribute__ ((packed)) write_inq_activity_cp;
+} QEMU_PACKED write_inq_activity_cp;
 #define WRITE_INQ_ACTIVITY_CP_SIZE 4
 
 #define OCF_READ_AUTH_ENABLE		0x001F
@@ -989,26 +989,26 @@ typedef struct {
 typedef struct {
     uint8_t	status;
     uint8_t	dev_class[3];
-} __attribute__ ((packed)) read_class_of_dev_rp;
+} QEMU_PACKED read_class_of_dev_rp;
 #define READ_CLASS_OF_DEV_RP_SIZE 4 
 
 #define OCF_WRITE_CLASS_OF_DEV		0x0024
 typedef struct {
     uint8_t	dev_class[3];
-} __attribute__ ((packed)) write_class_of_dev_cp;
+} QEMU_PACKED write_class_of_dev_cp;
 #define WRITE_CLASS_OF_DEV_CP_SIZE 3
 
 #define OCF_READ_VOICE_SETTING		0x0025
 typedef struct {
     uint8_t	status;
     uint16_t	voice_setting;
-} __attribute__ ((packed)) read_voice_setting_rp;
+} QEMU_PACKED read_voice_setting_rp;
 #define READ_VOICE_SETTING_RP_SIZE 3
 
 #define OCF_WRITE_VOICE_SETTING		0x0026
 typedef struct {
     uint16_t	voice_setting;
-} __attribute__ ((packed)) write_voice_setting_cp;
+} QEMU_PACKED write_voice_setting_cp;
 #define WRITE_VOICE_SETTING_CP_SIZE 2
 
 #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT	0x0027
@@ -1027,13 +1027,13 @@ typedef struct {
 typedef struct {
     uint16_t	handle;
     uint8_t	type;
-} __attribute__ ((packed)) read_transmit_power_level_cp;
+} QEMU_PACKED read_transmit_power_level_cp;
 #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
     int8_t	level;
-} __attribute__ ((packed)) read_transmit_power_level_rp;
+} QEMU_PACKED read_transmit_power_level_rp;
 #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
 
 #define OCF_HOST_BUFFER_SIZE		0x0033
@@ -1042,7 +1042,7 @@ typedef struct {
     uint8_t	sco_mtu;
     uint16_t	acl_max_pkt;
     uint16_t	sco_max_pkt;
-} __attribute__ ((packed)) host_buffer_size_cp;
+} QEMU_PACKED host_buffer_size_cp;
 #define HOST_BUFFER_SIZE_CP_SIZE 7
 
 #define OCF_HOST_NUMBER_OF_COMPLETED_PACKETS	0x0035
@@ -1052,19 +1052,19 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint16_t	link_sup_to;
-} __attribute__ ((packed)) read_link_supervision_timeout_rp;
+} QEMU_PACKED read_link_supervision_timeout_rp;
 #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
 
 #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT	0x0037
 typedef struct {
     uint16_t	handle;
     uint16_t	link_sup_to;
-} __attribute__ ((packed)) write_link_supervision_timeout_cp;
+} QEMU_PACKED write_link_supervision_timeout_cp;
 #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
-} __attribute__ ((packed)) write_link_supervision_timeout_rp;
+} QEMU_PACKED write_link_supervision_timeout_rp;
 #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
 
 #define OCF_READ_NUM_SUPPORTED_IAC	0x0038
@@ -1075,14 +1075,14 @@ typedef struct {
     uint8_t	status;
     uint8_t	num_current_iac;
     uint8_t	lap[MAX_IAC_LAP][3];
-} __attribute__ ((packed)) read_current_iac_lap_rp;
+} QEMU_PACKED read_current_iac_lap_rp;
 #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
 
 #define OCF_WRITE_CURRENT_IAC_LAP	0x003A
 typedef struct {
     uint8_t	num_current_iac;
     uint8_t	lap[MAX_IAC_LAP][3];
-} __attribute__ ((packed)) write_current_iac_lap_cp;
+} QEMU_PACKED write_current_iac_lap_cp;
 #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
 
 #define OCF_READ_PAGE_SCAN_PERIOD_MODE	0x003B
@@ -1096,45 +1096,45 @@ typedef struct {
 #define OCF_SET_AFH_CLASSIFICATION	0x003F
 typedef struct {
     uint8_t	map[10];
-} __attribute__ ((packed)) set_afh_classification_cp;
+} QEMU_PACKED set_afh_classification_cp;
 #define SET_AFH_CLASSIFICATION_CP_SIZE 10
 typedef struct {
     uint8_t	status;
-} __attribute__ ((packed)) set_afh_classification_rp;
+} QEMU_PACKED set_afh_classification_rp;
 #define SET_AFH_CLASSIFICATION_RP_SIZE 1
 
 #define OCF_READ_INQUIRY_SCAN_TYPE	0x0042
 typedef struct {
     uint8_t	status;
     uint8_t	type;
-} __attribute__ ((packed)) read_inquiry_scan_type_rp;
+} QEMU_PACKED read_inquiry_scan_type_rp;
 #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
 
 #define OCF_WRITE_INQUIRY_SCAN_TYPE	0x0043
 typedef struct {
     uint8_t	type;
-} __attribute__ ((packed)) write_inquiry_scan_type_cp;
+} QEMU_PACKED write_inquiry_scan_type_cp;
 #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
 typedef struct {
     uint8_t	status;
-} __attribute__ ((packed)) write_inquiry_scan_type_rp;
+} QEMU_PACKED write_inquiry_scan_type_rp;
 #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
 
 #define OCF_READ_INQUIRY_MODE		0x0044
 typedef struct {
     uint8_t	status;
     uint8_t	mode;
-} __attribute__ ((packed)) read_inquiry_mode_rp;
+} QEMU_PACKED read_inquiry_mode_rp;
 #define READ_INQUIRY_MODE_RP_SIZE 2
 
 #define OCF_WRITE_INQUIRY_MODE		0x0045
 typedef struct {
     uint8_t	mode;
-} __attribute__ ((packed)) write_inquiry_mode_cp;
+} QEMU_PACKED write_inquiry_mode_cp;
 #define WRITE_INQUIRY_MODE_CP_SIZE 1
 typedef struct {
     uint8_t	status;
-} __attribute__ ((packed)) write_inquiry_mode_rp;
+} QEMU_PACKED write_inquiry_mode_rp;
 #define WRITE_INQUIRY_MODE_RP_SIZE 1
 
 #define OCF_READ_PAGE_SCAN_TYPE		0x0046
@@ -1145,17 +1145,17 @@ typedef struct {
 typedef struct {
     uint8_t	status;
     uint8_t	mode;
-} __attribute__ ((packed)) read_afh_mode_rp;
+} QEMU_PACKED read_afh_mode_rp;
 #define READ_AFH_MODE_RP_SIZE 2
 
 #define OCF_WRITE_AFH_MODE		0x0049
 typedef struct {
     uint8_t	mode;
-} __attribute__ ((packed)) write_afh_mode_cp;
+} QEMU_PACKED write_afh_mode_cp;
 #define WRITE_AFH_MODE_CP_SIZE 1
 typedef struct {
     uint8_t	status;
-} __attribute__ ((packed)) write_afh_mode_rp;
+} QEMU_PACKED write_afh_mode_rp;
 #define WRITE_AFH_MODE_RP_SIZE 1
 
 #define OCF_READ_EXT_INQUIRY_RESPONSE	0x0051
@@ -1163,18 +1163,18 @@ typedef struct {
     uint8_t	status;
     uint8_t	fec;
     uint8_t	data[240];
-} __attribute__ ((packed)) read_ext_inquiry_response_rp;
+} QEMU_PACKED read_ext_inquiry_response_rp;
 #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
 
 #define OCF_WRITE_EXT_INQUIRY_RESPONSE	0x0052
 typedef struct {
     uint8_t	fec;
     uint8_t	data[240];
-} __attribute__ ((packed)) write_ext_inquiry_response_cp;
+} QEMU_PACKED write_ext_inquiry_response_cp;
 #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
 typedef struct {
     uint8_t	status;
-} __attribute__ ((packed)) write_ext_inquiry_response_rp;
+} QEMU_PACKED write_ext_inquiry_response_rp;
 #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
 
 /* Informational Parameters */
@@ -1188,34 +1188,34 @@ typedef struct {
     uint8_t	lmp_ver;
     uint16_t	manufacturer;
     uint16_t	lmp_subver;
-} __attribute__ ((packed)) read_local_version_rp;
+} QEMU_PACKED read_local_version_rp;
 #define READ_LOCAL_VERSION_RP_SIZE 9
 
 #define OCF_READ_LOCAL_COMMANDS		0x0002
 typedef struct {
     uint8_t	status;
     uint8_t	commands[64];
-} __attribute__ ((packed)) read_local_commands_rp;
+} QEMU_PACKED read_local_commands_rp;
 #define READ_LOCAL_COMMANDS_RP_SIZE 65
 
 #define OCF_READ_LOCAL_FEATURES		0x0003
 typedef struct {
     uint8_t	status;
     uint8_t	features[8];
-} __attribute__ ((packed)) read_local_features_rp;
+} QEMU_PACKED read_local_features_rp;
 #define READ_LOCAL_FEATURES_RP_SIZE 9
 
 #define OCF_READ_LOCAL_EXT_FEATURES	0x0004
 typedef struct {
     uint8_t	page_num;
-} __attribute__ ((packed)) read_local_ext_features_cp;
+} QEMU_PACKED read_local_ext_features_cp;
 #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
 typedef struct {
     uint8_t	status;
     uint8_t	page_num;
     uint8_t	max_page_num;
     uint8_t	features[8];
-} __attribute__ ((packed)) read_local_ext_features_rp;
+} QEMU_PACKED read_local_ext_features_rp;
 #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
 
 #define OCF_READ_BUFFER_SIZE		0x0005
@@ -1225,21 +1225,21 @@ typedef struct {
     uint8_t	sco_mtu;
     uint16_t	acl_max_pkt;
     uint16_t	sco_max_pkt;
-} __attribute__ ((packed)) read_buffer_size_rp;
+} QEMU_PACKED read_buffer_size_rp;
 #define READ_BUFFER_SIZE_RP_SIZE 8
 
 #define OCF_READ_COUNTRY_CODE		0x0007
 typedef struct {
     uint8_t	status;
     uint8_t	country_code;
-} __attribute__ ((packed)) read_country_code_rp;
+} QEMU_PACKED read_country_code_rp;
 #define READ_COUNTRY_CODE_RP_SIZE 2
 
 #define OCF_READ_BD_ADDR		0x0009
 typedef struct {
     uint8_t	status;
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) read_bd_addr_rp;
+} QEMU_PACKED read_bd_addr_rp;
 #define READ_BD_ADDR_RP_SIZE 7
 
 /* Status params */
@@ -1250,27 +1250,27 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	counter;
-} __attribute__ ((packed)) read_failed_contact_counter_rp;
+} QEMU_PACKED read_failed_contact_counter_rp;
 #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
 
 #define OCF_RESET_FAILED_CONTACT_COUNTER	0x0002
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
-} __attribute__ ((packed)) reset_failed_contact_counter_rp;
+} QEMU_PACKED reset_failed_contact_counter_rp;
 #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
 
 #define OCF_READ_LINK_QUALITY		0x0003
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) read_link_quality_cp;
+} QEMU_PACKED read_link_quality_cp;
 #define READ_LINK_QUALITY_CP_SIZE 4
 
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	link_quality;
-} __attribute__ ((packed)) read_link_quality_rp;
+} QEMU_PACKED read_link_quality_rp;
 #define READ_LINK_QUALITY_RP_SIZE 4
 
 #define OCF_READ_RSSI			0x0005
@@ -1278,7 +1278,7 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     int8_t	rssi;
-} __attribute__ ((packed)) read_rssi_rp;
+} QEMU_PACKED read_rssi_rp;
 #define READ_RSSI_RP_SIZE 4
 
 #define OCF_READ_AFH_MAP		0x0006
@@ -1287,21 +1287,21 @@ typedef struct {
     uint16_t	handle;
     uint8_t	mode;
     uint8_t	map[10];
-} __attribute__ ((packed)) read_afh_map_rp;
+} QEMU_PACKED read_afh_map_rp;
 #define READ_AFH_MAP_RP_SIZE 14
 
 #define OCF_READ_CLOCK			0x0007
 typedef struct {
     uint16_t	handle;
     uint8_t	which_clock;
-} __attribute__ ((packed)) read_clock_cp;
+} QEMU_PACKED read_clock_cp;
 #define READ_CLOCK_CP_SIZE 3
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint32_t	clock;
     uint16_t	accuracy;
-} __attribute__ ((packed)) read_clock_rp;
+} QEMU_PACKED read_clock_rp;
 #define READ_CLOCK_RP_SIZE 9
 
 /* Testing commands */
@@ -1323,7 +1323,7 @@ typedef struct {
     uint8_t	pscan_mode;
     uint8_t	dev_class[3];
     uint16_t	clock_offset;
-} __attribute__ ((packed)) inquiry_info;
+} QEMU_PACKED inquiry_info;
 #define INQUIRY_INFO_SIZE 14
 
 #define EVT_CONN_COMPLETE		0x03
@@ -1333,7 +1333,7 @@ typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	link_type;
     uint8_t	encr_mode;
-} __attribute__ ((packed)) evt_conn_complete;
+} QEMU_PACKED evt_conn_complete;
 #define EVT_CONN_COMPLETE_SIZE 11
 
 #define EVT_CONN_REQUEST		0x04
@@ -1341,7 +1341,7 @@ typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	dev_class[3];
     uint8_t	link_type;
-} __attribute__ ((packed)) evt_conn_request;
+} QEMU_PACKED evt_conn_request;
 #define EVT_CONN_REQUEST_SIZE 10
 
 #define EVT_DISCONN_COMPLETE		0x05
@@ -1349,14 +1349,14 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	reason;
-} __attribute__ ((packed)) evt_disconn_complete;
+} QEMU_PACKED evt_disconn_complete;
 #define EVT_DISCONN_COMPLETE_SIZE 4
 
 #define EVT_AUTH_COMPLETE		0x06
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
-} __attribute__ ((packed)) evt_auth_complete;
+} QEMU_PACKED evt_auth_complete;
 #define EVT_AUTH_COMPLETE_SIZE 3
 
 #define EVT_REMOTE_NAME_REQ_COMPLETE	0x07
@@ -1364,7 +1364,7 @@ typedef struct {
     uint8_t	status;
     bdaddr_t	bdaddr;
     char	name[248];
-} __attribute__ ((packed)) evt_remote_name_req_complete;
+} QEMU_PACKED evt_remote_name_req_complete;
 #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
 
 #define EVT_ENCRYPT_CHANGE		0x08
@@ -1372,14 +1372,14 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	encrypt;
-} __attribute__ ((packed)) evt_encrypt_change;
+} QEMU_PACKED evt_encrypt_change;
 #define EVT_ENCRYPT_CHANGE_SIZE 5
 
 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE	0x09
 typedef struct {
     uint8_t	status;
     uint16_t	handle;
-}  __attribute__ ((packed)) evt_change_conn_link_key_complete;
+}  QEMU_PACKED evt_change_conn_link_key_complete;
 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
 
 #define EVT_MASTER_LINK_KEY_COMPLETE		0x0A
@@ -1387,7 +1387,7 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	key_flag;
-} __attribute__ ((packed)) evt_master_link_key_complete;
+} QEMU_PACKED evt_master_link_key_complete;
 #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
 
 #define EVT_READ_REMOTE_FEATURES_COMPLETE	0x0B
@@ -1395,7 +1395,7 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint8_t	features[8];
-} __attribute__ ((packed)) evt_read_remote_features_complete;
+} QEMU_PACKED evt_read_remote_features_complete;
 #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
 
 #define EVT_READ_REMOTE_VERSION_COMPLETE	0x0C
@@ -1405,7 +1405,7 @@ typedef struct {
     uint8_t	lmp_ver;
     uint16_t	manufacturer;
     uint16_t	lmp_subver;
-} __attribute__ ((packed)) evt_read_remote_version_complete;
+} QEMU_PACKED evt_read_remote_version_complete;
 #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
 
 #define EVT_QOS_SETUP_COMPLETE		0x0D
@@ -1414,14 +1414,14 @@ typedef struct {
     uint16_t	handle;
     uint8_t	flags;			/* Reserved */
     hci_qos	qos;
-} __attribute__ ((packed)) evt_qos_setup_complete;
+} QEMU_PACKED evt_qos_setup_complete;
 #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
 
 #define EVT_CMD_COMPLETE 		0x0E
 typedef struct {
     uint8_t	ncmd;
     uint16_t	opcode;
-} __attribute__ ((packed)) evt_cmd_complete;
+} QEMU_PACKED evt_cmd_complete;
 #define EVT_CMD_COMPLETE_SIZE 3
 
 #define EVT_CMD_STATUS 			0x0F
@@ -1429,19 +1429,19 @@ typedef struct {
     uint8_t	status;
     uint8_t	ncmd;
     uint16_t	opcode;
-} __attribute__ ((packed)) evt_cmd_status;
+} QEMU_PACKED evt_cmd_status;
 #define EVT_CMD_STATUS_SIZE 4
 
 #define EVT_HARDWARE_ERROR		0x10
 typedef struct {
     uint8_t	code;
-} __attribute__ ((packed)) evt_hardware_error;
+} QEMU_PACKED evt_hardware_error;
 #define EVT_HARDWARE_ERROR_SIZE 1
 
 #define EVT_FLUSH_OCCURRED		0x11
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) evt_flush_occurred;
+} QEMU_PACKED evt_flush_occurred;
 #define EVT_FLUSH_OCCURRED_SIZE 2
 
 #define EVT_ROLE_CHANGE			0x12
@@ -1449,7 +1449,7 @@ typedef struct {
     uint8_t	status;
     bdaddr_t	bdaddr;
     uint8_t	role;
-} __attribute__ ((packed)) evt_role_change;
+} QEMU_PACKED evt_role_change;
 #define EVT_ROLE_CHANGE_SIZE 8
 
 #define EVT_NUM_COMP_PKTS		0x13
@@ -1459,7 +1459,7 @@ typedef struct {
         uint16_t handle;
         uint16_t num_packets;
     } connection[0];
-} __attribute__ ((packed)) evt_num_comp_pkts;
+} QEMU_PACKED evt_num_comp_pkts;
 #define EVT_NUM_COMP_PKTS_SIZE(num_hndl) (1 + 4 * (num_hndl))
 
 #define EVT_MODE_CHANGE			0x14
@@ -1468,26 +1468,26 @@ typedef struct {
     uint16_t	handle;
     uint8_t	mode;
     uint16_t	interval;
-} __attribute__ ((packed)) evt_mode_change;
+} QEMU_PACKED evt_mode_change;
 #define EVT_MODE_CHANGE_SIZE 6
 
 #define EVT_RETURN_LINK_KEYS		0x15
 typedef struct {
     uint8_t	num_keys;
     /* variable length part */
-} __attribute__ ((packed)) evt_return_link_keys;
+} QEMU_PACKED evt_return_link_keys;
 #define EVT_RETURN_LINK_KEYS_SIZE 1
 
 #define EVT_PIN_CODE_REQ		0x16
 typedef struct {
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) evt_pin_code_req;
+} QEMU_PACKED evt_pin_code_req;
 #define EVT_PIN_CODE_REQ_SIZE 6
 
 #define EVT_LINK_KEY_REQ		0x17
 typedef struct {
     bdaddr_t	bdaddr;
-} __attribute__ ((packed)) evt_link_key_req;
+} QEMU_PACKED evt_link_key_req;
 #define EVT_LINK_KEY_REQ_SIZE 6
 
 #define EVT_LINK_KEY_NOTIFY		0x18
@@ -1495,7 +1495,7 @@ typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	link_key[16];
     uint8_t	key_type;
-} __attribute__ ((packed)) evt_link_key_notify;
+} QEMU_PACKED evt_link_key_notify;
 #define EVT_LINK_KEY_NOTIFY_SIZE 23
 
 #define EVT_LOOPBACK_COMMAND		0x19
@@ -1503,14 +1503,14 @@ typedef struct {
 #define EVT_DATA_BUFFER_OVERFLOW	0x1A
 typedef struct {
     uint8_t	link_type;
-} __attribute__ ((packed)) evt_data_buffer_overflow;
+} QEMU_PACKED evt_data_buffer_overflow;
 #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
 
 #define EVT_MAX_SLOTS_CHANGE		0x1B
 typedef struct {
     uint16_t	handle;
     uint8_t	max_slots;
-} __attribute__ ((packed)) evt_max_slots_change;
+} QEMU_PACKED evt_max_slots_change;
 #define EVT_MAX_SLOTS_CHANGE_SIZE 3
 
 #define EVT_READ_CLOCK_OFFSET_COMPLETE	0x1C
@@ -1518,7 +1518,7 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint16_t	clock_offset;
-} __attribute__ ((packed)) evt_read_clock_offset_complete;
+} QEMU_PACKED evt_read_clock_offset_complete;
 #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
 
 #define EVT_CONN_PTYPE_CHANGED		0x1D
@@ -1526,20 +1526,20 @@ typedef struct {
     uint8_t	status;
     uint16_t	handle;
     uint16_t	ptype;
-} __attribute__ ((packed)) evt_conn_ptype_changed;
+} QEMU_PACKED evt_conn_ptype_changed;
 #define EVT_CONN_PTYPE_CHANGED_SIZE 5
 
 #define EVT_QOS_VIOLATION		0x1E
 typedef struct {
     uint16_t	handle;
-} __attribute__ ((packed)) evt_qos_violation;
+} QEMU_PACKED evt_qos_violation;
 #define EVT_QOS_VIOLATION_SIZE 2
 
 #define EVT_PSCAN_REP_MODE_CHANGE	0x20
 typedef struct {
     bdaddr_t	bdaddr;
     uint8_t	pscan_rep_mode;
-} __attribute__ ((packed)) evt_pscan_rep_mode_change;
+} QEMU_PACKED evt_pscan_rep_mode_change;
 #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
 
 #define EVT_FLOW_SPEC_COMPLETE		0x21
@@ -1549,7 +1549,7 @@ typedef struct {
     uint8_t	flags;
     uint8_t	direction;
     hci_qos	qos;
-} __attribute__ ((packed)) evt_flow_spec_complete;
+} QEMU_PACKED evt_flow_spec_complete;
 #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
 
 #define EVT_INQUIRY_RESULT_WITH_RSSI	0x22
@@ -1561,7 +1561,7 @@ typedef struct {
     uint8_t	dev_class[3];
     uint16_t	clock_offset;
     int8_t	rssi;
-} __attribute__ ((packed)) inquiry_info_with_rssi;
+} QEMU_PACKED inquiry_info_with_rssi;
 #define INQUIRY_INFO_WITH_RSSI_SIZE 15
 typedef struct {
     uint8_t	num_responses;
@@ -1572,7 +1572,7 @@ typedef struct {
     uint8_t	dev_class[3];
     uint16_t	clock_offset;
     int8_t	rssi;
-} __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
+} QEMU_PACKED inquiry_info_with_rssi_and_pscan_mode;
 #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 16
 
 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE	0x23
@@ -1582,7 +1582,7 @@ typedef struct {
     uint8_t	page_num;
     uint8_t	max_page_num;
     uint8_t	features[8];
-} __attribute__ ((packed)) evt_read_remote_ext_features_complete;
+} QEMU_PACKED evt_read_remote_ext_features_complete;
 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
 
 #define EVT_SYNC_CONN_COMPLETE		0x2C
@@ -1596,7 +1596,7 @@ typedef struct {
     uint16_t	rx_pkt_len;
     uint16_t	tx_pkt_len;
     uint8_t	air_mode;
-} __attribute__ ((packed)) evt_sync_conn_complete;
+} QEMU_PACKED evt_sync_conn_complete;
 #define EVT_SYNC_CONN_COMPLETE_SIZE 17
 
 #define EVT_SYNC_CONN_CHANGED		0x2D
@@ -1607,7 +1607,7 @@ typedef struct {
     uint8_t	retrans_window;
     uint16_t	rx_pkt_len;
     uint16_t	tx_pkt_len;
-} __attribute__ ((packed)) evt_sync_conn_changed;
+} QEMU_PACKED evt_sync_conn_changed;
 #define EVT_SYNC_CONN_CHANGED_SIZE 9
 
 #define EVT_SNIFF_SUBRATE		0x2E
@@ -1618,7 +1618,7 @@ typedef struct {
     uint16_t	max_local_latency;
     uint16_t	min_remote_timeout;
     uint16_t	min_local_timeout;
-} __attribute__ ((packed)) evt_sniff_subrate;
+} QEMU_PACKED evt_sniff_subrate;
 #define EVT_SNIFF_SUBRATE_SIZE 11
 
 #define EVT_EXTENDED_INQUIRY_RESULT	0x2F
@@ -1630,7 +1630,7 @@ typedef struct {
     uint16_t	clock_offset;
     int8_t	rssi;
     uint8_t	data[240];
-} __attribute__ ((packed)) extended_inquiry_info;
+} QEMU_PACKED extended_inquiry_info;
 #define EXTENDED_INQUIRY_INFO_SIZE 254
 
 #define EVT_TESTING			0xFE
@@ -1656,22 +1656,22 @@ typedef struct {
 struct hci_command_hdr {
     uint16_t 	opcode;		/* OCF & OGF */
     uint8_t	plen;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 struct hci_event_hdr {
     uint8_t	evt;
     uint8_t	plen;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 struct hci_acl_hdr {
     uint16_t	handle;		/* Handle & Flags(PB, BC) */
     uint16_t	dlen;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 struct hci_sco_hdr {
     uint16_t	handle;
     uint8_t	dlen;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 /* L2CAP layer defines */
 
@@ -1718,25 +1718,25 @@ typedef struct {
     uint16_t	len;
     uint16_t	cid;
     uint8_t	data[0];
-} __attribute__ ((packed)) l2cap_hdr;
+} QEMU_PACKED l2cap_hdr;
 #define L2CAP_HDR_SIZE 4
 
 typedef struct {
     uint8_t	code;
     uint8_t	ident;
     uint16_t	len;
-} __attribute__ ((packed)) l2cap_cmd_hdr;
+} QEMU_PACKED l2cap_cmd_hdr;
 #define L2CAP_CMD_HDR_SIZE 4
 
 typedef struct {
     uint16_t	reason;
-} __attribute__ ((packed)) l2cap_cmd_rej;
+} QEMU_PACKED l2cap_cmd_rej;
 #define L2CAP_CMD_REJ_SIZE 2
 
 typedef struct {
     uint16_t	dcid;
     uint16_t	scid;
-} __attribute__ ((packed)) l2cap_cmd_rej_cid;
+} QEMU_PACKED l2cap_cmd_rej_cid;
 #define L2CAP_CMD_REJ_CID_SIZE 4
 
 /* reject reason */
@@ -1749,7 +1749,7 @@ enum bt_l2cap_rej_reason {
 typedef struct {
     uint16_t	psm;
     uint16_t	scid;
-} __attribute__ ((packed)) l2cap_conn_req;
+} QEMU_PACKED l2cap_conn_req;
 #define L2CAP_CONN_REQ_SIZE 4
 
 typedef struct {
@@ -1757,7 +1757,7 @@ typedef struct {
     uint16_t	scid;
     uint16_t	result;
     uint16_t	status;
-} __attribute__ ((packed)) l2cap_conn_rsp;
+} QEMU_PACKED l2cap_conn_rsp;
 #define L2CAP_CONN_RSP_SIZE 8
 
 /* connect result */
@@ -1780,7 +1780,7 @@ typedef struct {
     uint16_t	dcid;
     uint16_t	flags;
     uint8_t	data[0];
-} __attribute__ ((packed)) l2cap_conf_req;
+} QEMU_PACKED l2cap_conf_req;
 #define L2CAP_CONF_REQ_SIZE(datalen) (4 + (datalen))
 
 typedef struct {
@@ -1788,7 +1788,7 @@ typedef struct {
     uint16_t	flags;
     uint16_t	result;
     uint8_t	data[0];
-} __attribute__ ((packed)) l2cap_conf_rsp;
+} QEMU_PACKED l2cap_conf_rsp;
 #define L2CAP_CONF_RSP_SIZE(datalen) (6 + datalen)
 
 enum bt_l2cap_conf_res {
@@ -1802,7 +1802,7 @@ typedef struct {
     uint8_t	type;
     uint8_t	len;
     uint8_t	val[0];
-} __attribute__ ((packed)) l2cap_conf_opt;
+} QEMU_PACKED l2cap_conf_opt;
 #define L2CAP_CONF_OPT_SIZE 2
 
 enum bt_l2cap_conf_val {
@@ -1821,7 +1821,7 @@ typedef struct {
     uint32_t	peak_bandwidth;
     uint32_t	latency;
     uint32_t	delay_variation;
-} __attribute__ ((packed)) l2cap_conf_opt_qos;
+} QEMU_PACKED l2cap_conf_opt_qos;
 #define L2CAP_CONF_OPT_QOS_SIZE 22
 
 enum bt_l2cap_conf_opt_qos_st {
@@ -1841,25 +1841,25 @@ enum bt_l2cap_mode {
 typedef struct {
     uint16_t	dcid;
     uint16_t	scid;
-} __attribute__ ((packed)) l2cap_disconn_req;
+} QEMU_PACKED l2cap_disconn_req;
 #define L2CAP_DISCONN_REQ_SIZE 4
 
 typedef struct {
     uint16_t	dcid;
     uint16_t	scid;
-} __attribute__ ((packed)) l2cap_disconn_rsp;
+} QEMU_PACKED l2cap_disconn_rsp;
 #define L2CAP_DISCONN_RSP_SIZE 4
 
 typedef struct {
     uint16_t	type;
-} __attribute__ ((packed)) l2cap_info_req;
+} QEMU_PACKED l2cap_info_req;
 #define L2CAP_INFO_REQ_SIZE 2
 
 typedef struct {
     uint16_t	type;
     uint16_t	result;
     uint8_t	data[0];
-} __attribute__ ((packed)) l2cap_info_rsp;
+} QEMU_PACKED l2cap_info_rsp;
 #define L2CAP_INFO_RSP_SIZE 4
 
 /* info type */
diff --git a/hw/hpet_emul.h b/hw/hpet_emul.h
index 8bf312a..6128702 100644
--- a/hw/hpet_emul.h
+++ b/hw/hpet_emul.h
@@ -59,13 +59,13 @@ struct hpet_fw_entry
     uint64_t address;
     uint16_t min_tick;
     uint8_t page_prot;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 struct hpet_fw_config
 {
     uint8_t count;
     struct hpet_fw_entry hpet[8];
-} __attribute__ ((packed));
+} QEMU_PACKED;
 
 extern struct hpet_fw_config hpet_cfg;
 #endif
diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h
index 832539c..3c29d93 100644
--- a/hw/ide/ahci.h
+++ b/hw/ide/ahci.h
@@ -244,13 +244,13 @@ typedef struct AHCICmdHdr {
     uint32_t    status;
     uint64_t    tbl_addr;
     uint32_t    reserved[4];
-} __attribute__ ((packed)) AHCICmdHdr;
+} QEMU_PACKED AHCICmdHdr;
 
 typedef struct AHCI_SG {
     uint64_t    addr;
     uint32_t    reserved;
     uint32_t    flags_size;
-} __attribute__ ((packed)) AHCI_SG;
+} QEMU_PACKED AHCI_SG;
 
 typedef struct AHCIDevice AHCIDevice;
 
@@ -321,7 +321,7 @@ typedef struct NCQFrame {
     uint8_t reserved8;
     uint8_t reserved9;
     uint8_t reserved10;
-} __attribute__ ((packed)) NCQFrame;
+} QEMU_PACKED NCQFrame;
 
 void ahci_init(AHCIState *s, DeviceState *qdev, int ports);
 void ahci_uninit(AHCIState *s);
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index c552320..f38d289 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -557,13 +557,13 @@ static void cmd_get_event_status_notification(IDEState *s,
         uint8_t reserved3[2];
         uint16_t len;
         uint8_t control;
-    } __attribute__((packed)) *gesn_cdb;
+    } QEMU_PACKED *gesn_cdb;
 
     struct {
         uint16_t len;
         uint8_t notification_class;
         uint8_t supported_events;
-    } __attribute((packed)) *gesn_event_header;
+    } QEMU_PACKED *gesn_event_header;
 
     enum notification_class_request_type {
         NCR_RESERVED1 = 1 << 0,
diff --git a/hw/milkymist-tmu2.c b/hw/milkymist-tmu2.c
index 790cdcb..953d42f 100644
--- a/hw/milkymist-tmu2.c
+++ b/hw/milkymist-tmu2.c
@@ -73,7 +73,7 @@ enum {
 struct vertex {
     int x;
     int y;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 struct MilkymistTMU2State {
     SysBusDevice busdev;
diff --git a/hw/pc.c b/hw/pc.c
index 263fb1a..5bc845a 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -78,12 +78,12 @@ struct e820_entry {
     uint64_t address;
     uint64_t length;
     uint32_t type;
-} __attribute((__packed__, __aligned__(4)));
+} QEMU_PACKED __attribute((__aligned__(4)));
 
 struct e820_table {
     uint32_t count;
     struct e820_entry entry[E820_NR_ENTRIES];
-} __attribute((__packed__, __aligned__(4)));
+} QEMU_PACKED __attribute((__aligned__(4)));
 
 static struct e820_table e820_table;
 struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
diff --git a/hw/pxa2xx_lcd.c b/hw/pxa2xx_lcd.c
index 97f9015..b73290c 100644
--- a/hw/pxa2xx_lcd.c
+++ b/hw/pxa2xx_lcd.c
@@ -70,7 +70,7 @@ struct PXA2xxLCDState {
     int orientation;
 };
 
-typedef struct __attribute__ ((__packed__)) {
+typedef struct QEMU_PACKED {
     uint32_t fdaddr;
     uint32_t fsaddr;
     uint32_t fidr;
diff --git a/hw/r2d.c b/hw/r2d.c
index 96a7ff8..771f3d0 100644
--- a/hw/r2d.c
+++ b/hw/r2d.c
@@ -209,7 +209,7 @@ static void main_cpu_reset(void *opaque)
     env->pc = s->vector;
 }
 
-static struct __attribute__((__packed__))
+static struct QEMU_PACKED
 {
     int mount_root_rdonly;
     int ramdisk_flags;
diff --git a/hw/rc4030.c b/hw/rc4030.c
index a2a2099..33e1070 100644
--- a/hw/rc4030.c
+++ b/hw/rc4030.c
@@ -50,7 +50,7 @@ do { fprintf(stderr, "rc4030 ERROR: %s: " fmt, __func__ , ## __VA_ARGS__); } whi
 typedef struct dma_pagetable_entry {
     int32_t frame;
     int32_t owner;
-} __attribute__((packed)) dma_pagetable_entry;
+} QEMU_PACKED dma_pagetable_entry;
 
 #define DMA_PAGESIZE    4096
 #define DMA_REG_ENABLE  1
diff --git a/hw/smbios.c b/hw/smbios.c
index 8f2e965..c9ba43e 100644
--- a/hw/smbios.c
+++ b/hw/smbios.c
@@ -21,19 +21,19 @@
 struct smbios_header {
     uint16_t length;
     uint8_t type;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 struct smbios_field {
     struct smbios_header header;
     uint8_t type;
     uint16_t offset;
     uint8_t data[];
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 struct smbios_table {
     struct smbios_header header;
     uint8_t data[];
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 #define SMBIOS_FIELD_ENTRY 0
 #define SMBIOS_TABLE_ENTRY 1
diff --git a/hw/smbios.h b/hw/smbios.h
index 3a5169d..94e3641 100644
--- a/hw/smbios.h
+++ b/hw/smbios.h
@@ -26,7 +26,7 @@ struct smbios_structure_header {
     uint8_t type;
     uint8_t length;
     uint16_t handle;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 0 - BIOS Information */
 struct smbios_type_0 {
@@ -42,7 +42,7 @@ struct smbios_type_0 {
     uint8_t system_bios_minor_release;
     uint8_t embedded_controller_major_release;
     uint8_t embedded_controller_minor_release;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 1 - System Information */
 struct smbios_type_1 {
@@ -55,7 +55,7 @@ struct smbios_type_1 {
     uint8_t wake_up_type;
     uint8_t sku_number_str;
     uint8_t family_str;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 3 - System Enclosure (v2.3) */
 struct smbios_type_3 {
@@ -74,7 +74,7 @@ struct smbios_type_3 {
     uint8_t number_of_power_cords;
     uint8_t contained_element_count;
     // contained elements follow
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 4 - Processor Information (v2.0) */
 struct smbios_type_4 {
@@ -94,7 +94,7 @@ struct smbios_type_4 {
     uint16_t l1_cache_handle;
     uint16_t l2_cache_handle;
     uint16_t l3_cache_handle;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 16 - Physical Memory Array
  *   Associated with one type 17 (Memory Device).
@@ -107,7 +107,7 @@ struct smbios_type_16 {
     uint32_t maximum_capacity;
     uint16_t memory_error_information_handle;
     uint16_t number_of_memory_devices;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 /* SMBIOS type 17 - Memory Device
  *   Associated with one type 19
  */
@@ -124,7 +124,7 @@ struct smbios_type_17 {
     uint8_t bank_locator_str;
     uint8_t memory_type;
     uint16_t type_detail;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 19 - Memory Array Mapped Address */
 struct smbios_type_19 {
@@ -133,7 +133,7 @@ struct smbios_type_19 {
     uint32_t ending_address;
     uint16_t memory_array_handle;
     uint8_t partition_width;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 20 - Memory Device Mapped Address */
 struct smbios_type_20 {
@@ -145,18 +145,18 @@ struct smbios_type_20 {
     uint8_t partition_row_position;
     uint8_t interleave_position;
     uint8_t interleaved_data_depth;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 32 - System Boot Information */
 struct smbios_type_32 {
     struct smbios_structure_header header;
     uint8_t reserved[6];
     uint8_t boot_status;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 /* SMBIOS type 127 -- End-of-table */
 struct smbios_type_127 {
     struct smbios_structure_header header;
-} __attribute__((__packed__));
+} QEMU_PACKED;
 
 #endif /*QEMU_SMBIOS_H */
diff --git a/hw/srp.h b/hw/srp.h
index afcd135..3009bd5 100644
--- a/hw/srp.h
+++ b/hw/srp.h
@@ -106,7 +106,7 @@ struct srp_indirect_buf {
     struct srp_direct_buf    table_desc;
     uint32_t                 len;
     struct srp_direct_buf    desc_list[0];
-} __attribute__((packed));
+} QEMU_PACKED;
 
 enum {
     SRP_MULTICHAN_SINGLE = 0,
@@ -141,7 +141,7 @@ struct srp_login_rsp {
     uint16_t   buf_fmt;
     uint8_t    rsp_flags;
     uint8_t    reserved2[25];
-} __attribute__((packed));
+} QEMU_PACKED;
 
 struct srp_login_rej {
     uint8_t    opcode;
@@ -177,7 +177,7 @@ struct srp_tsk_mgmt {
     uint8_t    reserved1[6];
     uint64_t   tag;
     uint8_t    reserved2[4];
-    uint64_t   lun __attribute__((packed));
+    uint64_t   lun QEMU_PACKED;
     uint8_t    reserved3[2];
     uint8_t    tsk_mgmt_func;
     uint8_t    reserved4;
@@ -198,7 +198,7 @@ struct srp_cmd {
     uint8_t    data_in_desc_cnt;
     uint64_t   tag;
     uint8_t    reserved2[4];
-    uint64_t   lun __attribute__((packed));
+    uint64_t   lun QEMU_PACKED;
     uint8_t    reserved3;
     uint8_t    task_attr;
     uint8_t    reserved4;
@@ -235,6 +235,6 @@ struct srp_rsp {
     uint32_t   sense_data_len;
     uint32_t   resp_data_len;
     uint8_t    data[0];
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #endif /* SCSI_SRP_H */
diff --git a/hw/usb-ccid.c b/hw/usb-ccid.c
index 66aeb21..c2f9241 100644
--- a/hw/usb-ccid.c
+++ b/hw/usb-ccid.c
@@ -176,56 +176,56 @@ enum {
      */
 };
 
-typedef struct __attribute__ ((__packed__)) CCID_Header {
+typedef struct QEMU_PACKED CCID_Header {
     uint8_t     bMessageType;
     uint32_t    dwLength;
     uint8_t     bSlot;
     uint8_t     bSeq;
 } CCID_Header;
 
-typedef struct __attribute__ ((__packed__)) CCID_BULK_IN {
+typedef struct QEMU_PACKED CCID_BULK_IN {
     CCID_Header hdr;
     uint8_t     bStatus;        /* Only used in BULK_IN */
     uint8_t     bError;         /* Only used in BULK_IN */
 } CCID_BULK_IN;
 
-typedef struct __attribute__ ((__packed__)) CCID_SlotStatus {
+typedef struct QEMU_PACKED CCID_SlotStatus {
     CCID_BULK_IN b;
     uint8_t     bClockStatus;
 } CCID_SlotStatus;
 
-typedef struct __attribute__ ((__packed__)) CCID_Parameter {
+typedef struct QEMU_PACKED CCID_Parameter {
     CCID_BULK_IN b;
     uint8_t     bProtocolNum;
     uint8_t     abProtocolDataStructure[0];
 } CCID_Parameter;
 
-typedef struct __attribute__ ((__packed__)) CCID_DataBlock {
+typedef struct QEMU_PACKED CCID_DataBlock {
     CCID_BULK_IN b;
     uint8_t      bChainParameter;
     uint8_t      abData[0];
 } CCID_DataBlock;
 
 /* 6.1.4 PC_to_RDR_XfrBlock */
-typedef struct __attribute__ ((__packed__)) CCID_XferBlock {
+typedef struct QEMU_PACKED CCID_XferBlock {
     CCID_Header  hdr;
     uint8_t      bBWI; /* Block Waiting Timeout */
     uint16_t     wLevelParameter; /* XXX currently unused */
     uint8_t      abData[0];
 } CCID_XferBlock;
 
-typedef struct __attribute__ ((__packed__)) CCID_IccPowerOn {
+typedef struct QEMU_PACKED CCID_IccPowerOn {
     CCID_Header hdr;
     uint8_t     bPowerSelect;
     uint16_t    abRFU;
 } CCID_IccPowerOn;
 
-typedef struct __attribute__ ((__packed__)) CCID_IccPowerOff {
+typedef struct QEMU_PACKED CCID_IccPowerOff {
     CCID_Header hdr;
     uint16_t    abRFU;
 } CCID_IccPowerOff;
 
-typedef struct __attribute__ ((__packed__)) CCID_SetParameters {
+typedef struct QEMU_PACKED CCID_SetParameters {
     CCID_Header hdr;
     uint8_t     bProtocolNum;
     uint16_t   abRFU;
diff --git a/hw/virtio-balloon.h b/hw/virtio-balloon.h
index e20cf6b..73300dd 100644
--- a/hw/virtio-balloon.h
+++ b/hw/virtio-balloon.h
@@ -50,6 +50,6 @@ struct virtio_balloon_config
 typedef struct VirtIOBalloonStat {
     uint16_t tag;
     uint64_t val;
-} __attribute__((packed)) VirtIOBalloonStat;
+} QEMU_PACKED VirtIOBalloonStat;
 
 #endif
diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h
index 5645d2b..244dce4 100644
--- a/hw/virtio-blk.h
+++ b/hw/virtio-blk.h
@@ -49,7 +49,7 @@ struct virtio_blk_config
     uint8_t alignment_offset;
     uint16_t min_io_size;
     uint32_t opt_io_size;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /* These two define direction. */
 #define VIRTIO_BLK_T_IN         0
diff --git a/hw/virtio-net.h b/hw/virtio-net.h
index 8af9a1c..4468741 100644
--- a/hw/virtio-net.h
+++ b/hw/virtio-net.h
@@ -72,7 +72,7 @@ struct virtio_net_config
     uint8_t mac[ETH_ALEN];
     /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
     uint16_t status;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /* This is the first element of the scatter-gather list.  If you don't
  * specify GSO or CSUM features, you can simply ignore the header. */
diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h
index 36e9d22..ab13803 100644
--- a/hw/virtio-serial.h
+++ b/hw/virtio-serial.h
@@ -37,7 +37,7 @@ struct virtio_console_config {
     uint16_t rows;
 
     uint32_t max_nr_ports;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 struct virtio_console_control {
     uint32_t id;		/* Port number */
diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c
index 52d2d26..aa68237 100644
--- a/hw/vmware_vga.c
+++ b/hw/vmware_vga.c
@@ -70,7 +70,7 @@ struct vmsvga_state_s {
 
     union {
         uint32_t *fifo;
-        struct __attribute__((__packed__)) {
+        struct QEMU_PACKED {
             uint32_t min;
             uint32_t max;
             uint32_t next_cmd;
diff --git a/hw/zaurus.c b/hw/zaurus.c
index c24aeb5..0eeacf7 100644
--- a/hw/zaurus.c
+++ b/hw/zaurus.c
@@ -246,7 +246,7 @@ device_init(scoop_register);
 
 #define MAGIC_CHG(a, b, c, d)	((d << 24) | (c << 16) | (b << 8) | a)
 
-static struct __attribute__ ((__packed__)) sl_param_info {
+static struct QEMU_PACKED sl_param_info {
     uint32_t comadj_keyword;
     int32_t comadj;
 
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index a117407..15c44d4 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -1120,7 +1120,7 @@ struct target_stat64 {
 	abi_ulong	__pad7;		/* will be high 32 bits of ctime someday */
 
 	unsigned long long	st_ino;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #ifdef TARGET_ARM
 struct target_eabi_stat64 {
@@ -1151,7 +1151,7 @@ struct target_eabi_stat64 {
         abi_ulong    target_st_ctime_nsec;
 
         unsigned long long st_ino;
-} __attribute__ ((packed));
+} QEMU_PACKED;
 #endif
 
 #elif defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
@@ -1294,7 +1294,7 @@ struct target_stat {
 #endif
 };
 
-struct __attribute__((__packed__)) target_stat64 {
+struct QEMU_PACKED target_stat64 {
 	unsigned long long st_dev;
         unsigned long long st_ino;
 	unsigned int st_mode;
@@ -1341,7 +1341,7 @@ struct target_stat {
 };
 
 /* FIXME: Microblaze no-mmu user-space has a difference stat64 layout...  */
-struct __attribute__((__packed__)) target_stat64 {
+struct QEMU_PACKED target_stat64 {
 	uint64_t st_dev;
 #define TARGET_STAT64_HAS_BROKEN_ST_INO 1
 	uint32_t pad0;
@@ -1428,7 +1428,7 @@ struct target_stat64 {
 	abi_ulong	target_st_ctime_nsec;
 
 	unsigned long long	st_ino;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #elif defined(TARGET_ABI_MIPSN64)
 
@@ -1680,7 +1680,7 @@ struct target_stat {
 /* This matches struct stat64 in glibc2.1, hence the absolutely
  * insane amounts of padding around dev_t's.
  */
-struct __attribute__((__packed__)) target_stat64 {
+struct QEMU_PACKED target_stat64 {
 	unsigned long long	st_dev;
 	unsigned char	__pad0[4];
 
@@ -2095,7 +2095,7 @@ struct target_flock64 {
 	unsigned long long l_start;
 	unsigned long long l_len;
 	int  l_pid;
-}__attribute__((packed));
+} QEMU_PACKED;
 
 #ifdef TARGET_ARM
 struct target_eabi_flock64 {
@@ -2105,7 +2105,7 @@ struct target_eabi_flock64 {
 	unsigned long long l_start;
 	unsigned long long l_len;
 	int  l_pid;
-}__attribute__((packed));
+} QEMU_PACKED;
 #endif
 
 /* soundcard defines */
diff --git a/m68k-semi.c b/m68k-semi.c
index 7fde10e..bab01ee 100644
--- a/m68k-semi.c
+++ b/m68k-semi.c
@@ -70,12 +70,12 @@ struct m68k_gdb_stat {
   gdb_time_t  gdb_st_atime;   /* time of last access */
   gdb_time_t  gdb_st_mtime;   /* time of last modification */
   gdb_time_t  gdb_st_ctime;   /* time of last change */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 struct gdb_timeval {
   gdb_time_t tv_sec;  /* second */
   uint64_t tv_usec;   /* microsecond */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define GDB_O_RDONLY   0x0
 #define GDB_O_WRONLY   0x1
diff --git a/nbd.h b/nbd.h
index b38d0d0..96f77fe 100644
--- a/nbd.h
+++ b/nbd.h
@@ -31,13 +31,13 @@ struct nbd_request {
     uint64_t handle;
     uint64_t from;
     uint32_t len;
-} __attribute__ ((__packed__));
+} QEMU_PACKED;
 
 struct nbd_reply {
     uint32_t magic;
     uint32_t error;
     uint64_t handle;
-} __attribute__ ((__packed__));
+} QEMU_PACKED;
 
 enum {
     NBD_CMD_READ = 0,
diff --git a/slirp/ip.h b/slirp/ip.h
index 72dbe9a..88c903f 100644
--- a/slirp/ip.h
+++ b/slirp/ip.h
@@ -91,7 +91,7 @@ struct ip {
 	uint8_t ip_p;			/* protocol */
 	uint16_t	ip_sum;			/* checksum */
 	struct	in_addr ip_src,ip_dst;	/* source and dest address */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define	IP_MAXPACKET	65535		/* maximum packet size */
 
@@ -153,7 +153,7 @@ struct	ip_timestamp {
 			n_long ipt_time;
 		} ipt_ta[1];
 	} ipt_timestamp;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /* flag bits for ipt_flg */
 #define	IPOPT_TS_TSONLY		0		/* timestamps only */
@@ -183,11 +183,11 @@ struct	ip_timestamp {
 struct mbuf_ptr {
 	struct mbuf *mptr;
 	uint32_t dummy;
-} __attribute__((packed));
+} QEMU_PACKED;
 #else
 struct mbuf_ptr {
 	struct mbuf *mptr;
-} __attribute__((packed));
+} QEMU_PACKED;
 #endif
 struct qlink {
 	void *next, *prev;
@@ -203,7 +203,7 @@ struct ipovly {
 	uint16_t	ih_len;			/* protocol length */
 	struct	in_addr ih_src;		/* source internet address */
 	struct	in_addr ih_dst;		/* destination internet address */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /*
  * Ip reassembly queue structure.  Each fragment
@@ -219,7 +219,7 @@ struct ipq {
 	uint8_t	ipq_p;			/* protocol of this fragment */
 	uint16_t	ipq_id;			/* sequence id for reassembly */
 	struct	in_addr ipq_src,ipq_dst;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 /*
  * Ip header, when holding a fragment.
@@ -229,7 +229,7 @@ struct ipq {
 struct	ipasfrag {
 	struct qlink ipf_link;
 	struct ip ipf_ip;
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define ipf_off      ipf_ip.ip_off
 #define ipf_tos      ipf_ip.ip_tos
@@ -248,6 +248,6 @@ struct	ipasfrag {
 struct ipoption {
 	struct	in_addr ipopt_dst;	/* first-hop dst if source routed */
 	int8_t	ipopt_list[MAX_IPOPTLEN];	/* options proper */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #endif
diff --git a/slirp/slirp.h b/slirp/slirp.h
index dcf99d5..28a5c03 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -199,7 +199,7 @@ struct arphdr {
     uint32_t      ar_sip;           /* sender IP address       */
     unsigned char ar_tha[ETH_ALEN]; /* target hardware address */
     uint32_t      ar_tip;           /* target IP address       */
-} __attribute__((packed));
+} QEMU_PACKED;
 
 #define ARP_TABLE_SIZE 16
 
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 1d9b20c..70ef74b 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -348,7 +348,7 @@ int kvm_arch_init_vcpu(CPUState *env)
     struct {
         struct kvm_cpuid2 cpuid;
         struct kvm_cpuid_entry2 entries[100];
-    } __attribute__((packed)) cpuid_data;
+    } QEMU_PACKED cpuid_data;
     KVMState *s = env->kvm_state;
     uint32_t limit, i, j, cpuid_i;
     uint32_t unused;
diff --git a/target-i386/svm.h b/target-i386/svm.h
index a224aea..04193ed 100644
--- a/target-i386/svm.h
+++ b/target-i386/svm.h
@@ -130,7 +130,7 @@
 
 #define SVM_CR0_SELECTIVE_MASK (1 << 3 | 1) /* TS and MP */
 
-struct __attribute__ ((__packed__)) vmcb_control_area {
+struct QEMU_PACKED vmcb_control_area {
 	uint16_t intercept_cr_read;
 	uint16_t intercept_cr_write;
 	uint16_t intercept_dr_read;
@@ -162,14 +162,14 @@ struct __attribute__ ((__packed__)) vmcb_control_area {
 	uint8_t reserved_5[832];
 };
 
-struct __attribute__ ((__packed__)) vmcb_seg {
+struct QEMU_PACKED vmcb_seg {
 	uint16_t selector;
 	uint16_t attrib;
 	uint32_t limit;
 	uint64_t base;
 };
 
-struct __attribute__ ((__packed__)) vmcb_save_area {
+struct QEMU_PACKED vmcb_save_area {
 	struct vmcb_seg es;
 	struct vmcb_seg cs;
 	struct vmcb_seg ss;
@@ -214,7 +214,7 @@ struct __attribute__ ((__packed__)) vmcb_save_area {
 	uint64_t last_excp_to;
 };
 
-struct __attribute__ ((__packed__)) vmcb {
+struct QEMU_PACKED vmcb {
 	struct vmcb_control_area control;
 	struct vmcb_save_area save;
 };
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index f8f0c82..e192b50 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -698,7 +698,7 @@ typedef struct LowCore
     /* align to the top of the prefix area */
 
     uint8_t         pad18[0x2000-0x1400];      /* 0x1400 */
-} __attribute__((packed)) LowCore;
+} QEMU_PACKED LowCore;
 
 /* STSI */
 #define STSI_LEVEL_MASK         0x00000000f0000000ULL
diff --git a/tests/test-i386.c b/tests/test-i386.c
index 56ff110..9cb5b51 100644
--- a/tests/test-i386.c
+++ b/tests/test-i386.c
@@ -773,7 +773,7 @@ void test_fops(double a, double b)
 
 void fpu_clear_exceptions(void)
 {
-    struct __attribute__((packed)) {
+    struct QEMU_PACKED {
         uint16_t fpuc;
         uint16_t dummy1;
         uint16_t fpus;
@@ -924,7 +924,7 @@ void test_fbcd(double a)
 
 void test_fenv(void)
 {
-    struct __attribute__((packed)) {
+    struct QEMU_PACKED {
         uint16_t fpuc;
         uint16_t dummy1;
         uint16_t fpus;
@@ -934,7 +934,7 @@ void test_fenv(void)
         uint32_t ignored[4];
         long double fpregs[8];
     } float_env32;
-    struct __attribute__((packed)) {
+    struct QEMU_PACKED {
         uint16_t fpuc;
         uint16_t fpus;
         uint16_t fptag;
@@ -1279,7 +1279,7 @@ void test_segs(void)
     struct {
         uint32_t offset;
         uint16_t seg;
-    } __attribute__((packed)) segoff;
+    } QEMU_PACKED segoff;
 
     ldt.entry_number = 1;
     ldt.base_addr = (unsigned long)&seg_data1;
@@ -1441,7 +1441,7 @@ void test_misc(void)
         /* XXX: see if Intel Core2 and AMD64 behavior really
            differ. Here we implemented the Intel way which is not
            compatible yet with QEMU. */
-        static struct __attribute__((packed)) {
+        static struct QEMU_PACKED {
             uint64_t offset;
             uint16_t seg;
         } desc;
-- 
1.7.2.5

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED
  2011-08-31 10:37                 ` [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED Stefan Weil
@ 2011-09-03 21:12                   ` Blue Swirl
  0 siblings, 0 replies; 32+ messages in thread
From: Blue Swirl @ 2011-09-03 21:12 UTC (permalink / raw)
  To: Stefan Weil; +Cc: QEMU Developers

On Wed, Aug 31, 2011 at 10:37 AM, Stefan Weil <weil@mail.berlios.de> wrote:
> The new series adds macro QEMU_PACKED and converts most
> code locations mechanically (script) to use this macro.
>
> See log message of patch 2/2 for the few exceptions.
>
> [PATCH 1/2] Add new macro QEMU_PACKED for packed C structures
> [PATCH 2/2] Use new macro QEMU_PACKED for packed structures

Thanks, applied both.

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2011-09-03 21:12 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-28 20:43 [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 1/7] Add new macro QEMU_PACKED for packed C structures Stefan Weil
2011-08-28 20:47   ` Andreas Färber
2011-08-29  5:12     ` Stefan Weil
2011-08-30 17:57   ` Blue Swirl
2011-08-30 18:29     ` Paolo Bonzini
2011-08-30 20:17       ` Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 2/7] block/vvfat: Fix packing for w32 Stefan Weil
2011-08-29  8:09   ` Kevin Wolf
2011-08-28 20:43 ` [Qemu-devel] [PATCH 3/7] acpi: " Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 4/7] hpet: " Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 5/7] usb: " Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 6/7] virtio: " Stefan Weil
2011-08-28 20:43 ` [Qemu-devel] [PATCH 7/7] slirp: " Stefan Weil
2011-08-29 10:12   ` Jan Kiszka
2011-08-29 18:22     ` Stefan Weil
2011-08-29 21:15       ` Jan Kiszka
2011-08-28 21:43 ` [Qemu-devel] [PATCH 0/7] Fix packing for MinGW with -mms-bitfields Blue Swirl
2011-08-29  5:01   ` Stefan Weil
2011-08-29  7:19     ` Gerd Hoffmann
2011-08-29  8:34     ` TeLeMan
2011-08-29  9:39       ` Alexander Graf
2011-08-29 19:55       ` Stefan Weil
2011-08-30  7:44         ` Kevin Wolf
2011-08-30 17:25           ` Stefan Weil
2011-08-30 18:29             ` Alexander Graf
2011-08-30 19:57               ` Blue Swirl
2011-08-31  7:40               ` Kevin Wolf
2011-08-31 10:37                 ` [Qemu-devel] [PATCH 0/2] Fix packing for MinGW with new macro QEMU_PACKED Stefan Weil
2011-09-03 21:12                   ` Blue Swirl
2011-08-31 10:38                 ` [Qemu-devel] [PATCH 1/2] Add new macro QEMU_PACKED for packed C structures Stefan Weil
2011-08-31 10:38                 ` [Qemu-devel] [PATCH 2/2] Use new macro QEMU_PACKED for packed structures Stefan Weil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.