diff options
author | DJ Delorie <dj@redhat.com> | 2001-12-26 14:54:44 -0500 |
---|---|---|
committer | DJ Delorie <dj@gcc.gnu.org> | 2001-12-26 14:54:44 -0500 |
commit | 8a723db2df8ea2a336691f2c3288a642bc8b0063 (patch) | |
tree | 8488e7a048ea97b3d04010051f52f34e4e0d025e /gcc | |
parent | b92b324de7f13dd6504c1da292bf1ff677359664 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/function.c | 13 |
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 |