X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fgbl-ctors.h;h=ac4faae1292897e2f68fe15dcb1bc86a6098e9c9;hp=2e7f520d685f9e9153beff669fe6f34825ed0017;hb=693f21972dbc39793645054e4f7fe4067ca51da3;hpb=2554c3384e1b5e6507d294971974843b8835981a diff --git a/gcc/gbl-ctors.h b/gcc/gbl-ctors.h index 2e7f520d685..ac4faae1292 100644 --- a/gcc/gbl-ctors.h +++ b/gcc/gbl-ctors.h @@ -2,26 +2,30 @@ for getting g++ file-scope static objects constructed. This file will get included either by libgcc2.c (for systems that don't support a .init section) or by crtstuff.c (for those that do). + Copyright (C) 1991, 1995, 1996, 1998, 1999, 2000, 2003, 2009 + Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@segfault.us.com) - Written by Ron Guilmette (rfg@netcom.com) +This file is part of GCC. -Copyright (C) 1991 Free Software Foundation, Inc. +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. -This file is part of GNU CC. +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ /* This file contains definitions and declarations of things relating to the normal start-up-time invocation of C++ @@ -31,15 +35,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ Note that this file should only be compiled with GCC. */ -#ifdef HAVE_ATEXIT -extern void atexit (void (*) (void)); -#define ON_EXIT(FUNC,ARG) atexit ((FUNC)) -#else -#ifdef sun -extern void on_exit (void*, void*); -#define ON_EXIT(FUNC,ARG) on_exit ((FUNC), (ARG)) -#endif -#endif +#ifndef GCC_GBL_CTORS_H +#define GCC_GBL_CTORS_H /* Declare a pointer to void function type. */ @@ -51,9 +48,13 @@ typedef void (*func_ptr) (void); extern func_ptr __CTOR_LIST__[]; extern func_ptr __DTOR_LIST__[]; -/* Declare the routine which need to get invoked at program exit time. */ +/* Declare the routine which needs to get invoked at program start time. */ + +extern void __do_global_ctors (void); + +/* Declare the routine which needs to get invoked at program exit time. */ -extern void __do_global_dtors (); +extern void __do_global_dtors (void); /* Define a macro with the code which needs to be executed at program start-up time. This macro is used in two places in crtstuff.c (for @@ -63,18 +64,24 @@ extern void __do_global_dtors (); we define it once here as a macro to avoid various instances getting out-of-sync with one another. */ -/* The first word may or may not contain the number of pointers in the table. +/* Some systems place the number of pointers + in the first word of the table. + On other systems, that word is -1. In all cases, the table is null-terminated. - We ignore the first word and scan up to the null. */ + If the length is not recorded, count up to the null. */ /* Some systems use a different strategy for finding the ctors. For example, svr3. */ #ifndef DO_GLOBAL_CTORS_BODY #define DO_GLOBAL_CTORS_BODY \ do { \ - func_ptr *p; \ - for (p = __CTOR_LIST__ + 1; *p; ) \ - (*p++) (); \ + __SIZE_TYPE__ nptrs = (__SIZE_TYPE__) __CTOR_LIST__[0]; \ + unsigned i; \ + if (nptrs == (__SIZE_TYPE__)-1) \ + for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++); \ + for (i = nptrs; i >= 1; i--) \ + __CTOR_LIST__[i] (); \ } while (0) #endif +#endif /* GCC_GBL_CTORS_H */