[avr] Include INCOMING_FRAME_SP_OFFSET when printing stack usage

Submitted by Senthil Kumar Selvaraj on May 13, 2016, 3:13 p.m.

Details

Message ID 87posq2dp1.fsf@atmel.com
State New
Headers show

Commit Message

Senthil Kumar Selvaraj May 13, 2016, 3:13 p.m.
Hi,

  This trivial patch adds INCOMING_FRAME_SP_OFFSET to
  current_function_static_stack_size, thus fixing the 2 (or 3, for
  3 byte PC devices) byte difference between reported and actual
  values when using -fstack-usage.

  The patch came about because of this discussion
  (https://gcc.gnu.org/ml/gcc/2016-05/msg00107.html). For AVRs, the
  return address gets pushed into the stack as part of the call
  instruction, and the number of bytes pushed varies by PC width.
  This is already taken care of when defining INCOMING_FRAME_SP_OFFSET,
  so I just add it to the previously computed value when setting
  current_function_static_stack_size. 

  If this is ok, could someone commit please? I don't have commit
  access.

Regards
Senthil

gcc/ChangeLog

2016-05-13  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>

	* config/avr/avr.c (avr_expand_prologue): Add INCOMING_FRAME_SP_OFFSET
  to computed stack_usage.

Comments

Senthil Kumar Selvaraj May 19, 2016, 1:10 p.m.
Ping!

Regards
Senthil

Senthil Kumar Selvaraj writes:

> Hi,
>
>   This trivial patch adds INCOMING_FRAME_SP_OFFSET to
>   current_function_static_stack_size, thus fixing the 2 (or 3, for
>   3 byte PC devices) byte difference between reported and actual
>   values when using -fstack-usage.
>
>   The patch came about because of this discussion
>   (https://gcc.gnu.org/ml/gcc/2016-05/msg00107.html). For AVRs, the
>   return address gets pushed into the stack as part of the call
>   instruction, and the number of bytes pushed varies by PC width.
>   This is already taken care of when defining INCOMING_FRAME_SP_OFFSET,
>   so I just add it to the previously computed value when setting
>   current_function_static_stack_size. 
>
>   If this is ok, could someone commit please? I don't have commit
>   access.
>
> Regards
> Senthil
>
> gcc/ChangeLog
>
> 2016-05-13  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
>
> 	* config/avr/avr.c (avr_expand_prologue): Add INCOMING_FRAME_SP_OFFSET
>   to computed stack_usage.
>
>
> diff --git gcc/config/avr/avr.c gcc/config/avr/avr.c
> index 8de39e0..ba5cd91 100644
> --- gcc/config/avr/avr.c
> +++ gcc/config/avr/avr.c
> @@ -1484,7 +1484,7 @@ avr_expand_prologue (void)
>    avr_prologue_setup_frame (size, set);
>  
>    if (flag_stack_usage_info)
> -    current_function_static_stack_size = cfun->machine->stack_usage;
> +    current_function_static_stack_size = cfun->machine->stack_usage + INCOMING_FRAME_SP_OFFSET;
>  }
>  
>
Denis Chertykov May 21, 2016, 10:54 a.m.
2016-05-19 16:10 GMT+03:00 Senthil Kumar Selvaraj
<senthil_kumar.selvaraj@atmel.com>:
> Ping!
>
> Regards
> Senthil
>
> Senthil Kumar Selvaraj writes:
>
>> Hi,
>>
>>   This trivial patch adds INCOMING_FRAME_SP_OFFSET to
>>   current_function_static_stack_size, thus fixing the 2 (or 3, for
>>   3 byte PC devices) byte difference between reported and actual
>>   values when using -fstack-usage.
>>
>>   The patch came about because of this discussion
>>   (https://gcc.gnu.org/ml/gcc/2016-05/msg00107.html). For AVRs, the
>>   return address gets pushed into the stack as part of the call
>>   instruction, and the number of bytes pushed varies by PC width.
>>   This is already taken care of when defining INCOMING_FRAME_SP_OFFSET,
>>   so I just add it to the previously computed value when setting
>>   current_function_static_stack_size.
>>
>>   If this is ok, could someone commit please? I don't have commit
>>   access.
>>
>> Regards
>> Senthil
>>
>> gcc/ChangeLog
>>
>> 2016-05-13  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
>>
>>       * config/avr/avr.c (avr_expand_prologue): Add INCOMING_FRAME_SP_OFFSET
>>   to computed stack_usage.
>>
>>
>> diff --git gcc/config/avr/avr.c gcc/config/avr/avr.c
>> index 8de39e0..ba5cd91 100644
>> --- gcc/config/avr/avr.c
>> +++ gcc/config/avr/avr.c
>> @@ -1484,7 +1484,7 @@ avr_expand_prologue (void)
>>    avr_prologue_setup_frame (size, set);
>>
>>    if (flag_stack_usage_info)
>> -    current_function_static_stack_size = cfun->machine->stack_usage;
>> +    current_function_static_stack_size = cfun->machine->stack_usage + INCOMING_FRAME_SP_OFFSET;
>>  }
>>
>>
>

Committed.

Patch hide | download patch | download mbox

diff --git gcc/config/avr/avr.c gcc/config/avr/avr.c
index 8de39e0..ba5cd91 100644
--- gcc/config/avr/avr.c
+++ gcc/config/avr/avr.c
@@ -1484,7 +1484,7 @@  avr_expand_prologue (void)
   avr_prologue_setup_frame (size, set);
 
   if (flag_stack_usage_info)
-    current_function_static_stack_size = cfun->machine->stack_usage;
+    current_function_static_stack_size = cfun->machine->stack_usage + INCOMING_FRAME_SP_OFFSET;
 }