* [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.