Symbol Formats

For ease of implementation the output of the lprof and lcov programs list internal symbols from the compiler rather than entirely meaningful names. This document describes how to decode these symbols.

Firstly here is a synopsis of the terminology used:

External

An external symbol coresponds to something that may be visible outside the file in which it is declared, such as something declared within a library or at the outermost scope level.

Internal

Any symbol that is not visible outside the file in which it is declared in an internal symbol.

Here are the formats that are used and their meanings:

F_ name

The external function name. Example:

	F_close

F_ name _ line _ idcode [ _ file ]*

The internal function name, declared on line line (or thereabouts). idcode is a meaningless number used to disambiguate multiple uses of the same name within one file. One or more _ file suffixes are added at link time to indicate the file containing the declaration. Example:

	F_Exec_data_abort_344_12435_execute

F_ name _ overloadnum

The overloaded external function name. Since there are multiple distinct declarations of name that cannot be disambiguated using meaningless internal codes a slightly meaningful number is used instead. overloadnum is the count of this particular declaration. Counting starts at 1 for the overloaded declaration and 2 for the first "real" declaration. Examples:

	F_print1_5

E_ name _ line _ idcode [ _ file ]*

A call to the function name that occurs on line line (or thereabouts) of file file. Example:

	E_wait_for_26_11245_utils

T_ name

The external type name. Example:

	T_int

T_ name _ line _ idcode [ _ file ]*

The internal type name, declared on line line (or thereabouts) of file file. Example:

	T_mytype_135_11232_foo