Content
- 1 Introduction
- 2 Notation
- 3 Tool Usage
- 4 Top Level Elements
- 5 Control Flow Elements
- 6 Data Flow Elements
- 7 Location Attributes
- 8 Loop Bound Attributes
- 9 Time and Execution Attributes
- 10 Control Flow Properties
- 11 Control Flow Constraints
- 12 Data Flow Properties
- 13 Data Flow Constraints
- 14 Future Developments
- 15 Appendix A: FFX Grammar
- 16 Appendix B: Example – output of oRange tool
6 Data Flow Elements
The goal of this elements is not to provide a full description of the data involved in the application but to bind them to constraints that should be useful to perform analyses and compute the WCET.
The tool that will handle these information must have a way to get the description of the data structure used by the application. For source level tools, this the sources. For binary level tools, the debugging information provided in the executable.
6.1 Data Elements
A data element allows to put some constraint on a single data. These constraints, here called properties, applies to the whole scope of the control flow element containing it (unless another sub-control element contains a data stating a different property). If a data element is defined at the top-level, it applies on the whole program. In a function at top-level, it applies on any function call. Embedded in a call chain, it applies only in the case of this chain.
The data element is defined as below:
DATA ::= <data ID-ATTRS DATA-ATTRS > ID-ELEMENTS DATA-PROPERTY* </data>
The ID-ATTRS attributes allows to identify the data in the program (global, local variable or parameter) while the ID-ELEMENTS elements provides a way to select a part of a composed data. The DATA-PROPERTY are defined in the next sections.
6.2 Data Location
The data identification, performed through attributes and elements, allows to identify data globally and locally but also inside composed data like arrays or structures. In addition, as for the identification of code parts, the references may be symbolic (as in the programming languages) or by address (as used in assembly languages).
The ID-ATTRS provided a limited way as symbolic references but a simpler way to access data.
ID-ATTRS ::= | address = "ADDR" | name = "TEXT" | name = "TEXT" offset = "INT" | offset = "INT" | name = "TEXT" local = "yes"
The first form is the simpler one where the data is identified by an address (mainly in the global set of variable or for IO registers). The second one provides the same way of expressiveness but using a name that may be viewed as a label. The third form allows to define an offset relative to global name to access an item in a structured datum. The fourth form, with only the offset attribute, defines a local datum in the frame stack of the function, relatively to the frame stack of the current function. The fifth form allows to access to a datum by its name relatively to the current context following the name overriding scheme of the programming language.*
ID-ELEMENT allows mainly to locate data inside a complex structure or through pointers:
ID-ELEMENT ::= <ref> REF-ELEMENT </ref> REF-ELEMENT ::= | <mem> REF-ELEMENT </mem> | <field of="name"/> | <item> DATA-EXPR </item> | <range> DATA-EXPR DATA-EXPR </range> | <all>
The REF-ELEMENT allows to access a sub-part of a datum or an indirect access to a datum. The mem element is applied to a pointer datum to reference the pointed data. A field represents a field inside a structure. item, range and all applies to items of an array. item references an item whose index is given by a data expression. range references items whose index is the given range (composed of data expressions) and all references all data of an array.