Stack Analysis with VerOStack

VeroStack Logo

VerOStack statically examines an application’s maximum or worst-case stack usage scenario. It does this by examining the executable image of the application. It can thus examine “all” tasks and “all” execution paths within the application. It does not fall prey to only examining a particular path executed by a specific test driver as happens with dynamic testing tools.

VerOStack

 

Benefits:

VerOStack examines the binary executable to statically determine the actual worst-case stack size. This is a precise measurement technique not influenced by particular dynamic test runs and their variance based on a particular execution path. Furthermore, it can take into account not only the current program but also other programs that will run on the target at the same time, such as other applications running on a real-time operating system (RTOS) or in combination with the RTOS itself. It can thus provide truly meaningful data on target memory requirements.

VerOStack supports programs written in Ada, C, C++ and Assembly languages.

VerOStack scans the executable image; it finds all functions; and determines how much stack each of the functions uses, i.e. the stack-frame size for each function.

The application developer then uses the VerOStack editor to specify the entry point of the application and the procedures that represent tasks/processes in the application, if any (as each of these has its own stack).

VerOStack then analyses the calling graph of the application. It detects:

  • All direct function calls
  • direct and indirect recursion
  • use of calls via pointers
  • indirect calls (e.g. method calls via dispatch tables in C++)

If the application uses dynamic behavior (e.g. calls via pointers), VerOStack indicates where the application developer must resolve this to calculate the worst-case stack usage for the entire application.

The VerOStack editor is used to resolve these indirections. Using this information, VerOStack calculates the worst-case stack size for each stack in the application and generates reports which can be used as evidence in a certification data package.

After VerOStack calculates the worst-case stack sizes for all the static function calls in your application, it provides a convenient way to account for the potential occurrence of dynamic execution elements. Dynamic execution elements occur when calls of functions are only known when the program is running. To resolve these, the VerOStack user (often the application developer) must help to constrain the intended behavior. VerOStack simplifies this process by providing the user with numerous options to help resolve dynamic stack-sizing issues.

When the references are completed by the user, VerOStack produces a table that specifies the worst-case stack used for every stack in the application.

The VerOStack results may be output in XML or comma delimited form so that they can be archived or fed to another process. VerOStack results may also be formed into an HTML report file through the use of a stylesheet.

Not only can VerOStack can be used to analyze the stack depth used by the application, it can also analyze that required by the operating system that supports the application. Thus it can provide a measurement of the requirements for the total software system to be deployed.

Qualification:

A qualification package is available so that VerOStack may be used as a verification tool in a DO-178B/DO-178C certification. VerOStack was previously used on the Boeing 787 program to aid in its certification.