From 37ae0426420a2f682cc96ee457a8cae9c0db27d3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 3 Jun 2020 11:18:23 +0100 Subject: [PATCH] conf: force 8 byte alignment for virObjectEvent MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Daniel P. Berrangé --- src/conf/object_event_private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conf/object_event_private.h b/src/conf/object_event_private.h index b31441c53a..126464a9a5 100644 --- a/src/conf/object_event_private.h +++ b/src/conf/object_event_private.h @@ -42,7 +42,7 @@ typedef void virConnectObjectEventGenericCallback cb, void *cbopaque); -struct _virObjectEvent { +struct __attribute__((aligned(4))) _virObjectEvent { virObject parent; int eventID; virObjectMeta meta; -- 2.39.5