+uint64_t cycles_from_ns(uint64_t frequency, uint64_t ns)
+{
+ uint64_t cycles;
+
+ /* 1GHz */
+ if (frequency == 1000000000ULL) {
+ cycles = ns;
+ } else {
+ cycles = (uint64_t) (((double) ns * (double) frequency) / 1e9);
+ }
+
+ return cycles;
+}
+
+static
+int apply_clock_offset(struct ctx *ctx, struct bt_ctf_clock_class *clock,
+ uint64_t clock_offset_ns)
+{
+ int ret;
+ uint64_t freq;
+ int64_t offset_cycles;
+
+ freq = bt_ctf_clock_class_get_frequency(clock);
+ if (freq == -1ULL) {
+ _PERROR("%s", "No clock frequency");
+ ret = -1;
+ goto end;
+ }
+
+ ret = bt_ctf_clock_class_get_offset_cycles(clock, &offset_cycles);
+ if (ret) {
+ _PERROR("%s", "Getting offset cycles");
+ ret = -1;
+ goto end;
+ }
+
+ offset_cycles += cycles_from_ns(freq, clock_offset_ns);
+
+ ret = bt_ctf_clock_class_set_offset_cycles(clock, offset_cycles);
+
+end:
+ return ret;
+}
+
+static
+int visit_clock_decl(struct ctx *ctx, struct ctf_node *clock_node,
+ uint64_t clock_offset_ns)