6.3.3 Function Information

For each C function, printed before the function’s assembly label (search for the function’s name that is immediately followed by a colon :), is general information relating to the resources used by that function. A typical printout is shown in the diagram below. Most of the information is self-explanatory, but special comments follow.

The locations shown use the format offset[space]. For example, an indicated location of 42[BANK0] means that the variable was located in the bank 0 memory space and that it appears at an offset of 42 bytes into the compiled stack component in this space (see 5.7.2.1 Compiled Stack Operation). It does mean the variable was assigned address 42. Any other object with the address 42[BANK0] is at the same address.

Whenever pointer variables are shown, they are often accompanied by the targets that the pointer can reference, these targets appear after the arrow -> (see 6.3.5 Pointer Reference Graph). The auto and parameter section of this information is especially useful because the size of pointers is dynamic (see 5.3.6 Pointer Types). This information shows the actual number of bytes assigned to each pointer variable.

The tracked objects information is generally of no concern to programmers. It indicates the known state of the currently selected RAM bank on entry to the function and at its exit points. It also indicates the bank selection bits that did, or did not, change in the function.

The hardware stack information shows how many stack levels were taken up by this function alone, and the total levels used by this function and any functions it calls. Note that this is only valid for functions that are have not been inlined.

Functions that use a non-reentrant model are those that allocate auto and parameter variables to a compiled stack and which are, as a result, not reentrant. If a function is marked as being reentrant, it allocates stack-based variables to the software stack and can be reentrantly called.

Figure 6-2. Function Information