Worst Stack Size Report

The default Worst Stack Size report is in HTML format. It is generated from a template named wssreport.template provided as a text file that you can modify to customize the report. It uses four online JavaScript libraries:
  • Bootstrap,
  • JQuery,
  • Font Awesome,
  • VisJS.

These libraries are not provided. You need an internet connection when you open the report. Otherwise, you have to download the libraries (.css and .js files), copy them in the same folder as your report's, and modify the template file as follows:

Replace:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css">
…
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.js"></script>
with
<link rel="stylesheet" href="./bootstrap.min.css>
<link rel="stylesheet" href="./all.css">
<link rel="stylesheet" href="./vis.min.css">
…
<script src="./jquery-3.3.1.slim.min.js"></script>
<script src="./popper.min.js"></script>
<script src="./bootstrap.min.js"></script>
<script src="./vis.js"></script
The Worst Stack Size report is made of three parts.

Summary

Worst Stack Size per Entry Point table
entry point per thread
The Summary section displays a table with the Worst Stack Size calculated by the tools, given the information you provided. This number is provided in bytes.
The Worst Stack Size is given per entry point and per thread if you have entered the list of entry point threads of your application in the Settings. You can set the list of entry point threads of your application in the Build Settings:
  • In OneTest Embedded for Eclipse IDE, from Project > Properties menu and in the Properties window, from C/C++ Build > Settings, and in the right pane click General > Multi-thread options.
  • In OneTest Embedded Studio, from Settings > Configuration Settings > General > Multi-thread options > .
  • Edit the value field to enter the list of thread entry points. Use commas to separate the thread names.
The table displays the following information:
  • The number of control flows found in your application. A control flow is a set of successive calls starting from an entry point (each function that is never called by another one is considered as an entry point) to a function with no call or to an external function.
  • The number of control flows for which we have no estimation of the stack size. This happens when one of the functions in this control flow has not been executed or if it is an external function for which no estimation of the stack size is provided.

    If this number if greater than 0, it is highlighted in red because there is no way to be sure that the worst stack size is really the worst regarding the missing information.

  • The number of recursive control flows found in the application. If this number if greater than 0, it is highlighted in red because there is no way to be sure that the worst stack size is really the worst.
  • The number of functions in your application.
  • The number of functions without stack size estimation. These are the functions that have not been executed or the external functions for which we have not provided an estimation of the stack size. If this number if greater than 0, it is highlighted in red because we can't be sure that the worst stack size is really the worst.

    The information is given for each entry thread.

    So, if a piece of information in the summary is red, verify the worst stack size computed by the tool.

Total Stack Size vs. Maximum Stack Size graph
WSS graph
If you provide in the Settings the maximum Stack Size allowed and, optionally, a percentage of available Stack Size for security, the report displays also the total Stack Size and verify if this size does not go over the available Stack Size.
The Maximum Stack Size and Percentage of available Stack Size for security options can be set in the Settings as follows:
  • In OneTest Embedded for Eclipse IDE, from Project > Properties menu and in the Properties window, from C/C++ Build > Settings, and in the right pane click Application Profiling > Stack Size.
  • In OneTest Embedded Studio, from Settings > Configuration Settings > General > Application Profiling > Stack Size
  • Enter the values in the Maximum Stack Size and Percentage of available Stack Size for security fields.
In the report, you can compare the Stack Size or the sum of Stack Size with the maximum of Stack Size allowed and the percentage of available Stack Size for security if both options are provided in the settings.

In the toolbar that is under the graph, you can select the information to display or hide (all entry points, or for only one thread) and the number of control flows in the table. You can also show or hide the graph in the report from a button.

Details

The Details table lists by default the 10 first control flows with the biggest Stack Size and displays for each of them the following information:
  • The control flow, for example, the successive functions starting from an entry point (any function that is never called by another one is considered as an entry point) to a function with no call, or to an external function. Each function is identified by its name, its module (example: C file) between brackets, and by the line and column where this call to the next function calls appear in the code in parenthesis.
  • The estimation of the Stack Size. The information is blank if the tool has not been able to calculate the Stack Size for this control flow. In this case, the functions in the control flow that prevent us from computing the Stack Size are highlighted in red.

A drop down menu at the top of the table allows you to choose 10, 20, 30, 50, 100 or all the control flows to display.

Functions

The Functions table lists all the functions of your application, including external functions. The following information is provided for each function:
  • The module name (i.e. the C file) where the function is saved.,
  • The function name. This name is in red if there is no stack information for this function,
  • The number of functions called in the current one.
  • The Stack Size of the function in bytes.

Call Graph

The Call Graph part displays all the functions as an interactive call graph from left to right or from the top to the bottom, depending on the selector button position on the top of the call graph.

You can select a control flow in the table to highlight it in the call graph.

Feedback