OTAWA  2.0
Framework to perform machine analysis and compute WCET.
Program Representation

Classes

class  otawa::BaseBundle< I >
 
class  otawa::Bundle
 
class  otawa::Condition
 
class  otawa::DecodingException
 
class  otawa::DelayedInfo
 
class  otawa::File
 
class  otawa::Inst
 
class  otawa::Inst::Kind
 
class  otawa::Manager
 
class  otawa::OutOfSegmentException
 
class  otawa::Process
 
class  otawa::ProgItem
 
class  otawa::Segment
 
class  otawa::Symbol
 
class  otawa::UnsupportedFeatureException
 
class  otawa::WorkSpace
 

Enumerations

enum  otawa::delayed_t { otawa::DELAYED_None = 0, otawa::DELAYED_Always = 1, otawa::DELAYED_Taken = 2 }
 

Functions

p::id< int > otawa::ARGC ("otawa::ARGC", -1)
 Argument count as passed to the program (int). More...
 
p::id< char ** > otawa::ARGV ("otawa::ARGV", 0)
 Argument values as passed to the program (char **). More...
 
Identifier< Addressotawa::ARGV_ADDRESS ("otawa::ARGV_ADDRESS", Address::null)
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
Identifier< Addressotawa::AUXV_ADDRESS ("otawa::AUXV_ADDRESS", Address::null)
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
p::id< hard::CacheConfiguration * > otawa::CACHE_CONFIG ("otawa::CACHE_CONFIG", 0)
 This property is used to pass the cache configuration directly to the platform. More...
 
p::id< elm::xom::Element * > otawa::CACHE_CONFIG_ELEMENT ("otawa::CACHE_CONFIG_ELEMENT", 0)
 Gives an XML element containing the cache configuration. More...
 
p::id< elm::sys::Pathotawa::CACHE_CONFIG_PATH ("otawa::CACHE_CONFIG_PATH", "")
 Gives the path of file containing the cache configuration. More...
 
p::feature otawa::CONDITIONAL_INSTRUCTIONS_FEATURE ("otawa::CONDITIONAL_INSTRUCTIONS_FEATURE", new Maker< NoProcessor >())
 This feature is provided by Process which architecture provides conditional instructions. More...
 
p::id< elm::xom::Element * > otawa::CONFIG_ELEMENT ("otawa::CONFIG_ELEMENT", 0)
 XML element containing the configuration of the current computation. More...
 
p::id< elm::sys::Pathotawa::CONFIG_PATH ("otawa::CONFIG_PATH", "")
 Path to the XML configuration file used in this computation. More...
 
p::feature otawa::CONTROL_DECODING_FEATURE ("otawa::CONTROL_DECODING_FEATURE", new Maker< NoProcessor >())
 This feature is usually provided by the loader providing decoding facility for control instructions. More...
 
Identifier< delayed_totawa::DELAYED ("otawa::DELAYED", DELAYED_None)
 This kind of property is put on control branch to know if the following instruction is executed as part of a delayed branch. More...
 
p::feature otawa::DELAYED2_FEATURE ("otawa::DELAYED2_FEATURE", new Maker< NoProcessor >())
 This Process feature informs that the actual architecture supports delayed branch. More...
 
p::feature otawa::DELAYED_FEATURE ("otawa::DELAYED_FEATURE", new Maker< NoProcessor >())
 This feature is put on processes by the loader to inform that the control instruction of the current instruction contains delayed branches. More...
 
Identifier< DelayedInfo * > otawa::DELAYED_INFO ("otawa::DELAYED_INFO", 0)
 This property provides access to delayed branch information of the current program. More...
 
p::id< char ** > otawa::ENVP ("otawa::ENVP", 0)
 Argument values as passed to the program (char **). More...
 
Identifier< Addressotawa::ENVP_ADDRESS ("otawa::ENVP_ADDRESS", Address::null)
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
p::feature otawa::FLOAT_MEMORY_ACCESS_FEATURE ("otawa::FLOAT_MEMORY_ACCES_FEATURE", new Maker< NoProcessor >())
 This feature is usually asserted by processes that provides access to the memory segment of the program with float values. More...
 
Identifier< Stringotawa::FUNCTION_LABEL ("otawa::FUNCTION_LABEL", "")
 This property is put on instruction. More...
 
Identifier< Stringotawa::LABEL ("otawa::LABEL", "")
 Property with this identifier is put on instructions or basic blocks which a symbol is known for. More...
 
p::id< stringotawa::LOAD_PARAM ("otawa::LOAD_PARAM", "")
 Identifier used for Manager::load() configuration. More...
 
p::id< Loader * > otawa::LOADER ("otawa::LOADER", 0)
 Identifier of the property indicating the loader to use. More...
 
p::id< stringotawa::LOADER_NAME ("otawa::LOADER_NAME", "")
 Identifier of the property indicating a name (CString) of the loader to use. More...
 
p::feature otawa::MEMORY_ACCESS_FEATURE ("otawa::MEMORY_ACCESS_FEATURE", new Maker< NoProcessor >())
 This feature is usually asserted by processes that provides access to the memory segment of the program. More...
 
p::feature otawa::MEMORY_ACCESSES ("otawa::MEMORY_ACCESSES", new Maker< NoProcessor >())
 This feature, put on a process, informs that the functional simulator provides the ability to give information about memory accesses. More...
 
p::id< elm::xom::Element * > otawa::MEMORY_ELEMENT ("otawa::MEMORY_ELEMENT", 0)
 Passed to manager::load() to give the XML element describing the memory configuration. More...
 
p::id< hard::Memory * > otawa::MEMORY_OBJECT ("otawa::MEMORY_OBJECT", 0)
 Passed to manager::load() to set the memory configuration. More...
 
p::id< elm::sys::Pathotawa::MEMORY_PATH ("otawa::MEMORY_PATH", "")
 Passed to Manager::load() to give the path of the file describing the memory. More...
 
