scitools.com

Solution: Shared Tasks

Calls graphs with global objects are useful for finding all global objects accessed by a call tree. But, what if you want to find which global objects are shared between multiple call trees?

image

Architectures are used to tag the root functions definng the call trees. Then shared global objects can be found by graphing or exporting the architecture. It's also possible to start from an object and find the root functions with the Shared Tasks - By Object graph.

Architecture Structure

Working with multiple call trees means working with multiple root functions. To pass multiple entities to a plugin, the entities must be grouped together in an architecture. A simple architecture can have the format:

The shared tasks plugins also support additional fields for the tasks. These fields are displayed on the graph under the task name, and in the table as columns. Currently supported fields are 'core' and 'priority'. A field can be used instead of an architecture name containing the word tasks.

Finally, the architecture can be used to identify functions that enable and disable interrupts. References protected by these functions (preceeded by a call to the disable function and followed by a call to the enable function) are identified by the plugins. The naming pattern interrupt control is (ommitting the tasks):

More documentation and scripts are available in the README ↗ file in the repository and in the two blog articles Finding Shared Global Objects ↗ and Visualizing Shared Tasks ↗. Also check out concurrency plugins.

Shared Tasks Plugins

Name Kind
Shared Tasks Graph
Shared Tasks Graph
Shared Tasks CSV Interactive Report
Shared Tasks Graph Interactive Report
Shared Tasks Graphs AI Interactive Report