tstHelp.h revision 03841c1ef497cd0bd02b5bef02c417b001369610
ea0316554d23852601ee840c4a856339501411a4vboxsync * VMM testcase - Helper stuff.
ea0316554d23852601ee840c4a856339501411a4vboxsync * Copyright (C) 2006-2011 Oracle Corporation
ea0316554d23852601ee840c4a856339501411a4vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ea0316554d23852601ee840c4a856339501411a4vboxsync * available from http://www.virtualbox.org. This file is free software;
ea0316554d23852601ee840c4a856339501411a4vboxsync * you can redistribute it and/or modify it under the terms of the GNU
ea0316554d23852601ee840c4a856339501411a4vboxsync * General Public License (GPL) as published by the Free Software
ea0316554d23852601ee840c4a856339501411a4vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
ea0316554d23852601ee840c4a856339501411a4vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
ea0316554d23852601ee840c4a856339501411a4vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
ea0316554d23852601ee840c4a856339501411a4vboxsyncvoid tstDumpCtx(PCPUMCTX pCtx, const char *pszComment);
ea0316554d23852601ee840c4a856339501411a4vboxsync * Checks the offset of a data member.
ea0316554d23852601ee840c4a856339501411a4vboxsync * @param type Type.
ea0316554d23852601ee840c4a856339501411a4vboxsync * @param off Correct offset.
ea0316554d23852601ee840c4a856339501411a4vboxsync * @param m Member name.
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync printf("error! %#010x %s Off by %d!! (expected off=%#x)\n", \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync RT_OFFSETOF(type, m), #type "." #m, off - RT_OFFSETOF(type, m), off); \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync /*else */ \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync /*printf("%#08x %s\n", RT_OFFSETOF(type, m), #m);*/ \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync } while (0)
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync * Checks the size of type.
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync * @param type Type.
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync * @param size Correct size.
48a5358f2f99d054c9b6a1a0f063c11c9addfe14vboxsync printf("error! sizeof(%s): %#x (%d) Off by %d!! (expected %#x)\n", \
ea0316554d23852601ee840c4a856339501411a4vboxsync #type, (int)sizeof(type), (int)sizeof(type), (int)(sizeof(type) - size, (int)size)); \
ea0316554d23852601ee840c4a856339501411a4vboxsync printf("info: sizeof(%s): %#x (%d)\n", #type, (int)sizeof(type), (int)sizeof(type)); \
ea0316554d23852601ee840c4a856339501411a4vboxsync } while (0)
ea0316554d23852601ee840c4a856339501411a4vboxsync * Checks the alignment of a struct member.
ea0316554d23852601ee840c4a856339501411a4vboxsync#define CHECK_MEMBER_ALIGNMENT(strct, member, align) \
ea0316554d23852601ee840c4a856339501411a4vboxsync printf("error! %s::%s offset=%#x (%u) expected alignment %#x, meaning %#x (%u) off\n", \
ea0316554d23852601ee840c4a856339501411a4vboxsync (unsigned)(align), \
ea0316554d23852601ee840c4a856339501411a4vboxsync (unsigned)(((align) - RT_OFFSETOF(strct, member)) & ((align) - 1)), \
ea0316554d23852601ee840c4a856339501411a4vboxsync (unsigned)(((align) - RT_OFFSETOF(strct, member)) & ((align) - 1)) ); \
48a5358f2f99d054c9b6a1a0f063c11c9addfe14vboxsync } while (0)
48a5358f2f99d054c9b6a1a0f063c11c9addfe14vboxsync * Checks that the size of a type is aligned correctly.
ea0316554d23852601ee840c4a856339501411a4vboxsync if (RT_ALIGN_Z(sizeof(type), (align)) != sizeof(type)) \
0f1ee7c0c041f17c1c692fc7f09af458a62ceaeevboxsync printf("error! %s size=%#x (%u), align=%#x %#x (%u) bytes off\n", \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync (unsigned)sizeof(type), \
0f1ee7c0c041f17c1c692fc7f09af458a62ceaeevboxsync (unsigned)sizeof(type), \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync (unsigned)RT_ALIGN_Z(sizeof(type), align) - (unsigned)sizeof(type), \
0f1ee7c0c041f17c1c692fc7f09af458a62ceaeevboxsync (unsigned)RT_ALIGN_Z(sizeof(type), align) - (unsigned)sizeof(type)); \
c9c1b52d5c13d75ba8fc3d86278f2b0c6b3e8c2avboxsync } while (0)
c9c1b52d5c13d75ba8fc3d86278f2b0c6b3e8c2avboxsync * Checks that a internal struct padding is big enough.
ea0316554d23852601ee840c4a856339501411a4vboxsync if (sizeof(p->member.s) > sizeof(p->member.padding)) \
ea0316554d23852601ee840c4a856339501411a4vboxsync printf("error! padding of %s::%s is too small, padding=%d struct=%d correct=%d\n", #strct, #member, \
ea0316554d23852601ee840c4a856339501411a4vboxsync (int)sizeof(p->member.padding), (int)sizeof(p->member.s), (int)RT_ALIGN_Z(sizeof(p->member.s), (align))); \
ea0316554d23852601ee840c4a856339501411a4vboxsync else if (RT_ALIGN_Z(sizeof(p->member.padding), (align)) != sizeof(p->member.padding)) \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync printf("error! padding of %s::%s is misaligned, padding=%d correct=%d\n", #strct, #member, \
0f1ee7c0c041f17c1c692fc7f09af458a62ceaeevboxsync (int)sizeof(p->member.padding), (int)RT_ALIGN_Z(sizeof(p->member.s), (align))); \
ea0316554d23852601ee840c4a856339501411a4vboxsync } while (0)
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync * Checks that a internal struct padding is big enough.
ea0316554d23852601ee840c4a856339501411a4vboxsync if (sizeof(p->s) > sizeof(p->padding)) \
ea0316554d23852601ee840c4a856339501411a4vboxsync printf("error! padding of %s is too small, padding=%d struct=%d correct=%d\n", #strct, \
0f1ee7c0c041f17c1c692fc7f09af458a62ceaeevboxsync (int)sizeof(p->padding), (int)sizeof(p->s), (int)RT_ALIGN_Z(sizeof(p->s), 64)); \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync } while (0)
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync * Checks that a internal struct padding is big enough.
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync printf("error! padding of %s::%s is too small, padding=%d struct=%d\n", #strct, #member, \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync (int)sizeof(p->pad_member), (int)sizeof(p->member)); \
0eb8851309a7678e8ccee719ee3eead40651b5d4vboxsync } while (0)
b742a29c8c5a06fb5f362e5e6c09cbcaf8087ff6vboxsync * Checks that an expression is true.
c9c1b52d5c13d75ba8fc3d86278f2b0c6b3e8c2avboxsync printf("error! '%s' failed! (line %d)\n", #expr, __LINE__); \
c9c1b52d5c13d75ba8fc3d86278f2b0c6b3e8c2avboxsync } while (0)