diff options
author | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-05-19 01:50:40 +0000 |
---|---|---|
committer | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-05-19 01:50:40 +0000 |
commit | ad8d90abdafcea922b74f33534581b7cdd0db479 (patch) | |
tree | 77ccaa4253a407c3dc69f6c63cc2b89f79e46324 /gcc/config/svr3.h | |
parent | 581ac06a656b7b5aaa738e272cf099aa4ee11323 (diff) | |
download | gcc-ad8d90abdafcea922b74f33534581b7cdd0db479.tar.gz |
*** empty log message ***
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@1013 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/svr3.h')
-rw-r--r-- | gcc/config/svr3.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gcc/config/svr3.h b/gcc/config/svr3.h index 9d70cbf0ae6..ffaac52794e 100644 --- a/gcc/config/svr3.h +++ b/gcc/config/svr3.h @@ -216,13 +216,32 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. /* CTOR_LIST_BEGIN and CTOR_LIST_END are machine-dependent because they push on the stack. */ -#define DO_GLOBAL_CTORS_BODY \ -do { \ - func_ptr *__CTOR_LIST__ = __builtin_alloca (0), *p; \ - for (p = __CTOR_LIST__; *p; ) \ - (*p++) (); \ +#ifdef STACK_GROWS_DOWNWARD + +/* Constructor list on stack is in reverse order. Go to the end of the + list and go backwards to call constructors in the right order. */ +#define DO_GLOBAL_CTORS_BODY \ +do { \ + func_ptr *p, *beg = alloca (0); \ + for (p = beg; *p; p++) \ + ; \ + while (p != beg) \ + (*--p) (); \ } while (0) +#else + +/* Constructor list on stack is in correct order. Just call them. */ +#define DO_GLOBAL_CTORS_BODY \ +do { \ + func_ptr *p, *beg = alloca (0); \ + for (p = beg; *p; ) \ + (*p++) (); \ +#endif \ +} while (0) + +#endif /* STACK_GROWS_DOWNWARD */ + /* Add extra sections .init and .fini, in addition to .bss from att386.h. */ #undef EXTRA_SECTIONS |