Commit 98ee239e by Richard Kenner

(HAVE_ATEXIT): Define.

From-SVN: r10143
parent fb695d4a
/* Output variables, constants and external declarations, for GNU compiler. /* Output variables, constants and external declarations, for GNU compiler.
Copyright (C) 1988, 1994 Free Software Foundation, Inc. Copyright (C) 1988, 1994, 1995 Free Software Foundation, Inc.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -317,6 +317,9 @@ const_section () \ ...@@ -317,6 +317,9 @@ const_section () \
fputc ('\n', (FILE)); \ fputc ('\n', (FILE)); \
} }
/* True for VMS V4.6 and later. */
#define HAVE_ATEXIT
/* The following definitions are used in libgcc2.c with the __main /* The following definitions are used in libgcc2.c with the __main
function. The _SHR symbol is used when the sharable image library function. The _SHR symbol is used when the sharable image library
for libg++ is used - this is picked up automatically by the linker for libg++ is used - this is picked up automatically by the linker
...@@ -335,25 +338,22 @@ const_section () \ ...@@ -335,25 +338,22 @@ const_section () \
#define DO_GLOBAL_CTORS_BODY \ #define DO_GLOBAL_CTORS_BODY \
do { \ do { \
func_ptr *p; \ func_ptr *p; \
extern func_ptr __CTOR_LIST__[1]; \ extern func_ptr __CTOR_LIST__[1], __CTOR_LIST_END__[1]; \
extern func_ptr __CTOR_LIST_END__[1]; \ extern func_ptr __CTOR_LIST_SHR__[1], __CTOR_LIST_SHR_END__[1]; \
extern func_ptr __CTOR_LIST_SHR__[1]; \ if (&__CTOR_LIST_SHR__[0] != &__CTOR_LIST__[1]) \
extern func_ptr __CTOR_LIST_SHR_END__[1]; \ for (p = __CTOR_LIST_SHR__ + 1; p < __CTOR_LIST_SHR_END__ ; p++ ) \
if( &__CTOR_LIST_SHR__[0] != &__CTOR_LIST__[1]) \ if (*p) (*p) (); \
for (p = __CTOR_LIST_SHR__ + 1; p < __CTOR_LIST_SHR_END__ ; p++ ) \
if (*p) (*p) (); \
for (p = __CTOR_LIST__ + 1; p < __CTOR_LIST_END__ ; p++ ) \ for (p = __CTOR_LIST__ + 1; p < __CTOR_LIST_END__ ; p++ ) \
if (*p) (*p) (); \ if (*p) (*p) (); \
atexit (__do_global_dtors); \ do { /* arrange for `return' from main() to pass through exit() */ \
{ \
__label__ foo; \ __label__ foo; \
int *callers_caller_fp = (int *) __builtin_frame_address (3); \ int *callers_caller_fp = (int *) __builtin_frame_address (3); \
register int retval asm ("r0"); \ register int retval asm ("r0"); \
callers_caller_fp[4] = (int) && foo; \ callers_caller_fp[4] = (int) && foo; \
return; \ break; /* out of do-while block */ \
foo: \ foo: \
exit (retval); \ exit (retval); \
} \ } while (0); \
} while (0) } while (0)
#define __DTOR_LIST__ __gxx_clean_0 #define __DTOR_LIST__ __gxx_clean_0
...@@ -365,15 +365,13 @@ do { \ ...@@ -365,15 +365,13 @@ do { \
#define DO_GLOBAL_DTORS_BODY \ #define DO_GLOBAL_DTORS_BODY \
do { \ do { \
func_ptr *p; \ func_ptr *p; \
extern func_ptr __DTOR_LIST__[1]; \ extern func_ptr __DTOR_LIST__[1], __DTOR_LIST_END__[1]; \
extern func_ptr __DTOR_LIST_END__[1]; \ extern func_ptr __DTOR_LIST_SHR__[1], __DTOR_LIST_SHR_END__[1]; \
extern func_ptr __DTOR_LIST_SHR__[1]; \
extern func_ptr __DTOR_LIST_SHR_END__[1]; \
for (p = __DTOR_LIST__ + 1; p < __DTOR_LIST_END__ ; p++ ) \ for (p = __DTOR_LIST__ + 1; p < __DTOR_LIST_END__ ; p++ ) \
if (*p) (*p) (); \ if (*p) (*p) (); \
if( &__DTOR_LIST_SHR__[0] != &__DTOR_LIST__[1]) \ if (&__DTOR_LIST_SHR__[0] != &__DTOR_LIST__[1]) \
for (p = __DTOR_LIST_SHR__ + 1; p < __DTOR_LIST_SHR_END__ ; p++ ) \ for (p = __DTOR_LIST_SHR__ + 1; p < __DTOR_LIST_SHR_END__ ; p++ ) \
if (*p) (*p) (); \ if (*p) (*p) (); \
} while (0) } while (0)
#endif /* L__main */ #endif /* L__main */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment