X-Git-Url: http://git.efficios.com/?p=ctf.git;a=blobdiff_plain;f=common-trace-format-specification.txt;h=482731c08c551319f0c039621dcc63f5ef49bc5d;hp=759d43bbb9aa1d2e4f9719e7f12d4f4783591f73;hb=96bf5a3bb7c85c2ae66011a0f94409fd34d9eee7;hpb=0bed08fcda508005defc4b63c52596fca0e49fe0 diff --git a/common-trace-format-specification.txt b/common-trace-format-specification.txt index 759d43b..482731c 100644 --- a/common-trace-format-specification.txt +++ b/common-trace-format-specification.txt @@ -1,4 +1,4 @@ -Common Trace Format (CTF) Specification (v1.8.1) +Common Trace Format (CTF) Specification (v1.8.2) Mathieu Desnoyers, EfficiOS Inc. @@ -165,22 +165,35 @@ by default. It is however recommended to always specify the alignment explicitly. Alignment values must be power of two. Compound types are aligned as specified in their individual specification. +The base offset used for field alignment is the start of the packet +containing the field. For instance, a field aligned on 32-bit needs to +be at an offset multiple of 32-bit from the start of the packet that +contains it. + TSDL meta-data attribute representation of a specific alignment: align = value; /* value in bits */ 4.1.3 Byte order -By default, the native endianness of the source architecture is used. -Byte order can be overridden for a basic type by specifying a "byte_order" -attribute. Typical use-case is to specify the network byte order (big endian: -"be") to save data captured from the network into the trace without conversion. -If not specified, the byte order is native. +By default, byte order of a basic type is the byte order described in +the trace description. It can be overridden by specifying a +"byte_order" attribute for a basic type. Typical use-case is to specify +the network byte order (big endian: "be") to save data captured from the +network into the trace without conversion. TSDL meta-data representation: byte_order = native OR network OR be OR le; /* network and be are aliases */ +The "native" keyword selects the byte order described in the trace +description. The "network" byte order is an alias for big endian. + +Even though the trace description section is not per se a type, for sake +of clarity, it should be noted that "native" and "network" byte orders +are only allowed within type declaration. The byte_order specified in +the trace description section only accepts "be" or "le" values. + 4.1.4 Size Type size, in bits, for integers and floats is that returned by "sizeof()" in C @@ -380,7 +393,7 @@ Enumerations omitting the container type ": integer_type" use the "int" type (for compatibility with C99). The "int" type must be previously declared. E.g.: -typealias integer { size = 32; align = 32; signed = true } := int; +typealias integer { size = 32; align = 32; signed = true; } := int; enum { ... @@ -604,7 +617,7 @@ Arrays are always aligned on their element alignment requirement. 4.2.4 Sequences -Sequences are dynamically-sized arrays. They refer to a a "length" +Sequences are dynamically-sized arrays. They refer to a "length" unsigned integer field, which must appear in either the same static scope, prior to the sequence field (in field declaration order), in an upper static scope, or in an upper dynamic scope (see Section 7.3.2). This @@ -674,8 +687,7 @@ Strings are always aligned on byte size. The event packet header consists of two parts: the "event packet header" is the same for all streams of a trace. The second part, the "event packet context", is described on a per-stream basis. Both are described -in the TSDL meta-data. The packets are aligned on architecture-page-sized -addresses. +in the TSDL meta-data. Event packet header (all fields are optional, specified by TSDL meta-data): @@ -777,8 +789,8 @@ struct event_packet_context { uint32_t stream_packet_count; uint32_t events_discarded; uint32_t cpu_id; - uint32_t/uint16_t content_size; - uint32_t/uint16_t packet_size; + uint64_t/uint32_t/uint16_t content_size; + uint64_t/uint32_t/uint16_t packet_size; uint8_t compression_scheme; uint8_t encryption_scheme; uint8_t checksum_scheme; @@ -822,11 +834,11 @@ array is then set to 1. Types uintX_t represent an X-bit unsigned integer, as declared with either: - typealias integer { size = X; align = X; signed = false } := uintX_t; + typealias integer { size = X; align = X; signed = false; } := uintX_t; or - typealias integer { size = X; align = 1; signed = false } := uintX_t; + typealias integer { size = X; align = 1; signed = false; } := uintX_t; 6.1.1 Type 1 - Few event IDs @@ -1173,6 +1185,7 @@ event { id = value; /* Numeric identifier within the stream */ stream_id = stream_id; loglevel = value; + model.emf.uri = "string"; context := struct { ... }; @@ -1181,6 +1194,14 @@ event { }; }; +callsite { + name = "event_name"; + func = "func_name"; + file = "myfile.c"; + line = 39; + ip = 0x40096c; +}; + /* More detail on types in section 4. Types */ /* @@ -1436,6 +1457,7 @@ token: keyword: is one of align +callsite const char clock @@ -1759,6 +1781,7 @@ ctf-specifier: stream { ctf-assignment-expression-list-opt } env { ctf-assignment-expression-list-opt } trace { ctf-assignment-expression-list-opt } + callsite { ctf-assignment-expression-list-opt } typealias declaration-specifiers abstract-declarator-list type-assignment-operator declaration-specifiers abstract-declarator-list typealias declaration-specifiers abstract-declarator-list type-assignment-operator declarator-list