fpvgcc
is a python script/package to help analyse code footprint on
embedded microcontrollers using GCC generated Map files.
This module uses information contained within .map
files generated by
gcc (when invoked with -Wl,-Map,out.map
), to provide easily
readable summaries of static memory usage at various levels of the code
hierarchy. This package generates no information that isn't already contained
within the .map
file.
The provided outputs can be used to gain insight into the relative sizes of included code, and aid in prioritizing static memory optimization for very low memory platforms. Some provided functionality may also deliver minor usability improvements to the workflow involved in parsing though generated assembly listings.
Warning
This package does not attempt to perform any kind of dynamic analysis. All memory usage reported refers only to static memory usage. This means the size of actual functions and global variables which are instantiated in the C code itself.
Anything on the call stack, such as function locals, will not be
accounted for. Similarly, anything in the heap which is allocated at
runtime using malloc
or similar will not be accounted for.
Due to this, the utility of this module is likely limited to code written for highly memory constrained embedded microcontrollers, where dynamic memory allocation is anyway avoided when possible.
This script was first written based on the format of mapfiles
generated by msp430-elf-gcc, v4.9.1
. Over time, it was modifed to
accept elements found in mapfiles generated by later versions and gcc-based
toolchains for other platforms.
Still, remember that the file parsing was implemented by observing the content of real mapfiles, and not based on a file format specification. Even with toolchains it was written to support, there are large sections of the file that are not actually used. Due to this, the outputs generated are not always accurate. Various boundary conditions result in minor errors in size reporting.
The following more serious issues are known. They should be fixed at some point, but for the moment I've chosen to work around them :
- Having two C filenames with the same name (or generating the same obj name) in your tree will cause parsing to break on some platforms / toolchains.
The latest version of the documentation, including installation, usage, and API/developer notes can be found at ReadTheDocs.
The latest version of the sources can be found at GitHub. Please use GitHub's features to report bugs, request features, or submit pull/merge requests.
The principle author for fpvgcc
is Chintalagiri Shashank. The author can
be contacted if necessary via the information on the
author's github profile . See the AUTHORS file
for a full list of collaborators and/or contributing authors, if any.
fpvgcc
is distributed under the terms of the
GPLv3 license .
A copy of the text of the license is included along with the sources.