+int get_block_offset_size(LttTracefile *tf, guint block_num,
+ uint64_t *offset, uint32_t *size)
+{
+ uint64_t offa, offb;
+
+ if (unlikely(block_num >= tf->num_blocks))
+ return -1;
+
+ offa = g_array_index(tf->buf_index, uint64_t, block_num);
+ if (likely(block_num < tf->num_blocks - 1))
+ offb = g_array_index(tf->buf_index, uint64_t, block_num + 1);
+ else
+ offb = tf->file_size;
+ *offset = offa;
+ *size = offb - offa;
+ return 0;
+}
+
+int ltt_trace_create_block_index(LttTracefile *tf)
+{
+ int page_size = getpagesize();
+ uint64_t offset = 0;
+ unsigned long i = 0;
+ unsigned int header_map_size = PAGE_ALIGN(ltt_subbuffer_header_size());
+
+ tf->buf_index = g_array_sized_new(FALSE, TRUE, sizeof(uint64_t),
+ DEFAULT_N_BLOCKS);
+
+ g_assert(tf->buf_index->len == i);
+
+ while (offset < tf->file_size) {
+ ltt_subbuffer_header_t *header;
+ uint64_t *off;