p::id< stringotawa::NO_RETURN_FUNCTION ("otawa::NO_RETURN_FUNCTION", "")
 this property may be used to pass information about the non-returning behaviour of some functions. More...
 
p::id< boolotawa::NO_STACK ("otawa::NO_STACK", false)
 This property shows that no stack need to be allocated. More...
 
p::id< boolotawa::NO_SYSTEM ("otawa::NO_SYSTEM", false)
 This property shows that the system does not need to by simulated when the binary image is built. More...
 
p::id< hard::Platform * > otawa::PLATFORM ("otawa::PLATFORM", 0)
 Identifier of the property indicating a platform (Platform *) to use. More...
 
p::id< stringotawa::PLATFORM_NAME ("otawa::PLATFORM_NAME", "")
 Identifier of the property indicating the name (CString) of the platform to use. More...
 
p::id< hard::Processor * > otawa::PROCESSOR ("otawa::PROCESSOR", 0)
 Gives the processor to use in the current computation. More...
 
p::id< elm::xom::Element * > otawa::PROCESSOR_ELEMENT ("otawa::PROCESSOR_ELEMENT", 0)
 XML element containing the configuration of the processor. More...
 
p::id< elm::sys::Pathotawa::PROCESSOR_PATH ("otawa::PROCESSOR_PATH", "")
 Path to the XML configuration file of the processor. More...
 
p::feature otawa::REGISTER_USAGE_FEATURE ("otawa::REGISTER_USAGE_FEATURE", new Maker< NoProcessor >())
 This feature is usually asserted by processes that provides access to the register usage information. More...
 
p::feature otawa::SEMANTICS_INFO ("otawa::SEMANTICS_INFO", new Maker< NoProcessor >())
 This feature is present when the loader provides implementation of semantics information. More...
 
p::feature otawa::SEMANTICS_INFO_EXTENDED ("otawa::SEMANTICS_INFO_EXTENDED", new Maker< NoProcessor >())
 This feature is present when the loader provides implementation of extended semantics information. More...
 
p::feature otawa::SEMANTICS_INFO_FLOAT ("otawa::SEMANTICS_INFO_FLOAT", new Maker< NoProcessor >())
 This feature is present when the loader provides implementation of floating-point semantic instructions. More...
 
p::id< sim::Simulator * > otawa::SIMULATOR ("otawa::SIMULATOR", 0)
 This property defines the used the used simulator when a simulator is needed to perform simulation. More...
 
p::id< stringotawa::SIMULATOR_NAME ("otawa::SIMULATOR_NAME", "")
 Name of the simulator to use. More...
 
p::feature otawa::SOURCE_LINE_FEATURE ("otawa::SOURCE_LINE_FEATURE", new Maker< NoProcessor >())
 This feature asserts that a table matching program address and source (file, lines) is available. More...
 
Identifier< Addressotawa::SP_ADDRESS ("otawa::SP_ADDRESS", Address::null)
 This feature is put on the process to get information about the built image. More...
 
Identifier< Symbol * > otawa::SYMBOL ("otawa::SYMBOL", 0)
 This property carries the symbol attached to an instruction. More...
 
p::id< Addressotawa::TASK_ADDRESS ("otawa::TASK_ADDRESS", Address::null)
 This property, passed to the load configuration, select the task entry by its address. More...
 
p::id< stringotawa::TASK_ENTRY ("otawa::TASK_ENTRY", "main")
 This property, passed to the load configuration, gives the name of the entry function of the current task. More...
 
p::feature otawa::VLIW_SUPPORTED ("otawa::VLIW_SUPPORTED", new Maker< NoProcessor >())
 This feature is provided on Process objects by architecture implementing VLIW facilities. More...
 

Variables

static Manager otawa::Manager::_def
 Default manager. More...
 
p::id< int > otawa::ARGC
 Argument count as passed to the program (int). More...
 
p::id< char ** > otawa::ARGV
 Argument values as passed to the program (char **). More...
 
Identifier< Addressotawa::ARGV_ADDRESS
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
Identifier< Addressotawa::AUXV_ADDRESS
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
p::id< hard::CacheConfiguration * > otawa::CACHE_CONFIG
 This property is used to pass the cache configuration directly to the platform. More...
 
p::id< elm::xom::Element * > otawa::CACHE_CONFIG_ELEMENT
 Gives an XML element containing the cache configuration. More...
 
p::id< elm::sys::Pathotawa::CACHE_CONFIG_PATH
 Gives the path of file containing the cache configuration. More...
 
p::feature otawa::CONDITIONAL_INSTRUCTIONS_FEATURE
 This feature is provided by Process which architecture provides conditional instructions. More...
 
p::id< elm::xom::Element * > otawa::CONFIG_ELEMENT
 XML element containing the configuration of the current computation. More...
 
p::id< elm::sys::Pathotawa::CONFIG_PATH
 Path to the XML configuration file used in this computation. More...
 
p::feature otawa::CONTROL_DECODING_FEATURE
 This feature is usually provided by the loader providing decoding facility for control instructions. More...
 
Identifier< delayed_totawa::DELAYED
 This kind of property is put on control branch to know if the following instruction is executed as part of a delayed branch. More...
 
p::feature otawa::DELAYED2_FEATURE
 This Process feature informs that the actual architecture supports delayed branch. More...
 
p::feature otawa::DELAYED_FEATURE
 This feature is put on processes by the loader to inform that the control instruction of the current instruction contains delayed branches. More...
 
Identifier< DelayedInfo * > otawa::DELAYED_INFO
 This property provides access to delayed branch information of the current program. More...
 
p::id< char ** > otawa::ENVP
 Argument values as passed to the program (char **). More...
 
Identifier< Addressotawa::ENVP_ADDRESS
 This feature is put on the process object whose image supports Unix-like argument passing. More...
 
p::feature otawa::FLOAT_MEMORY_ACCESS_FEATURE
 This feature is usually asserted by processes that provides access to the memory segment of the program with float values. More...
 
Identifier< stringotawa::FUNCTION_LABEL
 This property is put on instruction. More...
 
Identifier< stringotawa::LABEL
 Property with this identifier is put on instructions or basic blocks which a symbol is known for. More...
 
p::id< stringotawa::LOAD_PARAM
 Identifier used for Manager::load() configuration. More...
 
p::id< Loader * > otawa::LOADER
 Identifier of the property indicating the loader to use. More...
 
p::id< stringotawa::LOADER_NAME
 Identifier of the property indicating a name (CString) of the loader to use. More...
 
p::feature otawa::MEMORY_ACCESS_FEATURE
 This feature is usually asserted by processes that provides access to the memory segment of the program. More...
 
p::feature otawa::MEMORY_ACCESSES
 This feature, put on a process, informs that the functional simulator provides the ability to give information about memory accesses. More...
 
p::id< elm::xom::Element * > otawa::MEMORY_ELEMENT
 Passed to manager::load() to give the XML element describing the memory configuration. More...
 
p::id< hard::Memory * > otawa::MEMORY_OBJECT
 Passed to manager::load() to set the memory configuration. More...
 
p::id< elm::sys::Pathotawa::MEMORY_PATH
 Passed to Manager::load() to give the path of the file describing the memory. More...
 
p::id< stringotawa::NO_RETURN_FUNCTION
 this property may be used to pass information about the non-returning behaviour of some functions. More...
 
p::id< boolotawa::NO_STACK
 This property shows that no stack need to be allocated. More...
 
p::id< boolotawa::NO_SYSTEM
 This property shows that the system does not need to by simulated when the binary image is built. More...
 
p::id< hard::Platform * > otawa::PLATFORM
 Identifier of the property indicating a platform (Platform *) to use. More...
 
p::id< hard::Platform::Identification * > otawa::PLATFORM_IDENTFIER ("otawa::PLATFORM_IDENTFIER", 0)
 Identifier of the property indicating the identifier (PlatformId) of the loader to use. More...
 
p::id< stringotawa::PLATFORM_NAME
 Identifier of the property indicating the name (CString) of the platform to use. More...
 
p::id< hard::Processor * > otawa::PROCESSOR
 Gives the processor to use in the current computation. More...
 
p::id< elm::xom::Element * > otawa::PROCESSOR_ELEMENT
 XML element containing the configuration of the processor. More...
 
p::id< elm::sys::Pathotawa::PROCESSOR_PATH
 Path to the XML configuration file of the processor. More...
 
p::feature otawa::REGISTER_USAGE_FEATURE
 This feature is usually asserted by processes that provides access to the register usage information. More...
 
p::feature otawa::SEMANTICS_INFO
 This feature is present when the loader provides implementation of semantics information. More...
 
p::feature otawa::SEMANTICS_INFO_EXTENDED
 This feature is present when the loader provides implementation of extended semantics information. More...
 
p::feature otawa::SEMANTICS_INFO_FLOAT
 This feature is present when the loader provides implementation of floating-point semantic instructions. More...
 
p::id< sim::Simulator * > otawa::SIMULATOR
 This property defines the used the used simulator when a simulator is needed to perform simulation. More...
 
p::id< elm::stringotawa::SIMULATOR_NAME
 Name of the simulator to use. More...
 
p::feature otawa::SOURCE_LINE_FEATURE
 This feature asserts that a table matching program address and source (file, lines) is available. More...
 
Identifier< Addressotawa::SP_ADDRESS
 This feature is put on the process to get information about the built image. More...
 
Identifier< Symbol * > otawa::SYMBOL
 This property carries the symbol attached to an instruction. More...
 
p::id< Addressotawa::TASK_ADDRESS
 This property, passed to the load configuration, select the task entry by its address. More...
 
p::id< stringotawa::TASK_ENTRY
 This property, passed to the load configuration, gives the name of the entry function of the current task. More...
 
p::feature otawa::VLIW_SUPPORTED
 This feature is provided on Process objects by architecture implementing VLIW facilities. More...
 

Detailed Description

Description

The program representation module of OTAWA is the main module providing all details about the processed program. It provides a representation built from the program binary form (Process) and provides a workspace to perform analyses (WorkSpace). Usually, a workspace containing a process is provided by the manager (otawa::Manager) as a simple Manager::load() call:

#include <otawa/otawa.h>
using namespace elm;
using namespace otawa;
try {
PropList props;
Processor::VERBOSE(props) = true;
WorkSpace *ws = MANAGER.load("path_to_file", props);
...
return 0;
}
catch(otawa::Exception& e) {
cerr << "ERROR: " << e.message() << io::endl;
return 1;
}

The load may possibly fail and throw an otawa::Exception exception.

The Process class describes the full program and its execution environment as different items of description:

To load a program, the following properties may be useful:

Expert users can also use the following properties:

A commonly used propertu with IPET method is the property below:

Notice that most properties listed above may be used with owcet Command command or most OTAWA command using "--add-prop" option. Ask for command description with "-h" option or look at otawa::Application for more details.

VLIW Support

VLIW (Very Long Instruction Word) is a technology allowing to execute in parallel several instructions, in order, without the logic needed to analyze dependencies between instructions and to re-order instructions as found in out-of-order architectures. Instruction are grouped into bundles that are guaranteed by compiler to be executable in parallel.

For instance, runned on a VLIW computer, the ARM instructions below perform actually an exchange of register R0 and R1 (end of bundle is denoted by double semi-colon):

MOV R0, R1;
MOV R1, R0;;

In fact, when the bundle above is executed, registers R1 and R0 are read in parallel and the assignment to R0, respectively to R1, is also performed in parallel.

OTAWA provides a specific support for VLIW but the bundle-aware resources can be used as is by non-VLIW instruction set: bundles will be composed of only one instruction in this case. Whatever, using bundle-aware architecture allows adaptation for free of analyzes to VLIW and non-VLIW architectures. Following bundle facilities are available:

A special attention must be devoted to supporting semantic instruction. Model of execution of semantic instruction is purely sequential. Hence, VLIW instruction set semantic cannot be preserved if semantic instructions of machine are executed sequentially. Re-using the example of register exchange above, the straight translation into semantics will only copy R1 to R0:

MOV R0, R1
SET(R0, R1)
MOV R1, R0
SET(R1, R0)

A simple trick allows maintaining the current semantic instruction behavior and to adapt without effort existing analysis to VLIW: just copy write-back registers into temporaries and delay write-back to the end of execution of semantic instructions. Therefore, the semantic instructions implementing a machine instructions of a bundle need only to be concatenated and ended by write-back operations. uses these temporaries instead (our example continued):

MOV R0, R1
SET(T1, R1) // T1 refers to R0
MOV R1, R0 // T2 refers to R1
SET(T2, R0)
SET(R0, T1)
SET(R1, R2)

This requires the help of the VLIW instructions to build such a sequence. Usually, the template to translate into semantic instructions looks like:

MOV ri, rj
SET(ri, rj)

For VLIW, this template must be re-defined to perform write-back on temporaries:

MOV ri, rj
semantic
SET(temp, rj)
write-back (1 temporary used)
SET(ri, temp)

Write-back sequence is obtained by a call to Inst::semWriteBack() that returns also the number of used temporaries and Inst::semInsts() allows generating the semantic instruction using a specific temporary base. To detail the example, we get:

Inst(MOV R0, R1).semInsts(block, T1) = 1
SET(T1, R1)
Inst(MOV R1, R0).semInsts(block, T2) = 1
SET(T2, R0)
Inst(MOV R0, R1).semWriteBack(block, T1) = 1
SET(R0, T1)
Inst(MOV R1, R0).semWriteBack(block, T2) = 1
SET(R1, T2)

Processes

A process is the representation of the program at the start of the execution. A process mainly provides the content of the different memories composing the platform updated to with the bits of the program. In addition, the process provides also details bout the underlying architecture (instruction set, endianness, registers, branching model, etc) or about the capacities of the loader.

A simple way to get information about capabilities of an architecture is to look to features provided by the process. They are automatically transfered to any workspace using the process. For example, to test if the architecture supports "delayed branches", one can write:

WorkSpace *ws = ...;
if(ws->provides(DELAYED_BRANCHEES)
...;

The following features are usually provided by processes:

Enumeration Type Documentation

◆ delayed_t

Enumeration giving the type of delayed modes used by control instruction.

Enumerator
DELAYED_None 

No delayed instruction.

DELAYED_Always 

The delayed instruction is ever executed, branch taken or not.

DELAYED_Taken 

The delayed instruction is only executed when the branch is taken.

Function Documentation

◆ ARGC()

p::id<int> otawa::ARGC ( "otawa::ARGC"  ,
1 
)

Argument count as passed to the program (int).

◆ ARGV()

p::id<char **> otawa::ARGV ( "otawa::ARGV"  ,
 
)

Argument values as passed to the program (char **).

◆ ARGV_ADDRESS()

Identifier<Address> otawa::ARGV_ADDRESS ( "otawa::ARGV_ADDRESS"  ,
Address::null   
)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the argv vector. Hooks

◆ AUXV_ADDRESS()

Identifier<Address> otawa::AUXV_ADDRESS ( "otawa::AUXV_ADDRESS"  ,
Address::null   
)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the auxv vector. Hooks

◆ CACHE_CONFIG()

p::id<hard::CacheConfiguration *> otawa::CACHE_CONFIG ( "otawa::CACHE_CONFIG"  ,
 
)

This property is used to pass the cache configuration directly to the platform.

◆ CACHE_CONFIG_ELEMENT()

p::id<elm::xom::Element *> otawa::CACHE_CONFIG_ELEMENT ( "otawa::CACHE_CONFIG_ELEMENT"  ,
 
)

Gives an XML element containing the cache configuration.

◆ CACHE_CONFIG_PATH()

p::id<elm::sys::Path> otawa::CACHE_CONFIG_PATH ( "otawa::CACHE_CONFIG_PATH"  ,
""   
)

Gives the path of file containing the cache configuration.

◆ CONDITIONAL_INSTRUCTIONS_FEATURE()

p::feature otawa::CONDITIONAL_INSTRUCTIONS_FEATURE ( "otawa::CONDITIONAL_INSTRUCTIONS_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is provided by Process which architecture provides conditional instructions.

A common example are the ARM microprocessors which instructions, at least in normal mode, can be conditional. The architectures providing this feature implement the method Inst::condition() and Inst::updateCondition().

◆ CONFIG_ELEMENT()

p::id<elm::xom::Element *> otawa::CONFIG_ELEMENT ( "otawa::CONFIG_ELEMENT"  ,
 
)

XML element containing the configuration of the current computation.

◆ CONFIG_PATH()

p::id<elm::sys::Path> otawa::CONFIG_PATH ( "otawa::CONFIG_PATH"  ,
""   
)

Path to the XML configuration file used in this computation.

◆ CONTROL_DECODING_FEATURE()

p::feature otawa::CONTROL_DECODING_FEATURE ( "otawa::CONTROL_DECODING_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is usually provided by the loader providing decoding facility for control instructions.

Provided Methods

◆ DELAYED()

Identifier<delayed_t> otawa::DELAYED ( "otawa::DELAYED"  ,
DELAYED_None   
)

This kind of property is put on control branch to know if the following instruction is executed as part of a delayed branch.

Feature
Hook

◆ DELAYED2_FEATURE()

p::feature otawa::DELAYED2_FEATURE ( "otawa::DELAYED2_FEATURE"  ,
new Maker< NoProcessor () 
)

This Process feature informs that the actual architecture supports delayed branch.

Properties

◆ DELAYED_FEATURE()

p::feature otawa::DELAYED_FEATURE ( "otawa::DELAYED_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is put on processes by the loader to inform that the control instruction of the current instruction contains delayed branches.

Provider
  • program loader
Properties

◆ DELAYED_INFO()

Identifier<DelayedInfo *> otawa::DELAYED_INFO ( "otawa::DELAYED_INFO"  ,
 
)

This property provides access to delayed branch information of the current program.

Hooks
Features

◆ ENVP()

p::id<char **> otawa::ENVP ( "otawa::ENVP"  ,
 
)

Argument values as passed to the program (char **).

◆ ENVP_ADDRESS()

Identifier<Address> otawa::ENVP_ADDRESS ( "otawa::ENVP_ADDRESS"  ,
Address::null   
)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the envp vector. Hooks

◆ FLOAT_MEMORY_ACCESS_FEATURE()

p::feature otawa::FLOAT_MEMORY_ACCESS_FEATURE ( "otawa::FLOAT_MEMORY_ACCES_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is usually asserted by processes that provides access to the memory segment of the program with float values.

Provided Methods

◆ FUNCTION_LABEL()

Identifier<String> otawa::FUNCTION_LABEL ( "otawa::FUNCTION_LABEL"  ,
""   
)

This property is put on instruction.

An instruction may accept many properties of this type.

Hooks
Features

◆ LABEL()

Identifier<String> otawa::LABEL ( "otawa::LABEL"  ,
""   
)

Property with this identifier is put on instructions or basic blocks which a symbol is known for.

Hooks
Features

◆ LOAD_PARAM()

p::id<string> otawa::LOAD_PARAM ( "otawa::LOAD_PARAM"  ,
""   
)

Identifier used for Manager::load() configuration.

For complex loading ISA, several properties with such an identifier may be put in the configuration property list. Its arguments is a string of the form ID=VALUE where ID is an identifier of the XXX-config.xml of the loader and VALUE the matching value.

◆ LOADER()

p::id<Loader *> otawa::LOADER ( "otawa::LOADER"  ,
 
)

Identifier of the property indicating the loader to use.

◆ LOADER_NAME()

p::id<string> otawa::LOADER_NAME ( "otawa::LOADER_NAME"  ,
""   
)

Identifier of the property indicating a name (CString) of the loader to use.

◆ MEMORY_ACCESS_FEATURE()

p::feature otawa::MEMORY_ACCESS_FEATURE ( "otawa::MEMORY_ACCESS_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is usually asserted by processes that provides access to the memory segment of the program.

Provided Methods

◆ MEMORY_ACCESSES()

p::feature otawa::MEMORY_ACCESSES ( "otawa::MEMORY_ACCESSES"  ,
new Maker< NoProcessor () 
)

This feature, put on a process, informs that the functional simulator provides the ability to give information about memory accesses.

Provider
Activated Methods
  • otawa::sim::State::lowerRead()
  • otawa::sim::State::upperRead()
  • otawa::sim::State::lowerWrite()
  • otawa::sim::State::upperWrite()

◆ MEMORY_ELEMENT()

p::id<elm::xom::Element *> otawa::MEMORY_ELEMENT ( "otawa::MEMORY_ELEMENT"  ,
 
)

Passed to manager::load() to give the XML element describing the memory configuration.

This property is often used with an XML file containing different configurations.

◆ MEMORY_OBJECT()

p::id<hard::Memory *> otawa::MEMORY_OBJECT ( "otawa::MEMORY_OBJECT"  ,
 
)

Passed to manager::load() to set the memory configuration.

The user is responsible of the release of the memory occipied by the memory object.

◆ MEMORY_PATH()

p::id<elm::sys::Path> otawa::MEMORY_PATH ( "otawa::MEMORY_PATH"  ,
""   
)

Passed to Manager::load() to give the path of the file describing the memory.

◆ NO_RETURN_FUNCTION()

p::id<string> otawa::NO_RETURN_FUNCTION ( "otawa::NO_RETURN_FUNCTION"  ,
""   
)

this property may be used to pass information about the non-returning behaviour of some functions.

The parameter is the name of the function. It is often used with the _exit function.

◆ NO_STACK()

p::id<bool> otawa::NO_STACK ( "otawa::NO_STACK"  ,
false   
)

This property shows that no stack need to be allocated.

◆ NO_SYSTEM()

p::id<bool> otawa::NO_SYSTEM ( "otawa::NO_SYSTEM"  ,
false   
)

This property shows that the system does not need to by simulated when the binary image is built.

◆ PLATFORM()

p::id<hard::Platform *> otawa::PLATFORM ( "otawa::PLATFORM"  ,
 
)

Identifier of the property indicating a platform (Platform *) to use.

◆ PLATFORM_NAME()

p::id<string> otawa::PLATFORM_NAME ( "otawa::PLATFORM_NAME"  ,
""   
)

Identifier of the property indicating the name (CString) of the platform to use.

◆ PROCESSOR()

p::id<hard::Processor *> otawa::PROCESSOR ( "otawa::PROCESSOR"  ,
 
)

Gives the processor to use in the current computation.

◆ PROCESSOR_ELEMENT()

p::id<elm::xom::Element *> otawa::PROCESSOR_ELEMENT ( "otawa::PROCESSOR_ELEMENT"  ,
 
)

XML element containing the configuration of the processor.

◆ PROCESSOR_PATH()

p::id<elm::sys::Path> otawa::PROCESSOR_PATH ( "otawa::PROCESSOR_PATH"  ,
""   
)

Path to the XML configuration file of the processor.

◆ REGISTER_USAGE_FEATURE()

p::feature otawa::REGISTER_USAGE_FEATURE ( "otawa::REGISTER_USAGE_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature is usually asserted by processes that provides access to the register usage information.

Provided Methods

◆ SEMANTICS_INFO()

p::feature otawa::SEMANTICS_INFO ( "otawa::SEMANTICS_INFO"  ,
new Maker< NoProcessor () 
)

This feature is present when the loader provides implementation of semantics information.

Provider
Activated Methods

◆ SEMANTICS_INFO_EXTENDED()

p::feature otawa::SEMANTICS_INFO_EXTENDED ( "otawa::SEMANTICS_INFO_EXTENDED"  ,
new Maker< NoProcessor () 
)

This feature is present when the loader provides implementation of extended semantics information.

This feature ensures that the following semantics instruction are generated:

  • NEG
  • NOT
  • AND
  • OR
  • XOR
  • MUL
  • MULU
  • DIV
  • DIVU
  • MOD
  • MODU
  • SPEC
Provider
Activated Methods

◆ SEMANTICS_INFO_FLOAT()

p::feature otawa::SEMANTICS_INFO_FLOAT ( "otawa::SEMANTICS_INFO_FLOAT"  ,
new Maker< NoProcessor () 
)

This feature is present when the loader provides implementation of floating-point semantic instructions.

Note
This is a future feature as, currently, no floating-point instruction exists.
Provider
Activated Methods

◆ SIMULATOR()

p::id<sim::Simulator *> otawa::SIMULATOR ( "otawa::SIMULATOR"  ,
 
)

This property defines the used the used simulator when a simulator is needed to perform simulation.

◆ SIMULATOR_NAME()

p::id<string> otawa::SIMULATOR_NAME ( "otawa::SIMULATOR_NAME"  ,
""   
)

Name of the simulator to use.

◆ SOURCE_LINE_FEATURE()

p::feature otawa::SOURCE_LINE_FEATURE ( "otawa::SOURCE_LINE_FEATURE"  ,
new Maker< NoProcessor () 
)

This feature asserts that a table matching program address and source (file, lines) is available.

Provided Methods

◆ SP_ADDRESS()

Identifier<Address> otawa::SP_ADDRESS ( "otawa::SP_ADDRESS"  ,
Address::null   
)

This feature is put on the process to get information about the built image.

It contains the startup address of the stack pointer. Hooks

◆ SYMBOL()

Identifier<Symbol *> otawa::SYMBOL ( "otawa::SYMBOL"  ,
 
)

This property carries the symbol attached to an instruction.

Notice that an instruction may support several symbols.

Hooks
Features

◆ TASK_ADDRESS()

p::id<Address> otawa::TASK_ADDRESS ( "otawa::TASK_ADDRESS"  ,
Address::null   
)

This property, passed to the load configuration, select the task entry by its address.

◆ TASK_ENTRY()

p::id<string> otawa::TASK_ENTRY ( "otawa::TASK_ENTRY"  ,
"main"   
)

This property, passed to the load configuration, gives the name of the entry function of the current task.

◆ VLIW_SUPPORTED()

p::feature otawa::VLIW_SUPPORTED ( "otawa::VLIW_SUPPORTED"  ,
new Maker< NoProcessor () 
)

This feature is provided on Process objects by architecture implementing VLIW facilities.

This means mainly that Inst::IS_BUNDLE and Inst::semWriteBack() are used in instructions.

Variable Documentation

◆ _def

Manager otawa::Manager::_def
staticprivate

Default manager.

Avoid to declare one in the main.

◆ ARGC

p::id<int> otawa::ARGC("otawa::ARGC", -1)

Argument count as passed to the program (int).

◆ ARGV

p::id<char **> otawa::ARGV("otawa::ARGV", 0)

Argument values as passed to the program (char **).

◆ ARGV_ADDRESS

Identifier<Address> otawa::ARGV_ADDRESS("otawa::ARGV_ADDRESS", Address::null)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the argv vector. Hooks

◆ AUXV_ADDRESS

Identifier<Address> otawa::AUXV_ADDRESS("otawa::AUXV_ADDRESS", Address::null)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the auxv vector. Hooks

◆ CACHE_CONFIG

p::id<hard::CacheConfiguration *> otawa::CACHE_CONFIG("otawa::CACHE_CONFIG", 0)

This property is used to pass the cache configuration directly to the platform.

◆ CACHE_CONFIG_ELEMENT

p::id<elm::xom::Element *> otawa::CACHE_CONFIG_ELEMENT("otawa::CACHE_CONFIG_ELEMENT", 0)

Gives an XML element containing the cache configuration.

Referenced by otawa::script::Script::work().

◆ CACHE_CONFIG_PATH

p::id<elm::sys::Path> otawa::CACHE_CONFIG_PATH("otawa::CACHE_CONFIG_PATH", "")

Gives the path of file containing the cache configuration.

Referenced by otawa::GraphBBTime< ParExeGraph >::configure().

◆ CONDITIONAL_INSTRUCTIONS_FEATURE

p::feature otawa::CONDITIONAL_INSTRUCTIONS_FEATURE("otawa::CONDITIONAL_INSTRUCTIONS_FEATURE", new Maker< NoProcessor >())

This feature is provided by Process which architecture provides conditional instructions.

A common example are the ARM microprocessors which instructions, at least in normal mode, can be conditional. The architectures providing this feature implement the method Inst::condition() and Inst::updateCondition().

◆ CONFIG_ELEMENT

p::id<elm::xom::Element *> otawa::CONFIG_ELEMENT("otawa::CONFIG_ELEMENT", 0)

XML element containing the configuration of the current computation.

Referenced by otawa::WorkSpace::config(), otawa::Manager::load(), and otawa::script::Script::work().

◆ CONFIG_PATH

p::id<elm::sys::Path> otawa::CONFIG_PATH("otawa::CONFIG_PATH", "")

Path to the XML configuration file used in this computation.

◆ CONTROL_DECODING_FEATURE

p::feature otawa::CONTROL_DECODING_FEATURE("otawa::CONTROL_DECODING_FEATURE", new Maker< NoProcessor >())

This feature is usually provided by the loader providing decoding facility for control instructions.

Provided Methods

◆ DELAYED

Identifier<delayed_t> otawa::DELAYED("otawa::DELAYED", DELAYED_None)

This kind of property is put on control branch to know if the following instruction is executed as part of a delayed branch.

Feature
Hook

Referenced by otawa::DelayedBuilder::type().

◆ DELAYED2_FEATURE

p::feature otawa::DELAYED2_FEATURE("otawa::DELAYED2_FEATURE", new Maker< NoProcessor >())

This Process feature informs that the actual architecture supports delayed branch.

Properties

Referenced by otawa::DelayedBuilder::setup().

◆ DELAYED_FEATURE

p::feature otawa::DELAYED_FEATURE("otawa::DELAYED_FEATURE", new Maker< NoProcessor >())

This feature is put on processes by the loader to inform that the control instruction of the current instruction contains delayed branches.

Provider
  • program loader
Properties

Referenced by otawa::DelayedBuilder::processWorkSpace().

◆ DELAYED_INFO

Identifier<DelayedInfo *> otawa::DELAYED_INFO("otawa::DELAYED_INFO", 0)

This property provides access to delayed branch information of the current program.

Hooks
Features

Referenced by otawa::DelayedBuilder::setup().

◆ ENVP

p::id<char **> otawa::ENVP("otawa::ENVP", 0)

Argument values as passed to the program (char **).

◆ ENVP_ADDRESS

Identifier<Address> otawa::ENVP_ADDRESS("otawa::ENVP_ADDRESS", Address::null)

This feature is put on the process object whose image supports Unix-like argument passing.

It contains the image address of the envp vector. Hooks

◆ FLOAT_MEMORY_ACCESS_FEATURE

p::feature otawa::FLOAT_MEMORY_ACCESS_FEATURE("otawa::FLOAT_MEMORY_ACCES_FEATURE", new Maker< NoProcessor >())

This feature is usually asserted by processes that provides access to the memory segment of the program with float values.

Provided Methods

◆ FUNCTION_LABEL

Identifier<String> otawa::FUNCTION_LABEL("otawa::FUNCTION_LABEL", "")

This property is put on instruction.

An instruction may accept many properties of this type.

Hooks
Features

Referenced by otawa::CFG::label(), otawa::CFG::name(), and otawa::TextDecoder::processWorkSpace().

◆ LABEL

Identifier<String> otawa::LABEL("otawa::LABEL", "")

Property with this identifier is put on instructions or basic blocks which a symbol is known for.

Hooks
Features

Referenced by otawa::CFG::label(), otawa::CFG::name(), and otawa::TextDecoder::processWorkSpace().

◆ LOAD_PARAM

p::id<string> otawa::LOAD_PARAM("otawa::LOAD_PARAM", "")

Identifier used for Manager::load() configuration.

For complex loading ISA, several properties with such an identifier may be put in the configuration property list. Its arguments is a string of the form ID=VALUE where ID is an identifier of the XXX-config.xml of the loader and VALUE the matching value.

Referenced by otawa::Application::run().

◆ LOADER

p::id<Loader *> otawa::LOADER("otawa::LOADER", 0)

Identifier of the property indicating the loader to use.

◆ LOADER_NAME

p::id<string> otawa::LOADER_NAME("otawa::LOADER_NAME", "")

Identifier of the property indicating a name (CString) of the loader to use.

◆ MEMORY_ACCESS_FEATURE

p::feature otawa::MEMORY_ACCESS_FEATURE("otawa::MEMORY_ACCESS_FEATURE", new Maker< NoProcessor >())

This feature is usually asserted by processes that provides access to the memory segment of the program.

Provided Methods

Referenced by otawa::Process::get().

◆ MEMORY_ACCESSES

p::feature otawa::MEMORY_ACCESSES("otawa::MEMORY_ACCESSES", new Maker< NoProcessor >())

This feature, put on a process, informs that the functional simulator provides the ability to give information about memory accesses.

Provider
Activated Methods
  • otawa::sim::State::lowerRead()
  • otawa::sim::State::upperRead()
  • otawa::sim::State::lowerWrite()
  • otawa::sim::State::upperWrite()

Referenced by otawa::SimState::lowerRead(), otawa::SimState::lowerWrite(), otawa::SimState::upperRead(), and otawa::SimState::upperWrite().

◆ MEMORY_ELEMENT

p::id<elm::xom::Element *> otawa::MEMORY_ELEMENT("otawa::MEMORY_ELEMENT", 0)

Passed to manager::load() to give the XML element describing the memory configuration.

This property is often used with an XML file containing different configurations.

Referenced by otawa::script::Script::work().

◆ MEMORY_OBJECT

p::id<hard::Memory *> otawa::MEMORY_OBJECT("otawa::MEMORY_OBJECT", 0)

Passed to manager::load() to set the memory configuration.

The user is responsible of the release of the memory occipied by the memory object.

◆ MEMORY_PATH

p::id<elm::sys::Path> otawa::MEMORY_PATH("otawa::MEMORY_PATH", "")

Passed to Manager::load() to give the path of the file describing the memory.

◆ NO_RETURN_FUNCTION

p::id<string> otawa::NO_RETURN_FUNCTION("otawa::NO_RETURN_FUNCTION", "")

this property may be used to pass information about the non-returning behaviour of some functions.

The parameter is the name of the function. It is often used with the _exit function.

◆ NO_STACK

p::id<bool> otawa::NO_STACK("otawa::NO_STACK", false)

This property shows that no stack need to be allocated.

◆ NO_SYSTEM

p::id<bool> otawa::NO_SYSTEM("otawa::NO_SYSTEM", false)

This property shows that the system does not need to by simulated when the binary image is built.

◆ PLATFORM

p::id<hard::Platform *> otawa::PLATFORM("otawa::PLATFORM", 0)

Identifier of the property indicating a platform (Platform *) to use.

◆ PLATFORM_IDENTFIER

p::id<hard::Platform::Identification *> otawa::PLATFORM_IDENTFIER("otawa::PLATFORM_IDENTFIER", 0)

Identifier of the property indicating the identifier (PlatformId) of the loader to use.

◆ PLATFORM_NAME

p::id<string> otawa::PLATFORM_NAME("otawa::PLATFORM_NAME", "")

Identifier of the property indicating the name (CString) of the platform to use.

◆ PROCESSOR

p::id<hard::Processor *> otawa::PROCESSOR("otawa::PROCESSOR", 0)

Gives the processor to use in the current computation.

◆ PROCESSOR_ELEMENT

p::id<elm::xom::Element *> otawa::PROCESSOR_ELEMENT("otawa::PROCESSOR_ELEMENT", 0)

XML element containing the configuration of the processor.

Referenced by otawa::script::Script::work().

◆ PROCESSOR_PATH

p::id<elm::sys::Path> otawa::PROCESSOR_PATH("otawa::PROCESSOR_PATH", "")

Path to the XML configuration file of the processor.

◆ REGISTER_USAGE_FEATURE

p::feature otawa::REGISTER_USAGE_FEATURE("otawa::REGISTER_USAGE_FEATURE", new Maker< NoProcessor >())

This feature is usually asserted by processes that provides access to the register usage information.

Provided Methods

Referenced by otawa::Inst::readRegs(), and otawa::Inst::writtenRegs().

◆ SEMANTICS_INFO

p::feature otawa::SEMANTICS_INFO("otawa::SEMANTICS_INFO", new Maker< NoProcessor >())

This feature is present when the loader provides implementation of semantics information.

Provider
Activated Methods

◆ SEMANTICS_INFO_EXTENDED

p::feature otawa::SEMANTICS_INFO_EXTENDED("otawa::SEMANTICS_INFO_EXTENDED", new Maker< NoProcessor >())

This feature is present when the loader provides implementation of extended semantics information.

This feature ensures that the following semantics instruction are generated:

  • NEG
  • NOT
  • AND
  • OR
  • XOR
  • MUL
  • MULU
  • DIV
  • DIVU
  • MOD
  • MODU
  • SPEC
Provider
Activated Methods

◆ SEMANTICS_INFO_FLOAT

p::feature otawa::SEMANTICS_INFO_FLOAT("otawa::SEMANTICS_INFO_FLOAT", new Maker< NoProcessor >())

This feature is present when the loader provides implementation of floating-point semantic instructions.

Note
This is a future feature as, currently, no floating-point instruction exists.
Provider
Activated Methods

◆ SIMULATOR

p::id<sim::Simulator *> otawa::SIMULATOR("otawa::SIMULATOR", 0)

This property defines the used the used simulator when a simulator is needed to perform simulation.

Referenced by otawa::Process::simulator().

◆ SIMULATOR_NAME

p::id<string> otawa::SIMULATOR_NAME("otawa::SIMULATOR_NAME", "")

Name of the simulator to use.

Referenced by otawa::Process::simulator().

◆ SOURCE_LINE_FEATURE

p::feature otawa::SOURCE_LINE_FEATURE("otawa::SOURCE_LINE_FEATURE", new Maker< NoProcessor >())

This feature asserts that a table matching program address and source (file, lines) is available.

Provided Methods

Referenced by otawa::Process::getSourceLine(), otawa::FlowFactLoader::processWorkSpace(), otawa::ipet::FlowFactLoader::setup(), and otawa::BBRatioDisplayer::setup().

◆ SP_ADDRESS

Identifier<Address> otawa::SP_ADDRESS("otawa::SP_ADDRESS", Address::null)

This feature is put on the process to get information about the built image.

It contains the startup address of the stack pointer. Hooks

◆ SYMBOL

Identifier<Symbol *> otawa::SYMBOL("otawa::SYMBOL", 0)

This property carries the symbol attached to an instruction.

Notice that an instruction may support several symbols.

Hooks
Features

Referenced by otawa::display::CFGDecorator::displayLabels(), and otawa::WorkSpace::format().

◆ TASK_ADDRESS

p::id<Address> otawa::TASK_ADDRESS("otawa::TASK_ADDRESS", Address::null)

This property, passed to the load configuration, select the task entry by its address.

Referenced by otawa::CFGCollector::configure().

◆ TASK_ENTRY

p::id<string> otawa::TASK_ENTRY("otawa::TASK_ENTRY", "main")

This property, passed to the load configuration, gives the name of the entry function of the current task.

Referenced by otawa::CFGCollector::configure(), and otawa::cfgio::Input::configure().

◆ VLIW_SUPPORTED

p::feature otawa::VLIW_SUPPORTED("otawa::VLIW_SUPPORTED", new Maker< NoProcessor >())

This feature is provided on Process objects by architecture implementing VLIW facilities.

This means mainly that Inst::IS_BUNDLE and Inst::semWriteBack() are used in instructions.

otawa::WorkSpace
Definition: WorkSpace.h:71
elm::Exception::message
virtual String message(void)
otawa::sem::SET
@ SET
Definition: inst.h:48
elm::Exception
write
FileOutput write(sys::Path path)
otawa::Processor::VERBOSE
static p::id< bool > & VERBOSE
This property activates the verbose mode of the processor: information about the processor work will ...
Definition: Processor.h:100
elm
endl
const EOL endl
otawa::MANAGER
Manager & MANAGER
Default manager.
Definition: Manager.h:139
otawa::Manager::load
WorkSpace * load(const elm::sys::Path &path, const PropList &props=PropList::EMPTY)
Load a file with the given path and the given properties.
Definition: prog_Manager.cpp:273
cerr
io::Output cerr
otawa::PropList
Definition: PropList.h:67
otawa
Development Note Letting the ToDo / ToDoList class visible in the header is clumsy.
Definition: ArrayStore.h:25
otawa.h