VirtualBox

source: vbox/trunk/include/VBox/cdefs.h@ 96316

Last change on this file since 96316 was 93115, checked in by vboxsync, 3 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.4 KB
Line 
1/** @file
2 * VirtualBox - Common C and C++ definition.
3 */
4
5/*
6 * Copyright (C) 2006-2022 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef VBOX_INCLUDED_cdefs_h
27#define VBOX_INCLUDED_cdefs_h
28#ifndef RT_WITHOUT_PRAGMA_ONCE
29# pragma once
30#endif
31
32#include <iprt/cdefs.h>
33
34
35/** @defgroup grp_vbox_cdefs VBox Common Defintions and Macros
36 * @{
37 */
38
39/** @def VBOX_WITH_STATISTICS
40 * When defined all statistics will be included in the build.
41 * This is enabled by default in all debug builds.
42 */
43#ifndef VBOX_WITH_STATISTICS
44# ifdef DEBUG
45# define VBOX_WITH_STATISTICS
46# endif
47#endif
48
49/** @def VBOX_STRICT
50 * Alias for RT_STRICT.
51 */
52#ifdef RT_STRICT
53# ifndef VBOX_STRICT
54# define VBOX_STRICT
55# endif
56#endif
57
58/** @def VBOX_STRICT_GUEST
59 * Be strict on guest input. This can be overriden on the compiler command line
60 * or per source file by defining VBOX_NO_STRICT_GUEST.
61 *
62 * @sa VBox/assert.h and its ASSERT_GUEST_XXXX macros.
63 */
64#ifndef VBOX_STRICT_GUEST
65# ifdef VBOX_STRICT
66# define VBOX_STRICT_GUEST
67# endif
68#endif
69/** @def VBOX_NO_STRICT_GUEST
70 * Define to override VBOX_STRICT_GUEST, disabling asserting on guest input. */
71#ifdef VBOX_NO_STRICT_GUEST
72# undef VBOX_STRICT_GUEST
73#endif
74
75
76/*
77 * Shut up DOXYGEN warnings and guide it properly thru the code.
78 */
79#ifdef DOXYGEN_RUNNING
80#define VBOX_WITH_STATISTICS
81#define VBOX_STRICT
82#define VBOX_STRICT_GUEST
83#define VBOX_NO_STRICT_GUEST
84#define IN_DBG
85#define IN_DIS
86#define IN_INTNET_R0
87#define IN_INTNET_R3
88#define IN_PCIRAW_R0
89#define IN_PCIRAW_R3
90#define IN_REM_R3
91#define IN_SUP_R0
92#define IN_SUP_R3
93#define IN_SUP_RC
94#define IN_SUP_STATIC
95#define IN_USBLIB
96#define IN_VBOXDDU
97#define IN_VMM_RC
98#define IN_VMM_R0
99#define IN_VMM_R3
100#define IN_VMM_STATIC
101#endif
102
103
104
105
106/** @def VBOXCALL
107 * The standard calling convention for VBOX interfaces.
108 */
109#define VBOXCALL RTCALL
110
111
112
113/** @def IN_DIS
114 * Used to indicate whether we're inside the same link module as the
115 * disassembler.
116 */
117/** @def DISDECL(type)
118 * Disassembly export or import declaration.
119 * @param type The return type of the function declaration.
120 */
121#if defined(IN_DIS)
122# ifdef IN_DIS_STATIC
123# define DISDECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
124# else
125# define DISDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
126# endif
127#else
128# define DISDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
129#endif
130
131
132
133/** @def IN_DBG
134 * Used to indicate whether we're inside the same link module as the debugger
135 * console, gui, and related things (ring-3).
136 */
137/** @def DBGDECL(type)
138 * Debugger module export or import declaration.
139 * Functions declared using this exists only in R3 since the
140 * debugger modules is R3 only.
141 * @param type The return type of the function declaration.
142 */
143#if defined(IN_DBG_R3) || defined(IN_DBG)
144# define DBGDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
145#else
146# define DBGDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
147#endif
148
149
150
151/** @def IN_INTNET_R3
152 * Used to indicate whether we're inside the same link module as the Ring-3
153 * Internal Networking Service.
154 */
155/** @def INTNETR3DECL(type)
156 * Internal Networking Service export or import declaration.
157 * @param type The return type of the function declaration.
158 */
159#ifdef IN_INTNET_R3
160# define INTNETR3DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
161#else
162# define INTNETR3DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
163#endif
164
165/** @def IN_INTNET_R0
166 * Used to indicate whether we're inside the same link module as the R0
167 * Internal Network Service.
168 */
169/** @def INTNETR0DECL(type)
170 * Internal Networking Service export or import declaration.
171 * @param type The return type of the function declaration.
172 */
173#ifdef IN_INTNET_R0
174# define INTNETR0DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
175#else
176# define INTNETR0DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
177#endif
178
179
180
181/** @def IN_PCIRAW_R3
182 * Used to indicate whether we're inside the same link module as the Ring-3
183 * PCI passthrough support.
184 */
185/** @def PCIRAWR3DECL(type)
186 * PCI passthrough export or import declaration.
187 * @param type The return type of the function declaration.
188 */
189#ifdef IN_PCIRAW_R3
190# define PCIRAWR3DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
191#else
192# define PCIRAWR3DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
193#endif
194
195/** @def IN_PCIRAW_R0
196 * Used to indicate whether we're inside the same link module as the R0
197 * PCI passthrough support.
198 */
199/** @def PCIRAWR0DECL(type)
200 * PCI passthroug export or import declaration.
201 * @param type The return type of the function declaration.
202 */
203#ifdef IN_PCIRAW_R0
204# define PCIRAWR0DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
205#else
206# define PCIRAWR0DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
207#endif
208
209
210
211/** @def IN_REM_R3
212 * Used to indicate whether we're inside the same link module as
213 * the HC Ring-3 Recompiled Execution Manager.
214 */
215/** @def REMR3DECL(type)
216 * Recompiled Execution Manager HC Ring-3 export or import declaration.
217 * @param type The return type of the function declaration.
218 */
219#ifdef IN_REM_R3
220# define REMR3DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
221#else
222# define REMR3DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
223#endif
224
225
226
227/** @def IN_SUP_R3
228 * Used to indicate whether we're inside the same link module as the Ring-3
229 * Support Library or not.
230 */
231/** @def SUPR3DECL(type)
232 * Support library export or import declaration.
233 * @param type The return type of the function declaration.
234 */
235#ifdef IN_SUP_R3
236# ifdef IN_SUP_STATIC
237# define SUPR3DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
238# else
239# define SUPR3DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
240# endif
241#else
242# ifdef IN_SUP_STATIC
243# define SUPR3DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
244# else
245# define SUPR3DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
246# endif
247#endif
248
249/** @def IN_SUP_R0
250 * Used to indicate whether we're inside the same link module as the Ring-0
251 * Support Library or not.
252 */
253/** @def IN_SUP_STATIC
254 * Used to indicate that the Support Library is built or used as a static
255 * library.
256 */
257/** @def SUPR0DECL(type)
258 * Support library export or import declaration.
259 * @param type The return type of the function declaration.
260 */
261#ifdef IN_SUP_R0
262# ifdef IN_SUP_STATIC
263# define SUPR0DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
264# else
265# define SUPR0DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
266# endif
267#else
268# ifdef IN_SUP_STATIC
269# define SUPR0DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
270# else
271# define SUPR0DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
272# endif
273#endif
274
275/** @def IN_SUP_RC
276 * Used to indicate whether we're inside the same link module as the RC Support
277 * Library or not.
278 */
279/** @def SUPRCDECL(type)
280 * Support library export or import declaration.
281 * @param type The return type of the function declaration.
282 */
283#ifdef IN_SUP_RC
284# define SUPRCDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
285#else
286# define SUPRCDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
287#endif
288
289/** @def IN_SUP_R0
290 * Used to indicate whether we're inside the same link module as the Ring-0
291 * Support Library or not.
292 */
293/** @def SUPR0DECL(type)
294 * Support library export or import declaration.
295 * @param type The return type of the function declaration.
296 */
297#if defined(IN_SUP_R0) || defined(IN_SUP_R3) || defined(IN_SUP_RC)
298# define SUPDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
299#else
300# define SUPDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
301#endif
302
303
304
305/** @def IN_USBLIB
306 * Used to indicate whether we're inside the same link module as the USBLib.
307 */
308/** @def USBLIB_DECL
309 * USBLIB export or import declaration.
310 * @param type The return type of the function declaration.
311 */
312#ifdef IN_RING0
313# define USBLIB_DECL(type) type VBOXCALL
314#elif defined(IN_USBLIB)
315# define USBLIB_DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
316#else
317# define USBLIB_DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
318#endif
319
320
321
322/** @def IN_VMM_STATIC
323 * Used to indicate that the virtual machine monitor is built or used as a
324 * static library.
325 */
326/** @def IN_VMM_R3
327 * Used to indicate whether we're inside the same link module as the ring 3 part of the
328 * virtual machine monitor or not.
329 */
330/** @def VMMR3DECL
331 * Ring-3 VMM export or import declaration.
332 * @param type The return type of the function declaration.
333 */
334#ifdef IN_VMM_R3
335# ifdef IN_VMM_STATIC
336# define VMMR3DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
337# else
338# define VMMR3DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
339# endif
340#elif defined(IN_RING3)
341# ifdef IN_VMM_STATIC
342# define VMMR3DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
343# else
344# define VMMR3DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
345# endif
346#else
347# define VMMR3DECL(type) DECL_INVALID(type)
348#endif
349
350/** @def IN_VMM_R0
351 * Used to indicate whether we're inside the same link module as the ring-0 part
352 * of the virtual machine monitor or not.
353 */
354/** @def VMMR0DECL
355 * Ring-0 VMM export or import declaration.
356 * @param type The return type of the function declaration.
357 */
358#ifdef IN_VMM_R0
359# define VMMR0DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
360#elif defined(IN_RING0)
361# define VMMR0DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
362#else
363# define VMMR0DECL(type) DECL_INVALID(type)
364#endif
365
366/** @def IN_VMM_RC
367 * Used to indicate whether we're inside the same link module as the raw-mode
368 * context part of the virtual machine monitor or not.
369 */
370/** @def VMMRCDECL
371 * Raw-mode context VMM export or import declaration.
372 * @param type The return type of the function declaration.
373 */
374#ifdef IN_VMM_RC
375# define VMMRCDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
376#elif defined(IN_RC)
377# define VMMRCDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
378#else
379# define VMMRCDECL(type) DECL_INVALID(type)
380#endif
381
382/** @def VMMRZDECL
383 * Ring-0 and Raw-mode context VMM export or import declaration.
384 * @param type The return type of the function declaration.
385 */
386#if defined(IN_VMM_R0) || defined(IN_VMM_RC)
387# define VMMRZDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
388#elif defined(IN_RING0) || defined(IN_RZ)
389# define VMMRZDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
390#else
391# define VMMRZDECL(type) DECL_INVALID(type)
392#endif
393
394/** @def VMMDECL
395 * VMM export or import declaration.
396 * @param type The return type of the function declaration.
397 */
398#ifdef IN_VMM_STATIC
399# define VMMDECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
400#elif defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC)
401# define VMMDECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
402#else
403# define VMMDECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
404#endif
405
406/** @def VMM_INT_DECL
407 * VMM internal function.
408 * @param type The return type of the function declaration.
409 */
410#if defined(IN_VMM_R3) || defined(IN_VMM_R0) || defined(IN_VMM_RC)
411# define VMM_INT_DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
412#else
413# define VMM_INT_DECL(type) DECL_INVALID(type)
414#endif
415
416/** @def VMMR3_INT_DECL
417 * VMM internal function, ring-3.
418 * @param type The return type of the function declaration.
419 */
420#ifdef IN_VMM_R3
421# define VMMR3_INT_DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
422#else
423# define VMMR3_INT_DECL(type) DECL_INVALID(type)
424#endif
425
426/** @def VMMR0_INT_DECL
427 * VMM internal function, ring-0.
428 * @param type The return type of the function declaration.
429 */
430#ifdef IN_VMM_R0
431# define VMMR0_INT_DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
432#else
433# define VMMR0_INT_DECL(type) DECL_INVALID(type)
434#endif
435
436/** @def VMMRC_INT_DECL
437 * VMM internal function, raw-mode context.
438 * @param type The return type of the function declaration.
439 */
440#ifdef IN_VMM_RC
441# define VMMRC_INT_DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
442#else
443# define VMMRC_INT_DECL(type) DECL_INVALID(type)
444#endif
445
446/** @def VMMRZ_INT_DECL
447 * VMM internal function, ring-0 + raw-mode context.
448 * @param type The return type of the function declaration.
449 */
450#if defined(IN_VMM_RC) || defined(IN_VMM_R0)
451# define VMMRZ_INT_DECL(type) DECL_HIDDEN_NOTHROW(type) VBOXCALL
452#else
453# define VMMRZ_INT_DECL(type) DECL_INVALID(type)
454#endif
455
456
457
458/** @def IN_VBOXDDU
459 * Used to indicate whether we're inside the VBoxDDU shared object.
460 */
461/** @def VBOXDDU_DECL(type)
462 * VBoxDDU export or import (ring-3).
463 * @param type The return type of the function declaration.
464 */
465#ifdef IN_VBOXDDU
466# ifdef IN_VBOXDDU_STATIC
467# define VBOXDDU_DECL(type) type
468# else
469# define VBOXDDU_DECL(type) DECL_EXPORT_NOTHROW(type) VBOXCALL
470# endif
471#else
472# define VBOXDDU_DECL(type) DECL_IMPORT_NOTHROW(type) VBOXCALL
473#endif
474
475/** @} */
476
477
478/** @defgroup grp_devdrv Device Emulations and Drivers
479 * @{ */
480/** @} */
481
482#endif /* !VBOX_INCLUDED_cdefs_h */
483
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