tstDeviceStructSize.cpp revision 890b5e4f0265eb78919f6a41d1ccaa89eba51768
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/* $Id$ */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/** @file
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * tstDeviceStructSize - testcase for check structure sizes/alignment
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * and to verify that HC and GC uses the same
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * representation of the structures.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync *
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * available from http://www.virtualbox.org. This file is free software;
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * additional information or have any questions.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/*******************************************************************************
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync* Header Files *
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync*******************************************************************************/
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#include <VBox/types.h>
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#include <VBox/x86.h>
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define VBOX_DEVICE_STRUCT_TESTCASE
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Bus/DevPCI.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Graphics/DevVGA.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Input/DevPS2.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Network/DevPCNet.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../PC/DevACPI.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../PC/DevPIC.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../PC/DevPit-i8254.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../PC/DevRTC.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../PC/DevAPIC.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Storage/DevATA.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#ifdef VBOX_WITH_USB
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync# undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync# include "../USB/DevOHCI.cpp"
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync# include "../USB/DevEHCI.cpp"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#endif
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#undef LOG_GROUP
890b5e4f0265eb78919f6a41d1ccaa89eba51768vboxsync#include "../VMMDev/VMMDev.cpp"
d3b1e232c566c55799a7bfc83f66b045c4d82657vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Parallel/DevParallel.cpp"
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync#include "../Serial/DevSerial.cpp"
d645696bf70e804f18f661a9b1b8b79c32a1b331vboxsync#ifdef VBOX_WITH_AHCI
dccbbd8ec5b45b567312112e7edd5c7130d56262vboxsync# undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync# include "../Storage/DevAHCI.cpp"
d645696bf70e804f18f661a9b1b8b79c32a1b331vboxsync#endif
4e90aa80e1abead7b4b263d03d46a138f289f6a5vboxsync#ifdef VBOX_WITH_E1000
dccbbd8ec5b45b567312112e7edd5c7130d56262vboxsync# undef LOG_GROUP
120ee2736ed70b5ce8b0b4dd73cc4f8b4b9416c1vboxsync# include "../Network/DevE1000.cpp"
4e90aa80e1abead7b4b263d03d46a138f289f6a5vboxsync#endif
3f72ab7ee9d1539bfa4ed19972430194627b9273vboxsync#ifdef VBOX_WITH_BUSLOGIC
3f72ab7ee9d1539bfa4ed19972430194627b9273vboxsync# undef LOG_GROUP
3f72ab7ee9d1539bfa4ed19972430194627b9273vboxsync# include "../Storage/DevBusLogic.cpp"
3f72ab7ee9d1539bfa4ed19972430194627b9273vboxsync#endif
a99c525910b735565952ae4e13e8bed173255d40vboxsync#ifdef VBOX_WITH_LSILOGIC
a99c525910b735565952ae4e13e8bed173255d40vboxsync# undef LOG_GROUP
a99c525910b735565952ae4e13e8bed173255d40vboxsync# include "../Storage/DevLsiLogicSCSI.cpp"
a99c525910b735565952ae4e13e8bed173255d40vboxsync#endif
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#ifdef VBOX_WITH_HPET
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# undef LOG_GROUP
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# include "../PC/DevHPET.cpp"
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#endif
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#ifdef VBOX_WITH_LPC
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# undef LOG_GROUP
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# include "../PC/DevLPC.cpp"
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#endif
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#ifdef VBOX_WITH_SMC
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# undef LOG_GROUP
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync# include "../PC/DevSMC.cpp"
e8f2f4b92eb0cc9a8c9861542241d2806e8f4849vboxsync#endif
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#include <stdio.h>
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/*******************************************************************************
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync* Defined Constants And Macros *
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync*******************************************************************************/
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks the offset of a data member.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * @param type Type.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * @param off Correct offset.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * @param m Member name.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_OFF(type, off, m) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (off != RT_OFFSETOF(type, m)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("%#010x %s Off by %d!! (off=%#x)\n", RT_OFFSETOF(type, m), #type "." #m, off - RT_OFFSETOF(type, m), off); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /*else */ \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /*printf("%#08x %s\n", RT_OFFSETOF(type, m), #m);*/ \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks the size of type.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * @param type Type.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * @param size Correct size.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_SIZE(type, size) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (size != sizeof(type)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("sizeof(%s): %#x (%d) Off by %d!!\n", #type, (int)sizeof(type), (int)sizeof(type), (int)(sizeof(type) - size)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync else \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("sizeof(%s): %#x (%d)\n", #type, (int)sizeof(type), (int)sizeof(type)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks the alignment of a struct member.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_MEMBER_ALIGNMENT(strct, member, align) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if ( RT_OFFSETOF(strct, member) & ((align) - 1) ) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("%s::%s offset=%d expected alignment %d, meaning %d off\n", #strct, #member, RT_OFFSETOF(strct, member), \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync align, RT_OFFSETOF(strct, member) & (align - 1)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks that the size of a type is aligned correctly.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_SIZE_ALIGNMENT(type, align) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (RT_ALIGN_Z(sizeof(type), (align)) != sizeof(type)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("%s size=%#x, align=%#x %#x bytes off\n", #type, (int)sizeof(type), (align), (int)RT_ALIGN_Z(sizeof(type), align) - (int)sizeof(type)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks that a internal struct padding is big enough.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_PADDING(strct, member) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync strct *p; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (sizeof(p->member.s) > sizeof(p->member.padding)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("padding of %s::%s is too small, padding=%d struct=%d correct=%d\n", #strct, #member, \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync (int)sizeof(p->member.padding), (int)sizeof(p->member.s), (int)RT_ALIGN_Z(sizeof(p->member.s), 32)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks that a internal struct padding is big enough.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_PADDING2(strct) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync strct *p; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (sizeof(p->s) > sizeof(p->padding)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("padding of %s is too small, padding=%d struct=%d correct=%d\n", #strct, \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync (int)sizeof(p->padding), (int)sizeof(p->s), (int)RT_ALIGN_Z(sizeof(p->s), 32)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Checks that a internal struct padding is big enough.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define CHECK_PADDING3(strct, member, pad_member) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync strct *p; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (sizeof(p->member) > sizeof(p->pad_member)) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("padding of %s::%s is too small, padding=%d struct=%d\n", #strct, #member, \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync (int)sizeof(p->pad_member), (int)sizeof(p->member)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync rc++; \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync/**
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Prints the offset of a struct member.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#define PRINT_OFFSET(strct, member) \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync do \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync { \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("%s::%s offset %d sizeof %d\n", #strct, #member, (int)RT_OFFSETOF(strct, member), (int)RT_SIZEOFMEMB(strct, member)); \
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync } while (0)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsyncint main()
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync{
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync int rc = 0;
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("tstDeviceStructSize: TESTING\n");
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /* Assert sanity */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(uint128_t, 128/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(int128_t, 128/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(uint64_t, 64/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(int64_t, 64/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(uint32_t, 32/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(int32_t, 32/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(uint16_t, 16/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(int16_t, 16/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(uint8_t, 8/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_SIZE(int8_t, 8/8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /*
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Misc alignment checks.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
6a762861f4545ff60f0cb6e4d0a947793adc2f74vboxsync CHECK_MEMBER_ALIGNMENT(PDMDEVINS, achInstanceData, 64);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(PCIDEVICE, Int.s, 16);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(PCIDEVICE, Int.s.aIORegions, 16);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(PCIBUS, devices, 16);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(PCIGLOBALS, pci_irq_levels, 16);
fb7ddc547f7396b0016729175bee920396b5cd3fvboxsync CHECK_MEMBER_ALIGNMENT(PCNetState, u64LastPoll, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(VGASTATE, Dev, 8);
d0f00086d75d01386c2fe78073bb6d0880ab2fc5vboxsync CHECK_MEMBER_ALIGNMENT(VGASTATE, StatRZMemoryRead, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#ifdef VBOX_WITH_STATISTICS
fb7ddc547f7396b0016729175bee920396b5cd3fvboxsync// CHECK_MEMBER_ALIGNMENT(PCNetState, StatMMIOReadGC, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(DEVPIC, StatSetIrqGC, 8);
337640774b62333151a0c5cc6407afcb25d93a37vboxsync CHECK_MEMBER_ALIGNMENT(APICDeviceInfo, StatMMIOReadGC, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(IOAPICState, StatMMIOReadGC, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(IOAPICState, StatMMIOReadGC, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#endif
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(PITState, StatPITIrq, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(ATADevState, cTotalSectors, 8);
dccbbd8ec5b45b567312112e7edd5c7130d56262vboxsync CHECK_MEMBER_ALIGNMENT(ATADevState, StatATADMA, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(ATADevState, StatReads, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(ATACONTROLLER, StatAsyncOps, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#ifdef VBOX_WITH_USB
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(OHCI, RootHub, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync# ifdef VBOX_WITH_STATISTICS
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync CHECK_MEMBER_ALIGNMENT(OHCI, StatCanceledIsocUrbs, 8);
dfff275f489de72e78be4fb4fbc3a2780f0ee2aavboxsync# endif
dfff275f489de72e78be4fb4fbc3a2780f0ee2aavboxsync CHECK_MEMBER_ALIGNMENT(EHCI, RootHub, 8);
dfff275f489de72e78be4fb4fbc3a2780f0ee2aavboxsync# ifdef VBOX_WITH_STATISTICS
dfff275f489de72e78be4fb4fbc3a2780f0ee2aavboxsync CHECK_MEMBER_ALIGNMENT(EHCI, StatCanceledIsocUrbs, 8);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync# endif
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#endif
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /*
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Compare HC and GC.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("tstDeviceStructSize: Comparing HC and GC...\n");
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync#include "tstDeviceStructSizeGC.h"
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync /*
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync * Report result.
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync */
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync if (rc)
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("tstDeviceStructSize: FAILURE - %d errors\n", rc);
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync else
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync printf("tstDeviceStructSize: SUCCESS\n");
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync return rc;
9f4747a43944848d911353b1bcc99f41aaa5bf81vboxsync}