# Resource analyzer

The resource analyzer is a tool that determines the stack usage (in
bytes) for each function in an executable ELF file. The stack usage
information is output as an SVG file that contains an annotated call
graph of the executable.

Note

Python version 2.7 or higher is required to run the resource analyzer,
which is a standalone tool and is not part of the compiler.

## Usage

The following procedure explains how to use the resource analyzer.

1. Run the resource analyzer on an executable ELF file. For example:

llvm-arm-ra.py <application>
        Copy to clipboard

    This command creates a DOT file named cfg.dot. To create the output
file with a different name, use the -c &lt;filename&gt; option.

    The resource analyzer is assumed to be stored in
&lt;install\_dir&gt;/tools/bin/.
2. Create an SVG file:

    Use the Graphviz dot utility to convert the DOT file into an SVG
file. For example:

dot -Tsvg cfg.dot -o call_graph.svg
        Copy to clipboard

    Where:

    - -Tsvg specifies the input DOT file
    - -o specifies the name of the output SVG file
3. View the SVG file in your browser by specifying the file pathname in
the browser address bar. For example:

    *file://foo/bar/call\_graph.svg*

    The SVG file displays the call graph for the executable file,
annotated with the stack usage (in bytes) for each function.

![../_images/resource_analyzer_call_graph_example.png](data:image/png;base64,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)

**Call graph example**

## Options

The resource analyzer can be controlled by command line options. For
example:

llvm-arm-ra.py <application> -o <filename>
    Copy to clipboard

### Descriptions

**-c &lt;filename&gt;** | **–cfg &lt;filename&gt;**

> 
> 
> Specify the name of the DOT file to be created. The default setting
> is cfg.dot.

**-d &lt;filename&gt;** | **–objdump\_tool &lt;filename&gt;**

> 
> 
> Specify the pathname of the objdump utility to be used to generate
> objdump data.
> 
> - For 32-bit ELF files, the default executable is
> arm-linux-gnueabi-objdump.
> - For 64-bit ELF files, it is aarch64-linux-gnu-objdump.
> 
> 
> 
> The resource analyzer generates an error message if it cannot find
> these executables on the system PATH.

**-e &lt;filename&gt;** | **–edge\_file &lt;filename&gt;**

> 
> 
> Use an edge file to create custom edges in the generated call graph.
> The specified edge file is a text file that contains pairs of
> function names. Each line in the file has the following format:
> 
> 
> `f1:f2`
> 
> 
> The result is the addition of a custom edge (from function f1 to
> function f2) in the call graph. However, it might add to the stack
> usage of f1, if and when applicable.

**-f &lt;filename&gt;** | **–function\_file &lt;filename&gt;**

> 
> 
> Use a function file to limit the generated call graph to the
> specified functions. The specified function file is a text file that
> contains a list of function names. Only the functions specified in
> this list will be included in the call graph.

**-h** | **–help**

> 
> 
> Display resource analyzer command and option summary.

**-o &lt;filename&gt;** | **–objdump\_file &lt;filename&gt;**

> 
> 
> Specify the filename of the generated objdump\_file.

**-v** | **–verbose**

> 
> 
> Display detailed debug output for the resource analyzer.

## Notes

### Recursive functions

The resource analyzer does not report stack usage information for
recursive functions.

### Call graph cycles

If two functions f1 and f2 call each other (thus creating a cycle in
the call graph), the resource analyzer removes edges from the call
graph until the cycle is broken.

In the example call graph in [Usage](https://docs.qualcomm.com/doc/80-VB419-99/topic/resource_analyzer.html#sec-usage), the functions
foo and bar call each other. In this case, the resource analyzer
keeps the edge foo -&gt; bar but removes the edge bar -&gt; foo, thus
breaking the cycle.

Note

Edges removed by the resource analyzer are displayed in the
call graph with dotted lines.

### Missing main functions

For input ELF files (such as \*.so) that do not have a main function,
the resource analyzer creates a dummy start root node and connects
this node to each function in the file that is not called by another
function.

![../_images/resource_analyzer_missing_main_funcs.png](data:image/png;base64,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)

**Example of a dummy root node connected to functions**

### dot utility

The dot utility (which is part of the Graphviz package) is required
to convert the CFG file to SVG format.

On Linux, install Graphviz with the following command:

apt-get install gv
    Copy to clipboard

On Windows, download Graphviz from the following link:
[http://www.graphviz.org/Download.php](http://www.graphviz.org/Download.php)

## Algorithm

The resource analyzer determines the stack usage as follows:

`Stack size of function F = Sum (stack size of {push, sub}
instructions of F + max{stack sizes of all functions called by F})`

### push

- Stack size of push instruction = register size for architecture \*
number of registers pushed
- Register size = 4 bytes for 32-bit architectures or 8 bytes for
64-bit architectures

    For example:

    `push {r3, lr}``
- Stack size of push instruction = 4 bytes \* 2 registers = 8 bytes for
32-bit architectures, or 8 bytes \* 2 registers = 16 bytes for 64-bit
architectures

### sub

- Stack size of sub instruction = value of the non-negative immediate
that modifies the stack pointer (sp)

    For example:

> 
> 
> `sub sp, sp, #1280`
- Stack size of sub instruction = 1280 bytes

Last Published: May 10, 2024

[Previous Topic
Bare metal environment support](https://docs.qualcomm.com/bundle/publicresource/80-VB419-99/topics/bare_metal_environment_support.md) [Next Topic
Compiler security tools](https://docs.qualcomm.com/bundle/publicresource/80-VB419-99/topics/compiler_security_tools.md)