Hi Peter,

Regarding your first comment, are you saying that while I can put a definite 
lower bound on stack usage (stack uses at least X bytes), I cannot put a 
definite upper bound on stack use (stack never uses more than Y bytes)?

I agree that in a completely general case it is impossible to put a ceiling on 
stack size. In my last tool I made the following assumptions:

1. No recursion or cycles in the call graph
2. No nested interrupts
3. The program uses a simple foreground-background model and does not do any 
context switching, nor does it deliberately tamper with the stack during run 
time (i.e. the stack pointer is only modified by adding or subtracting fixed 
values).

I think the first assumption is fine as I am yet to meet anybody who thinks 
recursion in an embedded environment is good practice.

Assumption 2 is definitely a show stopper for some people. I have never used 
nested interrupts myself so I have some gaps in my understanding of how they 
work in practice and will have to do some research here to see what can be 
done. Still the tool should be able to compute stack usage of the background 
code just fine.

As for assumption 3, I believe if the user is writing a program with multiple 
threads perhaps they can invoke this tool several times, each time passing in 
the entry point to a particular thread, and thereby compute the stack usage of 
each thread (the tool also may be tailored to support one or more RTOS).

I am sure I am being too naive about it but for my own work I found even basic 
stack analysis to be quite helpful.
I am happy for you to point out anything obvious or not-so-obvious that I am 
overlooking :)

- Wayne

-----Original Message-----
From: pabi...@gmail.com [mailto:pabi...@gmail.com] On Behalf Of Peter Bigot
Sent: Thursday, 12 January 2012 11:19 PM
To: Wayne Uroda
Cc: mspgcc-users@lists.sourceforge.net
Subject: Re: [Mspgcc-users] Static analysis stack tool

On Thu, Jan 12, 2012 at 6:49 AM, Wayne Uroda <wayne.ur...@grabba.com> wrote:
> Hello,
>
> I am interested in starting an open source tool for msp430 development, 
> specifically to perform static, whole elf analysis to investigate stack 
> usage. Such a tool can identify maximum stack depth of each function and also 
> find the maximum stack usage of an entire executable.
>
> I have a tool which I wrote and use personally but it is limited and 
> specifically coded for the custom link setup I use for my company's products, 
> so I wish to start from scratch.
>
> Before I begin I just wanted to check that I wasn't reinventing the wheel. 
> How I have done it in the past was by parsing the output of the disassembler, 
> building a graph of function calls and then analysing each function for 
> instructions which modify the stack. Would I be better off trying to insert 
> this functionality into the compiler/linker/disassembler itself? I have a 
> feeling this would be a lot more complicated.
>
> I plan on using C++. Any comments are welcome.

Three comments:

1) (you probably know this, but just in case somebody doesn't...)  Go
in recognizing that the halting problem reduces to this: at best
you'll be able to find situations where the stack exceeds a specific
size, but will not be able to prove it doesn't do so.

2) For analysis of stack space consumed by a function I would look at
http://gcc-melt.org/.  There may already be a solution; if not, it
would still provide a more effective analysis environment than
reconstructing control-flow graphs from assembly.

3) For call graph in linked programs, look into using libbfd from
binutils to extract data from elf files directly rather than
processing disassembly output.

Good luck, and if you need support for something in the compiler or
binutils (other than "how about a stack space analyzer") let me know.

Peter

> Thanks,
> - Wayne Uroda
>
> ------------------------------------------------------------------------------
> RSA(R) Conference 2012
> Mar 27 - Feb 2
> Save $400 by Jan. 27
> Register now!
> http://p.sf.net/sfu/rsa-sfdev2dev2
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users

------------------------------------------------------------------------------
RSA(R) Conference 2012
Mar 27 - Feb 2
Save $400 by Jan. 27
Register now!
http://p.sf.net/sfu/rsa-sfdev2dev2
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to