]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: force 8 byte alignment for virObjectEvent
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 3 Jun 2020 10:18:23 +0000 (11:18 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 4 Jun 2020 08:55:01 +0000 (09:55 +0100)
We need to be able to cast from virObjectEventPtr to one of
its many subclasses. Some of these subclasses have 8 byte
alignment on 32-bit platforms, but virObjectEventPtr only
has 4 byte alignment.

Previously the virObject base class had 8 byte alignment
but this dropped to 4 byte when converted to inherit from
GObject. This introduces cast alignment warnings on 32-bit:

../../src/conf/domain_event.c: In function 'virDomainEventDispatchDefaultFunc':
../../src/conf/domain_event.c:1656:30: error: cast increases required alignment of target type [-Werror=cast-align]
 1656 |             rtcChangeEvent = (virDomainEventRTCChangePtr)event;
      |                              ^
../../src/conf/domain_event.c:1785:34: error: cast increases required alignment of target type [-Werror=cast-align]
 1785 |             balloonChangeEvent = (virDomainEventBalloonChangePtr)event;
      |                                  ^
../../src/conf/domain_event.c:1896:35: error: cast increases required alignment of target type [-Werror=cast-align]
 1896 |             blockThresholdEvent = (virDomainEventBlockThresholdPtr)event;
      |                                   ^
../../src/conf/domain_event.c: In function 'virDomainQemuMonitorEventDispatchFunc':
../../src/conf/domain_event.c:1974:24: error: cast increases required alignment of target type [-Werror=cast-align]
 1974 |     qemuMonitorEvent = (virDomainQemuMonitorEventPtr)event;
      |                        ^
../../src/conf/domain_event.c: In function 'virDomainQemuMonitorEventFilter':
../../src/conf/domain_event.c:2179:20: error: cast increases required alignment of target type [-Werror=cast-align]
 2179 |     monitorEvent = (virDomainQemuMonitorEventPtr) event;
      |                    ^

Forcing 8-byte alignment on virObjectEventPtr removes the
alignment increase during casts to subclasses.

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/object_event_private.h

index b31441c53a1d82d8ce2f6c1c10f55a6b15c9fbe7..126464a9a55343374b46c05a53c40c37e7cc026d 100644 (file)
@@ -42,7 +42,7 @@ typedef void
                               virConnectObjectEventGenericCallback cb,
                               void *cbopaque);
 
-struct _virObjectEvent {
+struct  __attribute__((aligned(4))) _virObjectEvent {
     virObject parent;
     int eventID;
     virObjectMeta meta;