source: trunk/kStuff/kDbg/kDbgInternal.h@ 3552

Last change on this file since 3552 was 3550, checked in by bird, 18 years ago

made kDbg compile again (not linking yet though).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1/* $Id: kDbgInternal.h 3550 2007-08-26 01:13:35Z bird $ */
2/** @file
3 * kDbg - The Debug Info Reader, Internal Header.
4 */
5
6/*
7 * Copyright (c) 2006-2007 knut st. osmundsen <bird-src-spam@anduin.net>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with This program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 *
23 */
24
25#ifndef ___kDbgInternal_h___
26#define ___kDbgInternal_h___
27
28#include <k/kHlpAssert.h>
29#include <k/kMagics.h>
30#include <k/kErrors.h>
31#include <k/kDbgAll.h>
32
33
34/** @defgroup grp_kDbgInternal Internal
35 * @internal
36 * @addtogroup grp_kDbg
37 * @{
38 */
39
40/** @def KDBG_STRICT
41 * If defined the kDbg assertions and other runtime checks will be enabled. */
42#ifdef K_ALL_STRICT
43# undef KDBG_STRICT
44# define KDBG_STRICT
45#endif
46
47/** @name Our Assert macros
48 * @{ */
49#ifdef KDBG_STRICT
50# define kDbgAssert(expr) kHlpAssert(expr)
51# define kDbgAssertReturn(expr, rcRet) kHlpAssertReturn(expr, rcRet)
52# define kDbgAssertReturnVoid(expr) kHlpAssertReturnVoid(expr)
53# define kDbgAssertMsg(expr, msg) kHlpAssertMsg(expr, msg)
54# define kDbgAssertMsgReturn(expr, msg, rcRet) kHlpAssertMsgReturn(expr, msg, rcRet)
55# define kDbgAssertMsgReturnVoid(expr, msg) kHlpAssertMsgReturnVoid(expr, msg)
56#else /* !KDBG_STRICT */
57# define kDbgAssert(expr) do { } while (0)
58# define kDbgAssertReturn(expr, rcRet) do { if (!(expr)) return (rcRet); } while (0)
59# define kDbgAssertMsg(expr, msg) do { } while (0)
60# define kDbgAssertMsgReturn(expr, msg, rcRet) do { if (!(expr)) return (rcRet); } while (0)
61#endif /* !KDBG_STRICT */
62
63#define kDbgAssertPtr(ptr) kDbgAssertMsg(K_VALID_PTR(ptr), ("%s = %p\n", #ptr, (ptr)))
64#define kDbgAssertPtrReturn(ptr, rcRet) kDbgAssertMsgReturn(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
65#define kDbgAssertPtrReturnVoid(ptr) kDbgAssertMsgReturnVoid(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)))
66#define kDbgAssertPtrNull(ptr) kDbgAssertMsg(!(ptr) || K_VALID_PTR(ptr), ("%s = %p\n", #ptr, (ptr)))
67#define kDbgAssertPtrNullReturn(ptr, rcRet) kDbgAssertMsgReturn(!(ptr) || K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
68#define kDbgAssertPtrNullReturnVoid(ptr) kDbgAssertMsgReturnVoid(!(ptr) || K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)))
69#define kDbgAssertRC(rc) kDbgAssertMsg((rc) == 0, ("%s = %d\n", #rc, (rc)))
70#define kDbgAssertRCReturn(rc, rcRet) kDbgAssertMsgReturn((rc) == 0, ("%s = %d -> %d\n", #rc, (rc), (rcRet)), (rcRet))
71#define kDbgAssertRCReturnVoid(rc) kDbgAssertMsgReturnVoid((rc) == 0, ("%s = %d -> %d\n", #rc, (rc), (rcRet)))
72#define kDbgAssertFailed() kDbgAssert(0)
73#define kDbgAssertFailedReturn(rcRet) kDbgAssertReturn(0, (rcRet))
74#define kDbgAssertFailedReturnVoid() kDbgAssertReturnVoid(0)
75#define kDbgAssertMsgFailed(msg) kDbgAssertMsg(0, msg)
76#define kDbgAssertMsgFailedReturn(msg, rcRet) kDbgAssertMsgReturn(0, msg, (rcRet))
77#define kDbgAssertMsgFailedReturnVoid(msg) kDbgAssertMsgReturnVoid(0, msg)
78/** @} */
79
80/** Return / crash validation of a reader argument. */
81#define KDBGMOD_VALIDATE_EX(pDbgMod, rc) \
82 do { \
83 kDbgAssertPtrReturn((pDbgMod), (rc)); \
84 kDbgAssertReturn((pDbgMod)->u32Magic == KDBGMOD_MAGIC, (rc)); \
85 kDbgAssertReturn((pDbgMod)->pOps != NULL, (rc)); \
86 } while (0)
87
88/** Return / crash validation of a reader argument. */
89#define KDBGMOD_VALIDATE(pDbgMod) \
90 do { \
91 kDbgAssertPtrReturn((pDbgMod), KERR_INVALID_POINTER); \
92 kDbgAssertReturn((pDbgMod)->u32Magic == KDBGMOD_MAGIC, KERR_INVALID_HANDLE); \
93 kDbgAssertReturn((pDbgMod)->pOps != NULL, KERR_INVALID_HANDLE); \
94 } while (0)
95
96/** Return / crash validation of a reader argument. */
97#define KDBGMOD_VALIDATE_VOID(pDbgMod) \
98 do { \
99 kDbgAssertPtrReturnVoid((pDbgMod)); \
100 kDbgAssertReturnVoid((pDbgMod)->u32Magic == KDBGMOD_MAGIC); \
101 kDbgAssertReturnVoid((pDbgMod)->pOps != NULL); \
102 } while (0)
103
104
105#ifdef __cplusplus
106extern "C" {
107#endif
108
109/** @name Built-in Debug Module Readers
110 * @{ */
111extern KDBGMODOPS const g_kDbgModWinDbgHelpOpen;
112extern KDBGMODOPS const g_kDbgModLdr;
113extern KDBGMODOPS const g_kDbgModCv8;
114extern KDBGMODOPS const g_kDbgModDwarf;
115extern KDBGMODOPS const g_kDbgModHll;
116extern KDBGMODOPS const g_kDbgModStabs;
117extern KDBGMODOPS const g_kDbgModSym;
118extern KDBGMODOPS const g_kDbgModMapILink;
119extern KDBGMODOPS const g_kDbgModMapMSLink;
120extern KDBGMODOPS const g_kDbgModMapNm;
121extern KDBGMODOPS const g_kDbgModMapWLink;
122/** @} */
123
124#ifdef __cplusplus
125}
126#endif
127
128/** @} */
129
130#endif
131
Note: See TracBrowser for help on using the repository browser.