Annotation of qemu/roms/ipxe/src/include/assert.h, revision 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.