summaryrefslogtreecommitdiff
path: root/gcc/config/svr3.h
diff options
context:
space:
mode:
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-05-19 01:50:40 +0000
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>1992-05-19 01:50:40 +0000
commitad8d90abdafcea922b74f33534581b7cdd0db479 (patch)
tree77ccaa4253a407c3dc69f6c63cc2b89f79e46324 /gcc/config/svr3.h
parent581ac06a656b7b5aaa738e272cf099aa4ee11323 (diff)
downloadgcc-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.h29
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