Annotation of GNUtools/cc/gbl-ctors.h, revision 1.1

1.1     ! root        1: /* Definitions relating to the special __do_global_init function used
        !             2:    for getting g++ file-scope static objects constructed.  This file
        !             3:    will get included either by libgcc2.c (for systems that don't support
        !             4:    a .init section) or by crtstuff.c (for those that do).
        !             5: 
        !             6:    Written by Ron Guilmette ([email protected])
        !             7: 
        !             8: Copyright (C) 1991 Free Software Foundation, Inc.
        !             9: 
        !            10: This file is part of GNU CC.
        !            11: 
        !            12: GNU CC is free software; you can redistribute it and/or modify
        !            13: it under the terms of the GNU General Public License as published by
        !            14: the Free Software Foundation; either version 2, or (at your option)
        !            15: any later version.
        !            16: 
        !            17: GNU CC is distributed in the hope that it will be useful,
        !            18: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            19: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            20: GNU General Public License for more details.
        !            21: 
        !            22: You should have received a copy of the GNU General Public License
        !            23: along with GNU CC; see the file COPYING.  If not, write to
        !            24: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            25: 
        !            26: /*     This file contains definitions and declarations of things
        !            27:        relating to the normal start-up-time invocation of C++
        !            28:        file-scope static object constructors.  These declarations
        !            29:        and definitions are used by *both* libgcc2.c and by crtstuff.c.
        !            30: 
        !            31:        Note that this file should only be compiled with GCC.
        !            32: */
        !            33: 
        !            34: #ifdef HAVE_ATEXIT
        !            35: extern void atexit (void (*) (void));
        !            36: #define ON_EXIT(FUNC,ARG) atexit ((FUNC))
        !            37: #else
        !            38: #ifdef sun
        !            39: extern void on_exit (void*, void*);
        !            40: #define ON_EXIT(FUNC,ARG) on_exit ((FUNC), (ARG))
        !            41: #endif
        !            42: #endif
        !            43: 
        !            44: /*  Declare a pointer to void function type.  */
        !            45: 
        !            46: typedef void (*func_ptr) (void);
        !            47: 
        !            48: /* Declare the set of symbols use as begin and end markers for the lists
        !            49:    of global object constructors and global object destructors.  */
        !            50: 
        !            51: extern func_ptr __CTOR_LIST__[];
        !            52: extern func_ptr __DTOR_LIST__[];
        !            53: 
        !            54: /* Declare the routine which need to get invoked at program exit time.  */
        !            55: 
        !            56: extern void __do_global_dtors ();
        !            57: 
        !            58: /* Define a macro with the code which needs to be executed at program
        !            59:    start-up time.  This macro is used in two places in crtstuff.c (for
        !            60:    systems which support a .init section) and in one place in libgcc2.c
        !            61:    (for those system which do *not* support a .init section).  For all
        !            62:    three places where this code might appear, it must be identical, so
        !            63:    we define it once here as a macro to avoid various instances getting
        !            64:    out-of-sync with one another.  */
        !            65: 
        !            66: /* The first word may or may not contain the number of pointers in the table.
        !            67:    In all cases, the table is null-terminated.
        !            68:    We ignore the first word and scan up to the null.  */
        !            69: 
        !            70: /* Some systems use a different strategy for finding the ctors.
        !            71:    For example, svr3.  */
        !            72: #ifndef DO_GLOBAL_CTORS_BODY
        !            73: #define DO_GLOBAL_CTORS_BODY                                           \
        !            74: do {                                                                   \
        !            75:   func_ptr *p;                                                         \
        !            76:   for (p = __CTOR_LIST__ + 1; *p; )                                    \
        !            77:     (*p++) ();                                                         \
        !            78: } while (0)
        !            79: #endif
        !            80: 

unix.superglobalmegacorp.com

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