Annotation of qemu/roms/ipxe/src/include/assert.h, revision 1.1.1.1

1.1       root        1: #ifndef _ASSERT_H
                      2: #define _ASSERT_H
                      3: 
                      4: /** @file
                      5:  *
                      6:  * Assertions
                      7:  *
                      8:  * This file provides two assertion macros: assert() (for run-time
                      9:  * assertions) and linker_assert() (for link-time assertions).
                     10:  *
                     11:  */
                     12: 
                     13: FILE_LICENCE ( GPL2_OR_LATER );
                     14: 
                     15: #ifdef NDEBUG
                     16: #define ASSERTING 0
                     17: #else
                     18: #define ASSERTING 1
                     19: #endif
                     20: 
                     21: /** printf() for assertions
                     22:  *
                     23:  * This function exists so that the assert() macro can expand to
                     24:  * printf() calls without dragging the printf() prototype into scope.
                     25:  *
                     26:  * As far as the compiler is concerned, assert_printf() and printf() are
                     27:  * completely unrelated calls; it's only at the assembly stage that
                     28:  * references to the assert_printf symbol are collapsed into references
                     29:  * to the printf symbol.
                     30:  */
                     31: extern int __attribute__ (( format ( printf, 1, 2 ) )) 
                     32: assert_printf ( const char *fmt, ... ) asm ( "printf" );
                     33: 
                     34: /**
                     35:  * Assert a condition at run-time.
                     36:  *
                     37:  * If the condition is not true, a debug message will be printed.
                     38:  * Assertions only take effect in debug-enabled builds (see DBG()).
                     39:  *
                     40:  * @todo Make an assertion failure abort the program
                     41:  *
                     42:  */
                     43: #define assert( condition )                                                 \
                     44:        do {                                                                 \
                     45:                if ( ASSERTING && ! (condition) ) {                          \
                     46:                        assert_printf ( "assert(%s) failed at %s line %d\n", \
                     47:                                        #condition, __FILE__, __LINE__ );    \
                     48:                }                                                            \
                     49:        } while ( 0 )
                     50: 
                     51: /**
                     52:  * Assert a condition at link-time.
                     53:  *
                     54:  * If the condition is not true, the link will fail with an unresolved
                     55:  * symbol (error_symbol).
                     56:  *
                     57:  * This macro is iPXE-specific.  Do not use this macro in code
                     58:  * intended to be portable.
                     59:  *
                     60:  */
                     61: #define linker_assert( condition, error_symbol )       \
                     62:         if ( ! (condition) ) {                         \
                     63:                 extern void error_symbol ( void );     \
                     64:                 error_symbol();                                \
                     65:         }
                     66: 
                     67: #endif /* _ASSERT_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.