tstVMStructSize.cpp revision 8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * tstVMStructSize - testcase for check structure sizes/alignment
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * and to verify that HC and GC uses the same
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * representation of the structures.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2006-2007 innotek GmbH
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * available from http://www.virtualbox.org. This file is free software;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * 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
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*******************************************************************************
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync* Header Files *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync*******************************************************************************/
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_OFFSETOF(CPUMCTX, member) - RT_OFFSETOF(CPUMCTX, edi) != RT_OFFSETOF(CPUMCTXCORE, member)) \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync printf("%s::%s offset %#x (%d) sizeof %d\n", #strct, #member, (int)RT_OFFSETOF(strct, member), (int)RT_OFFSETOF(strct, member), (int)RT_SIZEOFMEMB(strct, member)); \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ((RT_OFFSETOF(VM, selm.s.Tss) & PAGE_OFFSET_MASK) > PAGE_SIZE - sizeof(pVM->selm.s.Tss))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ((RT_OFFSETOF(VM, selm.s.TssTrap08) & PAGE_OFFSET_MASK) > PAGE_SIZE - sizeof(pVM->selm.s.TssTrap08))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(VM, vmm.s.CritSectVMLock, 8);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(VM, vmm.s.CallHostR0JmpBuf, 8);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* cpumctx */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* CPUMHOSTCTX - lss pair */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (RT_OFFSETOF(CPUMHOSTCTX, esp) + 4 != RT_OFFSETOF(CPUMHOSTCTX, ss))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync printf("error: CPUMHOSTCTX lss has been split up!\n");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(PDMDEVINS, achInstanceData, 16);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(PDMUSBINS, achInstanceData, 16);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(PDMDRVINS, achInstanceData, 16);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync CHECK_MEMBER_ALIGNMENT(PGMPOOLPAGE, idx, sizeof(uint16_t));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(PGMPOOLPAGE, pvPageHC, sizeof(RTHCPTR));
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync CHECK_MEMBER_ALIGNMENT(PGMPOOLPAGE, GCPhys, sizeof(RTGCPHYS));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(PGMMMIO2RANGE, RamRange, 16);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_MEMBER_ALIGNMENT(REM, aGCPtrInvalidatedPages, 8);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_PADDING3(EM, u.FatalLongJump, u.achPaddingFatalLongJump);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync CHECK_PADDING3(REMHANDLERNOTIFICATION, u.PhysicalRegister, u.padding);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_PADDING3(REMHANDLERNOTIFICATION, u.PhysicalDeregister, u.padding);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync CHECK_PADDING3(REMHANDLERNOTIFICATION, u.PhysicalModify, u.padding);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Compare HC and GC.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync printf("tstVMStructSize: Comparing HC and GC...\n");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Report result.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync printf("tstVMStructSize: FAILURE - %d errors\n", rc);