VirtualBox

source: vbox/trunk/src/VBox/VMM/testcase/tstHelp.h@ 7821

Last change on this file since 7821 was 6815, checked in by vboxsync, 17 years ago

Print misaligned member offset in hex.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.9 KB
Line 
1/* $Id: tstHelp.h 6815 2008-02-05 21:47:54Z vboxsync $ */
2/** @file
3 * VMM testcase - Helper stuff.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ___tstHelp_h
19#define ___tstHelp_h
20
21#include <VBox/cdefs.h>
22#include <VBox/cpum.h>
23
24__BEGIN_DECLS
25void tstDumpCtx(PCPUMCTX pCtx, const char *pszComment);
26__END_DECLS
27
28
29/**
30 * Checks the offset of a data member.
31 * @param type Type.
32 * @param off Correct offset.
33 * @param m Member name.
34 */
35#define CHECK_OFF(type, off, m) \
36 do { \
37 if (off != RT_OFFSETOF(type, m)) \
38 { \
39 printf("%#010x %s Off by %d!! (off=%#x)\n", RT_OFFSETOF(type, m), #type "." #m, off - RT_OFFSETOF(type, m), off); \
40 rc++; \
41 } \
42 /*else */ \
43 /*printf("%#08x %s\n", RT_OFFSETOF(type, m), #m);*/ \
44 } while (0)
45
46/**
47 * Checks the size of type.
48 * @param type Type.
49 * @param size Correct size.
50 */
51#define CHECK_SIZE(type, size) \
52 do { \
53 if (size != sizeof(type)) \
54 { \
55 printf("sizeof(%s): %#x (%d) Off by %d!!\n", #type, (int)sizeof(type), (int)sizeof(type), (int)(sizeof(type) - size)); \
56 rc++; \
57 } \
58 else \
59 printf("sizeof(%s): %#x (%d)\n", #type, (int)sizeof(type), (int)sizeof(type)); \
60 } while (0)
61
62/**
63 * Checks the alignment of a struct member.
64 */
65#define CHECK_MEMBER_ALIGNMENT(strct, member, align) \
66 do \
67 { \
68 if ( RT_OFFSETOF(strct, member) & ((align) - 1) ) \
69 { \
70 printf("%s::%s offset=%#x expected alignment %x, meaning %#x off\n", #strct, #member, (unsigned)RT_OFFSETOF(strct, member), \
71 (unsigned)(align), (unsigned)(RT_OFFSETOF(strct, member) & ((align) - 1))); \
72 rc++; \
73 } \
74 } while (0)
75
76/**
77 * Checks that the size of a type is aligned correctly.
78 */
79#define CHECK_SIZE_ALIGNMENT(type, align) \
80 do { \
81 if (RT_ALIGN_Z(sizeof(type), (align)) != sizeof(type)) \
82 { \
83 printf("%s size=%#x, align=%#x %#x bytes off\n", #type, (int)sizeof(type), \
84 (align), (int)RT_ALIGN_Z(sizeof(type), align) - (int)sizeof(type)); \
85 rc++; \
86 } \
87 } while (0)
88
89/**
90 * Checks that a internal struct padding is big enough.
91 */
92#define CHECK_PADDING(strct, member) \
93 do \
94 { \
95 strct *p; \
96 if (sizeof(p->member.s) > sizeof(p->member.padding)) \
97 { \
98 printf("padding of %s::%s is too small, padding=%d struct=%d correct=%d\n", #strct, #member, \
99 (int)sizeof(p->member.padding), (int)sizeof(p->member.s), (int)RT_ALIGN_Z(sizeof(p->member.s), 32)); \
100 rc++; \
101 } \
102 } while (0)
103
104/**
105 * Checks that a internal struct padding is big enough.
106 */
107#define CHECK_PADDING2(strct) \
108 do \
109 { \
110 strct *p; \
111 if (sizeof(p->s) > sizeof(p->padding)) \
112 { \
113 printf("padding of %s is too small, padding=%d struct=%d correct=%d\n", #strct, \
114 (int)sizeof(p->padding), (int)sizeof(p->s), (int)RT_ALIGN_Z(sizeof(p->s), 32)); \
115 rc++; \
116 } \
117 } while (0)
118
119/**
120 * Checks that a internal struct padding is big enough.
121 */
122#define CHECK_PADDING3(strct, member, pad_member) \
123 do \
124 { \
125 strct *p; \
126 if (sizeof(p->member) > sizeof(p->pad_member)) \
127 { \
128 printf("padding of %s::%s is too small, padding=%d struct=%d\n", #strct, #member, \
129 (int)sizeof(p->pad_member), (int)sizeof(p->member)); \
130 rc++; \
131 } \
132 } while (0)
133
134
135#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette