Hi Guys, The patch below adds support for the -fstack-usage option to the BFIN, FT32, H8300, IQ2000 and M32C ports. It also adjusts the expected output in the gcc.dg/stack-usage-1.c test for the V850 and MN10300 to match the actual results generated by these toolchains.
Tested with no regressions on bfin-elf, ft32-elf, h8300-elf, iq2000-elf, m32c-elf, mn10300-elf and v850-elf toolchains. OK to apply ? Cheers Nick gcc/ChangeLog 2015-06-23 Nick Clifton <ni...@redhat.com> * config/bfin/bfin.c (bfin_expand_prologue): Set current_function_static_stack_size if flag_stack_usage_info is set. * config/ft32/ft32.c (ft32_expand_prologue): Likewise. * config/h8300/h8300.c (h8300_expand_prologue): Likewise. * config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise. * config/m32c/m32c.c (m32c_emit_prologue): Likewise. gcc/testsuite/ChangeLog 2015-06-23 Nick Clifton <ni...@redhat.com> * gcc.dg/stack-usage-1.c: Add SIZE values for V850, MN10300, H8300 and M32R targets. Index: gcc/config/bfin/bfin.c =================================================================== --- gcc/config/bfin/bfin.c (revision 224834) +++ gcc/config/bfin/bfin.c (working copy) @@ -1090,6 +1090,9 @@ tree attrs = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl)); bool all = lookup_attribute ("saveall", attrs) != NULL_TREE; + if (flag_stack_usage_info) + current_function_static_stack_size = frame_size; + if (fkind != SUBROUTINE) { expand_interrupt_handler_prologue (spreg, fkind, all); Index: gcc/config/ft32/ft32.c =================================================================== --- gcc/config/ft32/ft32.c (revision 224834) +++ gcc/config/ft32/ft32.c (working copy) @@ -456,6 +456,9 @@ ft32_compute_frame (); + if (flag_stack_usage_info) + current_function_static_stack_size = cfun->machine->size_for_adjusting_sp; + if (!must_link () && (cfun->machine->callee_saved_reg_size == 4)) { insn = Index: gcc/config/h8300/h8300.c =================================================================== --- gcc/config/h8300/h8300.c (revision 224834) +++ gcc/config/h8300/h8300.c (working copy) @@ -896,6 +896,12 @@ /* Leave room for locals. */ h8300_emit_stack_adjustment (-1, round_frame_size (get_frame_size ()), true); + + if (flag_stack_usage_info) + current_function_static_stack_size + = round_frame_size (get_frame_size ()) + + (__builtin_popcount (saved_regs) * UNITS_PER_WORD) + + (frame_pointer_needed ? UNITS_PER_WORD : 0); } /* Return nonzero if we can use "rts" for the function currently being Index: gcc/config/iq2000/iq2000.c =================================================================== --- gcc/config/iq2000/iq2000.c (revision 224834) +++ gcc/config/iq2000/iq2000.c (working copy) @@ -2072,6 +2072,9 @@ } } + if (flag_stack_usage_info) + current_function_static_stack_size = cfun->machine->total_size; + emit_insn (gen_blockage ()); } Index: gcc/config/m32c/m32c.c =================================================================== --- gcc/config/m32c/m32c.c (revision 224834) +++ gcc/config/m32c/m32c.c (working copy) @@ -4123,6 +4123,9 @@ && !m32c_function_needs_enter ()) cfun->machine->use_rts = 1; + if (flag_stack_usage_info) + current_function_static_stack_size = frame_size; + if (frame_size > 254) { extra_frame_size = frame_size - 254; Index: gcc/config/m32r/m32r.c =================================================================== --- gcc/config/m32r/m32r.c (revision 224834) +++ gcc/config/m32r/m32r.c (working copy) @@ -1665,6 +1665,9 @@ if (! current_frame_info.initialized) m32r_compute_frame_size (get_frame_size ()); + if (flag_stack_usage_info) + current_function_static_stack_size = current_frame_info.total_size; + gmask = current_frame_info.gmask; /* These cases shouldn't happen. Catch them now. */ Index: gcc/testsuite/gcc.dg/stack-usage-1.c =================================================================== --- gcc/testsuite/gcc.dg/stack-usage-1.c (revision 224834) +++ gcc/testsuite/gcc.dg/stack-usage-1.c (working copy) @@ -81,6 +81,14 @@ # define SIZE 254 #elif defined (__nios2__) # define SIZE 252 +#elif defined (__v850__) +#define SIZE 260 +#elif defined (__mn10300__) +#define SIZE 252 +#elif defined (__H8300SX__) || defined (__H8300S__) || defined (__H8300H__) || defined (__H8300__) +#define SIZE 252 +#elif defined (__M32R__) +#define SIZE 252 #else # define SIZE 256 #endif