mirror of
https://github.com/xcat2/xNBA.git
synced 2025-08-24 12:10:27 +00:00
Access to the gpxe.org and etherboot.org domains and associated resources has been revoked by the registrant of the domain. Work around this problem by renaming project from gPXE to iPXE, and updating URLs to match. Also update README, LOG and COPYRIGHTS to remove obsolete information. Signed-off-by: Michael Brown <mcb30@ipxe.org>
68 lines
1.7 KiB
C
68 lines
1.7 KiB
C
#ifndef _ASSERT_H
|
|
#define _ASSERT_H
|
|
|
|
/** @file
|
|
*
|
|
* Assertions
|
|
*
|
|
* This file provides two assertion macros: assert() (for run-time
|
|
* assertions) and linker_assert() (for link-time assertions).
|
|
*
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER );
|
|
|
|
#ifdef NDEBUG
|
|
#define ASSERTING 0
|
|
#else
|
|
#define ASSERTING 1
|
|
#endif
|
|
|
|
/** printf() for assertions
|
|
*
|
|
* This function exists so that the assert() macro can expand to
|
|
* printf() calls without dragging the printf() prototype into scope.
|
|
*
|
|
* As far as the compiler is concerned, assert_printf() and printf() are
|
|
* completely unrelated calls; it's only at the assembly stage that
|
|
* references to the assert_printf symbol are collapsed into references
|
|
* to the printf symbol.
|
|
*/
|
|
extern int __attribute__ (( format ( printf, 1, 2 ) ))
|
|
assert_printf ( const char *fmt, ... ) asm ( "printf" );
|
|
|
|
/**
|
|
* Assert a condition at run-time.
|
|
*
|
|
* If the condition is not true, a debug message will be printed.
|
|
* Assertions only take effect in debug-enabled builds (see DBG()).
|
|
*
|
|
* @todo Make an assertion failure abort the program
|
|
*
|
|
*/
|
|
#define assert( condition ) \
|
|
do { \
|
|
if ( ASSERTING && ! (condition) ) { \
|
|
assert_printf ( "assert(%s) failed at %s line %d\n", \
|
|
#condition, __FILE__, __LINE__ ); \
|
|
} \
|
|
} while ( 0 )
|
|
|
|
/**
|
|
* Assert a condition at link-time.
|
|
*
|
|
* If the condition is not true, the link will fail with an unresolved
|
|
* symbol (error_symbol).
|
|
*
|
|
* This macro is iPXE-specific. Do not use this macro in code
|
|
* intended to be portable.
|
|
*
|
|
*/
|
|
#define linker_assert( condition, error_symbol ) \
|
|
if ( ! (condition) ) { \
|
|
extern void error_symbol ( void ); \
|
|
error_symbol(); \
|
|
}
|
|
|
|
#endif /* _ASSERT_H */
|