X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=include%2Fbabeltrace%2Fctf%2Fmetadata.h;h=1b78762b2a9e1da9a12dc793c10a92507b6b1558;hp=5547480922ede2466ea78fac251caad80404797c;hb=c462e188f3e7819c7bc74f671038cdbf36e8c3c0;hpb=e1151715912eaec959682b3bc10be3ced6abe467 diff --git a/include/babeltrace/ctf/metadata.h b/include/babeltrace/ctf/metadata.h index 55474809..1b78762b 100644 --- a/include/babeltrace/ctf/metadata.h +++ b/include/babeltrace/ctf/metadata.h @@ -17,124 +17,50 @@ * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ #include -#include +#include +#include +#include +#include +#include +#include +#include #include #include -struct ctf_trace; -struct ctf_stream; -struct ctf_event; - -#define CTF_TRACE_SET_FIELD(ctf_trace, field, value) \ - do { \ - (ctf_trace)->(field) = (value); \ - (ctf_trace)->field_mask |= CTF_TRACE_ ## field; \ - } while (0) - -#define CTF_TRACE_FIELD_IS_SET(ctf_trace, field) \ - ((ctf_trace)->field_mask & CTF_TRACE_ ## field) - -#define CTF_TRACE_GET_FIELD(ctf_trace, field) \ - ({ \ - assert(CTF_TRACE_FIELD_IS_SET(ctf_trace, field)); \ - (ctf_trace)->(field); \ - }) - - -struct ctf_trace { - /* root scope */ - struct type_scope *root_type_scope; - /* root scope */ - struct definition_scope *root_definition_scope; +#define CTF_MAGIC 0xC1FC1FC1 +#define TSDL_MAGIC 0x75D11D57 - struct type_scope *type_scope; - struct definition_scope *definition_scope; - GPtrArray *streams; /* Array of struct ctf_stream pointers*/ - - uint64_t major; - uint64_t minor; - uuid_t uuid; - uint64_t word_size; - - enum { /* Fields populated mask */ - CTF_TRACE_major = (1U << 0), - CTF_TRACE_minor = (1U << 1), - CTF_TRACE_uuid = (1U << 2), - CTF_TRACE_word_size = (1U << 3), - } field_mask; +struct ctf_file_stream { + struct ctf_stream_definition parent; + struct ctf_stream_pos pos; /* current stream position */ }; -#define CTF_STREAM_SET_FIELD(ctf_stream, field, value) \ - do { \ - (ctf_stream)->(field) = (value); \ - (ctf_stream)->field_mask |= CTF_STREAM_ ## field; \ - } while (0) - -#define CTF_STREAM_FIELD_IS_SET(ctf_stream, field) \ - ((ctf_stream)->field_mask & CTF_STREAM_ ## field) - -#define CTF_STREAM_GET_FIELD(ctf_stream, field) \ - ({ \ - assert(CTF_STREAM_FIELD_IS_SET(ctf_stream, field)); \ - (ctf_stream)->(field); \ - }) - -struct ctf_stream { - struct ctf_trace *trace; - /* parent is lexical scope conaining the stream scope */ - struct type_scope *type_scope; - /* parent is trace scope */ - struct definition_scope *definition_scope; - GPtrArray *events_by_id; /* Array of struct ctf_event pointers indexed by id */ - GHashTable *event_quark_to_id; /* GQuark to numeric id */ - - struct definition_struct *event_header; - struct definition_struct *event_context; - struct definition_struct *packet_context; - - uint64_t stream_id; - - enum { /* Fields populated mask */ - CTF_STREAM_stream_id = (1 << 0), - } field_mask; -}; - -#define CTF_EVENT_SET_FIELD(ctf_event, field) \ - do { \ - (ctf_event)->field_mask |= CTF_EVENT_ ## field; \ - } while (0) - -#define CTF_EVENT_FIELD_IS_SET(ctf_event, field) \ - ((ctf_event)->field_mask & CTF_EVENT_ ## field) - -#define CTF_EVENT_GET_FIELD(ctf_event, field) \ - ({ \ - assert(CTF_EVENT_FIELD_IS_SET(ctf_event, field)); \ - (ctf_event)->(field); \ - }) - -struct ctf_event { - /* stream mapped by stream_id */ - struct ctf_stream *stream; - /* parent is lexical scope conaining the event scope */ - struct type_scope *type_scope; - /* parent is stream scope */ - struct definition_scope *definition_scope; - struct definition_struct *context; - struct definition_struct *fields; - - GQuark name; - uint64_t id; /* Numeric identifier within the stream */ - uint64_t stream_id; - - enum { /* Fields populated mask */ - CTF_EVENT_name = (1 << 0), - CTF_EVENT_id = (1 << 1), - CTF_EVENT_stream_id = (1 << 2), - } field_mask; +#define HEADER_END char end_field +#define header_sizeof(type) offsetof(typeof(type), end_field) + +struct metadata_packet_header { + uint32_t magic; /* 0x75D11D57 */ + uint8_t uuid[16]; /* Unique Universal Identifier */ + uint32_t checksum; /* 0 if unused */ + uint32_t content_size; /* in bits */ + uint32_t packet_size; /* in bits */ + uint8_t compression_scheme; /* 0 if unused */ + uint8_t encryption_scheme; /* 0 if unused */ + uint8_t checksum_scheme; /* 0 if unused */ + uint8_t major; /* CTF spec major version number */ + uint8_t minor; /* CTF spec minor version number */ + HEADER_END; }; #endif /* _BABELTRACE_CTF_METADATA_H */