Bug #1351 » 0001-babeltrace2-handle-negative-clock-offset-v3.patch
src/plugins/ctf/common/metadata/visitor-generate-ir.c | ||
---|---|---|
static
|
||
int visit_clock_decl_entry(struct ctx *ctx, struct ctf_node *entry_node,
|
||
struct ctf_clock_class *clock, int *set, int64_t *offset_seconds,
|
||
uint64_t *offset_cycles)
|
||
int64_t *offset_cycles)
|
||
{
|
||
int ret = 0;
|
||
char *left = NULL;
|
||
... | ... | |
goto error;
|
||
}
|
||
ret = get_unary_unsigned(ctx,
|
||
ret = get_unary_signed(
|
||
&entry_node->u.ctf_expression.right, offset_cycles);
|
||
if (ret) {
|
||
_BT_COMP_LOGE_NODE(entry_node,
|
||
... | ... | |
struct ctf_node *entry_node;
|
||
struct bt_list_head *decl_list = &clock_node->u.clock.declaration_list;
|
||
const char *clock_class_name;
|
||
int64_t offset_seconds = 0;
|
||
int64_t offset_seconds = 0, orig_offset_cycles = 0;
|
||
uint64_t offset_cycles = 0;
|
||
uint64_t freq;
|
||
... | ... | |
bt_list_for_each_entry(entry_node, decl_list, siblings) {
|
||
ret = visit_clock_decl_entry(ctx, entry_node, clock, &set,
|
||
&offset_seconds, &offset_cycles);
|
||
&offset_seconds, &orig_offset_cycles);
|
||
if (ret) {
|
||
_BT_COMP_LOGE_NODE(entry_node,
|
||
"Cannot visit clock class's entry: ret=%d",
|
||
... | ... | |
* frequency (move to the part in seconds).
|
||
*/
|
||
freq = clock->frequency;
|
||
/*converte negative offset attribute value to the offset_s attribute.*/
|
||
if(orig_offset_cycles < 0) {
|
||
offset_seconds -= llabs(orig_offset_cycles) / freq;
|
||
offset_seconds --;
|
||
offset_cycles = freq - llabs(orig_offset_cycles) % freq;
|
||
}
|
||
else
|
||
offset_cycles = orig_offset_cycles;
|
||
calibrate_clock_class_offsets(&offset_seconds, &offset_cycles, freq);
|
||
BT_ASSERT(offset_cycles < clock->frequency);
|
||
clock->offset_seconds = offset_seconds;
|