aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2001-12-26 14:54:44 -0500
committerDJ Delorie <dj@gcc.gnu.org>2001-12-26 14:54:44 -0500
commit8a723db2df8ea2a336691f2c3288a642bc8b0063 (patch)
tree8488e7a048ea97b3d04010051f52f34e4e0d025e /gcc
parentb92b324de7f13dd6504c1da292bf1ff677359664 (diff)
downloadgcc-8a723db2df8ea2a336691f2c3288a642bc8b0063.zip
gcc-8a723db2df8ea2a336691f2c3288a642bc8b0063.tar.gz
gcc-8a723db2df8ea2a336691f2c3288a642bc8b0063.tar.bz2
function.c (expand_main_function): Make sure stack adjustments happen before sjlj exception setup.
* function.c (expand_main_function): Make sure stack adjustments happen before sjlj exception setup. From-SVN: r48316
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/function.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0a7b113..44e13a8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-12-26 DJ Delorie <dj@redhat.com>
+
+ * function.c (expand_main_function): Make sure stack adjustments
+ happen before sjlj exception setup.
+
2001-12-26 David Edelsohn <edelsohn@gnu.org>
* rs6000.md (indirect_jump): Prefer CTR over LR.
diff --git a/gcc/function.c b/gcc/function.c
index b84fc1e..f5a3102 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -6278,8 +6278,9 @@ expand_main_function ()
if (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN)
{
int align = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
- rtx tmp;
+ rtx tmp, seq;
+ start_sequence ();
/* Forcibly align the stack. */
#ifdef STACK_GROWS_DOWNWARD
tmp = expand_simple_binop (Pmode, AND, stack_pointer_rtx, GEN_INT(-align),
@@ -6296,6 +6297,16 @@ expand_main_function ()
/* Enlist allocate_dynamic_stack_space to pick up the pieces. */
tmp = force_reg (Pmode, const0_rtx);
allocate_dynamic_stack_space (tmp, NULL_RTX, BIGGEST_ALIGNMENT);
+ seq = gen_sequence ();
+ end_sequence ();
+
+ for (tmp = get_last_insn (); tmp; tmp = PREV_INSN (tmp))
+ if (NOTE_P (tmp) && NOTE_LINE_NUMBER (tmp) == NOTE_INSN_FUNCTION_BEG)
+ break;
+ if (tmp)
+ emit_insn_before (seq, tmp);
+ else
+ emit_insn (seq);
}
#endif