Hello
With GCC 4.6 a new switch -fstack-usage has been added.
Some target architectures have support for this.
To give ARM targets support for this feature only a few lines of code
are missing.
Is it possible to add this or something similar?
regards
Thomas
2010-11-21 Thomas Klein <th.r.kl...@web.de>
* config/arm/arm.c (arm_expand_prologue): Report the static ..
* config/arm/arm.c (thumb1_expand_prologue): .. stack size if
-fstack-usage is used.
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c (revision 167002)
+++ gcc/config/arm/arm.c (working copy)
@@ -15722,6 +15722,13 @@ arm_expand_prologue (void)
}
}
+ if (flag_stack_usage)
+ {
+ HOST_WIDE_INT stack_size = saved_regs;
Hello
With GCC 4.6 a new switch -fstack-usage has been added.
Some target architectures have support for this.
To give ARM targets support for this feature only a few lines of code
are missing.
Is it possible to add this or something similar?
Regards
Thomas
2010-11-21 Thomas Klein <th.r.kl...@web.de>
* config/arm/arm.c (arm_expand_prologue): Report the static ..
* config/arm/arm.c (thumb1_expand_prologue): .. stack size if
-fstack-usage is used.
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c (revision 167002)
+++ gcc/config/arm/arm.c (working copy)
@@ -15722,6 +15722,13 @@ arm_expand_prologue (void)
}
}
+ if (flag_stack_usage)
+ {
+ HOST_WIDE_INT stack_size = saved_regs;
+ current_function_static_stack_size = stack_size;
+ }
+
+
if (offsets->outgoing_args != offsets->saved_args + saved_regs)
{
/* This add can produce multiple insns for a large constant, so we
@@ -15733,6 +15740,12 @@ arm_expand_prologue (void)
insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
amount));
+ if (flag_stack_usage)
+ {
+ HOST_WIDE_INT stack_size = offsets->outgoing_args -
(offsets->saved_args + saved_regs);
+ current_function_static_stack_size += stack_size;
+ }
+
do
{
last = last ? NEXT_INSN (last) : get_insns ();
@@ -20535,6 +20548,10 @@ thumb1_expand_prologue (void)
stack_pointer_rtx);
amount = offsets->outgoing_args - offsets->saved_regs;
+ if (flag_stack_usage)
+ {
+ current_function_static_stack_size = amount;
+ }
amount -= 4 * thumb1_extra_regs_pushed (offsets, true);
if (amount)
{
+ current_function_static_stack_size = stack_size;
+ }
+
+
if (offsets->outgoing_args != offsets->saved_args + saved_regs)
{
/* This add can produce multiple insns for a large constant, so we
@@ -15733,6 +15740,12 @@ arm_expand_prologue (void)
insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
amount));
+ if (flag_stack_usage)
+ {
+ HOST_WIDE_INT stack_size = offsets->outgoing_args -
(offsets->saved_args + saved_regs);
+ current_function_static_stack_size += stack_size;
+ }
+
do
{
last = last ? NEXT_INSN (last) : get_insns ();
@@ -20535,6 +20548,10 @@ thumb1_expand_prologue (void)
stack_pointer_rtx);
amount = offsets->outgoing_args - offsets->saved_regs;
+ if (flag_stack_usage)
+ {
+ current_function_static_stack_size = amount;
+ }
amount -= 4 * thumb1_extra_regs_pushed (offsets, true);
if (amount)
{