Cleanup: flt.lttng-utils.debug-info: remove leftover comments
[babeltrace.git] / src / plugins / lttng-utils / debug-info / trace-ir-metadata-copy.c
CommitLineData
58f6d595
FD
1/*
2 * Babeltrace - Trace IR metadata object copy
3 *
4 * Copyright (c) 2015 EfficiOS Inc. and Linux Foundation
5 * Copyright (c) 2018 Philippe Proulx <pproulx@efficios.com>
6 * Copyright (c) 2019 Francis Deslauriers <francis.deslauriers@efficios.com>
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 * SOFTWARE.
25 */
26
475e740e 27#define BT_COMP_LOG_SELF_COMP self_comp
a07aba4f 28#define BT_LOG_OUTPUT_LEVEL log_level
b03487ab 29#define BT_LOG_TAG "PLUGIN/FLT.LTTNG-UTILS.DEBUG-INFO/TRACE-IR-META-COPY"
3fa1b6a3 30#include "logging/comp-logging.h"
58f6d595
FD
31
32#include <inttypes.h>
33#include <stdint.h>
34
57952005 35#include "common/assert.h"
58f6d595
FD
36
37#include "trace-ir-metadata-copy.h"
38#include "trace-ir-metadata-field-class-copy.h"
39#include "utils.h"
40
41BT_HIDDEN
42int copy_trace_class_content(const bt_trace_class *in_trace_class,
475e740e
PP
43 bt_trace_class *out_trace_class, bt_logging_level log_level,
44 bt_self_component *self_comp)
58f6d595 45{
475e740e 46 BT_COMP_LOGD("Copying content of trace class: in-tc-addr=%p, out-tc-addr=%p",
58f6d595
FD
47 in_trace_class, out_trace_class);
48
84ff66df
PP
49 /*
50 * Safe to use the same value object because it's frozen at this
51 * point.
52 */
53 bt_trace_class_set_user_attributes(out_trace_class,
54 bt_trace_class_borrow_user_attributes_const(in_trace_class));
55
58f6d595
FD
56 /* Use the same stream class ids as in the origin trace class. */
57 bt_trace_class_set_assigns_automatic_stream_class_id(out_trace_class,
58 BT_FALSE);
475e740e 59 BT_COMP_LOGD("Copied content of trace class: in-tc-addr=%p, out-tc-addr=%p",
58f6d595 60 in_trace_class, out_trace_class);
cd03c43c 61 return 0;
58f6d595
FD
62}
63
64static
65int copy_clock_class_content(const bt_clock_class *in_clock_class,
475e740e
PP
66 bt_clock_class *out_clock_class, bt_logging_level log_level,
67 bt_self_component *self_comp)
58f6d595 68{
58f6d595
FD
69 const char *clock_class_name, *clock_class_description;
70 int64_t seconds;
71 uint64_t cycles;
72 bt_uuid in_uuid;
73 int ret = 0;
74
475e740e 75 BT_COMP_LOGD("Copying content of clock class: in-cc-addr=%p, out-cc-addr=%p",
58f6d595
FD
76 in_clock_class, out_clock_class);
77
78 clock_class_name = bt_clock_class_get_name(in_clock_class);
79
80 if (clock_class_name) {
fb25b9e3
PP
81 if (bt_clock_class_set_name(out_clock_class, clock_class_name)
82 != BT_CLOCK_CLASS_SET_NAME_STATUS_OK) {
475e740e 83 BT_COMP_LOGE("Error setting clock class' name cc-addr=%p, name=%p",
58f6d595
FD
84 out_clock_class, clock_class_name);
85 out_clock_class = NULL;
86 ret = -1;
87 goto error;
88 }
89 }
90
84ff66df
PP
91 /*
92 * Safe to use the same value object because it's frozen at this
93 * point.
94 */
95 bt_clock_class_set_user_attributes(out_clock_class,
96 bt_clock_class_borrow_user_attributes_const(in_clock_class));
97
58f6d595
FD
98 clock_class_description = bt_clock_class_get_description(in_clock_class);
99
100 if (clock_class_description) {
fb25b9e3
PP
101 if (bt_clock_class_set_description(out_clock_class,
102 clock_class_description) !=
103 BT_CLOCK_CLASS_SET_DESCRIPTION_STATUS_OK) {
475e740e 104 BT_COMP_LOGE("Error setting clock class' description cc-addr=%p, "
58f6d595
FD
105 "name=%p", out_clock_class, clock_class_description);
106 out_clock_class = NULL;
107 ret = -1;
108 goto error;
109 }
110 }
111
112 in_uuid = bt_clock_class_get_uuid(in_clock_class);
113 if (in_uuid) {
114 bt_clock_class_set_uuid(out_clock_class, in_uuid);
115 }
116
117 bt_clock_class_set_frequency(out_clock_class,
118 bt_clock_class_get_frequency(in_clock_class));
119 bt_clock_class_set_precision(out_clock_class,
120 bt_clock_class_get_precision(in_clock_class));
121 bt_clock_class_get_offset(in_clock_class, &seconds, &cycles);
122 bt_clock_class_set_offset(out_clock_class, seconds, cycles);
123 bt_clock_class_set_origin_is_unix_epoch(out_clock_class,
124 bt_clock_class_origin_is_unix_epoch(in_clock_class));
125
475e740e 126 BT_COMP_LOGD("Copied content of clock class: in-cc-addr=%p, out-cc-addr=%p",
58f6d595
FD
127 in_clock_class, out_clock_class);
128
129error:
130 return ret;
131}
132
133static
134bt_clock_class *borrow_mapped_clock_class(
135 struct trace_ir_metadata_maps *md_maps,
136 const bt_clock_class *in_clock_class)
137{
138 BT_ASSERT(md_maps);
139 BT_ASSERT(in_clock_class);
140
141 return g_hash_table_lookup(md_maps->clock_class_map,
142 (gpointer) in_clock_class);
143}
144
145static
146bt_clock_class *create_new_mapped_clock_class(
147 bt_self_component *self_comp,
148 struct trace_ir_metadata_maps *md_maps,
149 const bt_clock_class *in_clock_class)
150{
151 bt_clock_class *out_clock_class;
152 int ret;
a07aba4f 153 bt_logging_level log_level = md_maps->log_level;
58f6d595 154
475e740e 155 BT_COMP_LOGD("Creating new mapped clock class: in-cc-addr=%p",
58f6d595
FD
156 in_clock_class);
157
158 BT_ASSERT(md_maps);
159 BT_ASSERT(in_clock_class);
160
161 BT_ASSERT(!borrow_mapped_clock_class(md_maps, in_clock_class));
162
163 out_clock_class = bt_clock_class_create(self_comp);
164 if (!out_clock_class) {
475e740e 165 BT_COMP_LOGE_STR("Cannot create clock class");
58f6d595
FD
166 goto end;
167 }
168 /* If not, create a new one and add it to the mapping. */
a07aba4f 169 ret = copy_clock_class_content(in_clock_class, out_clock_class,
475e740e 170 log_level, self_comp);
58f6d595 171 if (ret) {
475e740e 172 BT_COMP_LOGE_STR("Cannot copy clock class");
58f6d595
FD
173 goto end;
174 }
175
176 g_hash_table_insert(md_maps->clock_class_map,
177 (gpointer) in_clock_class, out_clock_class);
178
475e740e 179 BT_COMP_LOGD("Created new mapped clock class: in-cc-addr=%p, out-cc-addr=%p",
58f6d595
FD
180 in_clock_class, out_clock_class);
181end:
182 return out_clock_class;
183}
184
185BT_HIDDEN
186int copy_stream_class_content(struct trace_ir_maps *ir_maps,
187 const bt_stream_class *in_stream_class,
188 bt_stream_class *out_stream_class)
189{
190 struct trace_ir_metadata_maps *md_maps;
191 const bt_clock_class *in_clock_class;
192 bt_clock_class *out_clock_class;
193 const bt_field_class *in_packet_context_fc, *in_common_context_fc;
194 bt_field_class *out_packet_context_fc, *out_common_context_fc;
58f6d595
FD
195 const char *in_name;
196 int ret = 0;
a07aba4f 197 bt_logging_level log_level = ir_maps->log_level;
475e740e 198 bt_self_component *self_comp = ir_maps->self_comp;
58f6d595 199
475e740e 200 BT_COMP_LOGD("Copying content of stream class: in-sc-addr=%p, out-sc-addr=%p",
58f6d595
FD
201 in_stream_class, out_stream_class);
202
203 md_maps = borrow_metadata_maps_from_input_stream_class(ir_maps, in_stream_class);
204 in_clock_class = bt_stream_class_borrow_default_clock_class_const(
205 in_stream_class);
206
207 if (in_clock_class) {
208 /* Copy the clock class. */
209 out_clock_class =
210 borrow_mapped_clock_class(md_maps, in_clock_class);
211 if (!out_clock_class) {
212 out_clock_class = create_new_mapped_clock_class(
213 ir_maps->self_comp, md_maps,
214 in_clock_class);
215 }
216 bt_stream_class_set_default_clock_class(out_stream_class,
217 out_clock_class);
218
219 }
220
84ff66df
PP
221 /*
222 * Safe to use the same value object because it's frozen at this
223 * point.
224 */
225 bt_stream_class_set_user_attributes(out_stream_class,
226 bt_stream_class_borrow_user_attributes_const(in_stream_class));
227
37a93d41 228 bt_stream_class_set_supports_packets(
34e13c22 229 out_stream_class,
37a93d41 230 bt_stream_class_supports_packets(in_stream_class),
5ef34326 231 bt_stream_class_packets_have_beginning_default_clock_snapshot(
37a93d41 232 in_stream_class),
5ef34326 233 bt_stream_class_packets_have_end_default_clock_snapshot(
34e13c22 234 in_stream_class));
77037b2b
PP
235 bt_stream_class_set_supports_discarded_events(
236 out_stream_class,
237 bt_stream_class_supports_discarded_events(in_stream_class),
238 bt_stream_class_discarded_events_have_default_clock_snapshots(
239 in_stream_class));
240 bt_stream_class_set_supports_discarded_packets(
241 out_stream_class,
242 bt_stream_class_supports_discarded_packets(in_stream_class),
243 bt_stream_class_discarded_packets_have_default_clock_snapshots(
244 in_stream_class));
34e13c22 245
58f6d595
FD
246 in_name = bt_stream_class_get_name(in_stream_class);
247 if (in_name) {
fb25b9e3
PP
248 if (bt_stream_class_set_name(out_stream_class, in_name) !=
249 BT_STREAM_CLASS_SET_NAME_STATUS_OK) {
475e740e 250 BT_COMP_LOGE("Error set stream class name: out-sc-addr=%p, "
58f6d595
FD
251 "name=%s", out_stream_class, in_name);
252 ret = -1;
253 goto error;
254 }
255 }
256
257 bt_stream_class_set_assigns_automatic_stream_id(out_stream_class,
258 BT_FALSE);
259 bt_stream_class_set_assigns_automatic_event_class_id(out_stream_class,
260 BT_FALSE);
261
262 /*
263 * Add the input packet context field class to the context to
264 * resolution in the further steps.
265 */
266 in_packet_context_fc =
267 bt_stream_class_borrow_packet_context_field_class_const(
268 in_stream_class);
269 md_maps->fc_resolving_ctx->packet_context =
270 in_packet_context_fc;
271
272 if (in_packet_context_fc) {
273 /* Copy packet context. */
274 out_packet_context_fc = create_field_class_copy(
275 md_maps, in_packet_context_fc);
276
277 ret = copy_field_class_content(md_maps,
278 in_packet_context_fc, out_packet_context_fc);
279 if (ret) {
280 ret = -1;
281 goto error;
282 }
283
fb25b9e3
PP
284 if (bt_stream_class_set_packet_context_field_class(
285 out_stream_class, out_packet_context_fc) !=
286 BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_OK) {
475e740e 287 BT_COMP_LOGE("Error setting stream class' packet context "
58f6d595
FD
288 "field class: sc-addr=%p, packet-fc-addr=%p",
289 out_stream_class, out_packet_context_fc);
290 ret = -1;
291 goto error;
292 }
293 }
294
295 /*
296 * Add the input common context field class to the context to
297 * resolution in the further steps.
298 */
299 in_common_context_fc =
300 bt_stream_class_borrow_event_common_context_field_class_const(
301 in_stream_class);
302 md_maps->fc_resolving_ctx->event_common_context =
303 in_common_context_fc;
304
305 if (in_common_context_fc) {
306 /* Copy common context. */
307 /* TODO: I find it a bit awkward to have this special function
308 * here to add the debug-info field class. I would like to
309 * abstract that.*/
310 out_common_context_fc = create_field_class_copy(
311 md_maps, in_common_context_fc);
312
313 ret = copy_event_common_context_field_class_content(
314 md_maps, ir_maps->debug_info_field_class_name,
315 in_common_context_fc, out_common_context_fc);
316 if (ret) {
317 goto error;
318 }
319
fb25b9e3
PP
320 if (bt_stream_class_set_event_common_context_field_class(
321 out_stream_class, out_common_context_fc) !=
322 BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_OK) {
475e740e 323 BT_COMP_LOGE("Error setting stream class' packet context "
58f6d595
FD
324 "field class: sc-addr=%p, packet-fc-addr=%p",
325 out_stream_class, out_common_context_fc);
326 ret = -1;
327 goto error;
328 }
329 }
330
475e740e 331 BT_COMP_LOGD("Copied content of stream class: in-sc-addr=%p, out-sc-addr=%p",
58f6d595
FD
332 in_stream_class, out_stream_class);
333error:
334 return ret;
335}
336
337BT_HIDDEN
338int copy_event_class_content(struct trace_ir_maps *ir_maps,
339 const bt_event_class *in_event_class,
340 bt_event_class *out_event_class)
341{
342 struct trace_ir_metadata_maps *md_maps;
343 const char *in_event_class_name, *in_emf_uri;
344 bt_property_availability prop_avail;
a07aba4f 345 bt_event_class_log_level ec_log_level;
58f6d595
FD
346 bt_field_class *out_specific_context_fc, *out_payload_fc;
347 const bt_field_class *in_event_specific_context, *in_event_payload;
348 int ret = 0;
a07aba4f 349 bt_logging_level log_level = ir_maps->log_level;
475e740e 350 bt_self_component *self_comp = ir_maps->self_comp;
58f6d595 351
475e740e 352 BT_COMP_LOGD("Copying content of event class: in-ec-addr=%p, out-ec-addr=%p",
58f6d595
FD
353 in_event_class, out_event_class);
354
355 /* Copy event class name. */
356 in_event_class_name = bt_event_class_get_name(in_event_class);
357 if (in_event_class_name) {
fb25b9e3
PP
358 if (bt_event_class_set_name(out_event_class,
359 in_event_class_name) !=
360 BT_EVENT_CLASS_SET_NAME_STATUS_OK) {
475e740e 361 BT_COMP_LOGE("Error setting event class' name: ec-addr=%p, "
58f6d595
FD
362 "name=%s", out_event_class, in_event_class_name);
363 ret = -1;
364 goto error;
365 }
366 }
367
84ff66df
PP
368 /*
369 * Safe to use the same value object because it's frozen at this
370 * point.
371 */
372 bt_event_class_set_user_attributes(out_event_class,
373 bt_event_class_borrow_user_attributes_const(in_event_class));
374
58f6d595 375 /* Copy event class loglevel. */
a07aba4f
PP
376 prop_avail = bt_event_class_get_log_level(in_event_class,
377 &ec_log_level);
58f6d595
FD
378 if (prop_avail == BT_PROPERTY_AVAILABILITY_AVAILABLE) {
379 bt_event_class_set_log_level(out_event_class,
a07aba4f 380 ec_log_level);
58f6d595
FD
381 }
382
383 /* Copy event class emf uri. */
384 in_emf_uri = bt_event_class_get_emf_uri(in_event_class);
385 if (in_emf_uri) {
fb25b9e3
PP
386 if (bt_event_class_set_emf_uri(out_event_class, in_emf_uri) !=
387 BT_EVENT_CLASS_SET_EMF_URI_STATUS_OK) {
475e740e 388 BT_COMP_LOGE("Error setting event class' emf uri: ec-addr=%p, "
58f6d595
FD
389 "emf uri=%s", out_event_class, in_emf_uri);
390 ret = -1;
391 goto error;
392 }
393 }
394
395 md_maps = borrow_metadata_maps_from_input_event_class(ir_maps, in_event_class);
396 /*
397 * Add the input event class' specific ctx to te
398 * context.
399 */
400 in_event_specific_context =
401 bt_event_class_borrow_specific_context_field_class_const(
402 in_event_class);
403
404 md_maps->fc_resolving_ctx->event_specific_context =
405 in_event_specific_context;
406
407 if (in_event_specific_context) {
408 /* Copy the specific context of this event class. */
409 out_specific_context_fc = create_field_class_copy(md_maps,
410 in_event_specific_context);
411
abf710c7 412 ret = copy_field_class_content(md_maps,
58f6d595
FD
413 in_event_specific_context, out_specific_context_fc);
414 if (ret) {
415 goto error;
416 }
417 /*
418 * Add the output specific context to the output event
419 * class.
420 */
fb25b9e3
PP
421 if (bt_event_class_set_specific_context_field_class(
422 out_event_class, out_specific_context_fc) !=
423 BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_OK) {
475e740e 424 BT_COMP_LOGE("Error setting event class' specific context "
58f6d595
FD
425 "field class: ec-addr=%p, ctx-fc-addr=%p",
426 out_event_class, out_specific_context_fc);
427 ret = -1;
428 goto error;
429 }
430 }
431
432 /*
433 * Add the input event class' payload field class to
434 * the context.
435 */
436 in_event_payload = bt_event_class_borrow_payload_field_class_const(
437 in_event_class);
438
439 md_maps->fc_resolving_ctx->event_payload = in_event_payload;
440
441 if (in_event_payload) {
442 /* Copy the payload of this event class. */
443 out_payload_fc = create_field_class_copy(md_maps,
444 in_event_payload);
abf710c7 445 ret = copy_field_class_content(md_maps,
58f6d595
FD
446 in_event_payload, out_payload_fc);
447 if (ret) {
448 goto error;
449 }
450
451 /* Add the output payload to the output event class. */
fb25b9e3
PP
452 if (bt_event_class_set_payload_field_class(
453 out_event_class, out_payload_fc) !=
454 BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_OK) {
475e740e 455 BT_COMP_LOGE("Error setting event class' payload "
58f6d595
FD
456 "field class: ec-addr=%p, payload-fc-addr=%p",
457 out_event_class, out_payload_fc);
458 ret = -1;
459 goto error;
460 }
461 }
462
475e740e 463 BT_COMP_LOGD("Copied content of event class: in-ec-addr=%p, out-ec-addr=%p",
58f6d595
FD
464 in_event_class, out_event_class);
465error:
466 return ret;
467}
468
469BT_HIDDEN
470int copy_event_common_context_field_class_content(
471 struct trace_ir_metadata_maps *md_maps,
472 const char *debug_info_fc_name,
473 const bt_field_class *in_field_class,
474 bt_field_class *out_field_class)
475{
58f6d595
FD
476 bt_field_class *debug_field_class = NULL, *bin_field_class = NULL,
477 *func_field_class = NULL, *src_field_class = NULL;
478 int ret = 0;
a07aba4f 479 bt_logging_level log_level = md_maps->log_level;
475e740e 480 bt_self_component *self_comp = md_maps->self_comp;
58f6d595 481
475e740e 482 BT_COMP_LOGD("Copying content of event common context field class: "
58f6d595
FD
483 "in-fc-addr=%p, out-fc-addr=%p", in_field_class, out_field_class);
484
485 /* Copy the content of the input common context. */
486 ret = copy_field_class_content(md_maps, in_field_class, out_field_class);
487 if (ret) {
488 goto error;
489 }
490
491 /*
492 * If this event common context has the necessary fields to compute the
493 * debug information append the debug-info field class to the event
494 * common context.
495 */
496 if (is_event_common_ctx_dbg_info_compatible(in_field_class, debug_info_fc_name)) {
497 /*
498 * The struct field and 3 sub-fields are not stored in the
499 * field class map because they don't have input equivalent.
500 * We need to put our reference each of these field classes
501 * once they are added to their respective containing field
502 * classes.
503 */
504 debug_field_class = bt_field_class_structure_create(
505 md_maps->output_trace_class);
506 if (!debug_field_class) {
475e740e 507 BT_COMP_LOGE_STR("Failed to create debug_info structure.");
58f6d595
FD
508 ret = -1;
509 goto error;
510 }
511
512 bin_field_class = bt_field_class_string_create(
513 md_maps->output_trace_class);
514 if (!bin_field_class) {
475e740e 515 BT_COMP_LOGE_STR("Failed to create string for field=bin.");
58f6d595
FD
516 ret = -1;
517 goto error;
518 }
519
520 func_field_class = bt_field_class_string_create(
521 md_maps->output_trace_class);
522 if (!func_field_class) {
475e740e 523 BT_COMP_LOGE_STR("Failed to create string for field=func.");
58f6d595
FD
524 ret = -1;
525 goto error;
526 }
527
528 src_field_class = bt_field_class_string_create(
529 md_maps->output_trace_class);
530 if (!src_field_class) {
475e740e 531 BT_COMP_LOGE_STR("Failed to create string for field=src.");
58f6d595
FD
532 ret = -1;
533 goto error;
534 }
535
fb25b9e3
PP
536 if (bt_field_class_structure_append_member(
537 debug_field_class, "bin", bin_field_class) !=
538 BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) {
475e740e 539 BT_COMP_LOGE_STR("Failed to add a field to debug_info "
58f6d595
FD
540 "struct: field=bin.");
541 ret = -1;
542 goto error;
543 }
544 BT_FIELD_CLASS_PUT_REF_AND_RESET(bin_field_class);
545
fb25b9e3
PP
546 if (bt_field_class_structure_append_member(
547 debug_field_class, "func", func_field_class) !=
548 BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) {
475e740e 549 BT_COMP_LOGE_STR("Failed to add a field to debug_info "
58f6d595
FD
550 "struct: field=func.");
551 ret = -1;
552 goto error;
553 }
554 BT_FIELD_CLASS_PUT_REF_AND_RESET(func_field_class);
555
fb25b9e3
PP
556 if (bt_field_class_structure_append_member(
557 debug_field_class, "src", src_field_class) !=
558 BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) {
475e740e 559 BT_COMP_LOGE_STR("Failed to add a field to debug_info "
58f6d595
FD
560 "struct: field=src.");
561 ret = -1;
562 goto error;
563 }
564 BT_FIELD_CLASS_PUT_REF_AND_RESET(src_field_class);
565
566 /*Add the filled debug-info field class to the common context. */
fb25b9e3
PP
567 if (bt_field_class_structure_append_member(out_field_class,
568 debug_info_fc_name, debug_field_class) !=
569 BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) {
475e740e 570 BT_COMP_LOGE_STR("Failed to add debug_info field to "
58f6d595
FD
571 "event common context.");
572 ret = -1;
573 goto error;
574 }
575 BT_FIELD_CLASS_PUT_REF_AND_RESET(debug_field_class);
576 }
475e740e 577 BT_COMP_LOGD("Copied content of event common context field class: "
58f6d595
FD
578 "in-fc-addr=%p, out-fc-addr=%p", in_field_class, out_field_class);
579 goto end;
580
581error:
582 if (debug_field_class) {
583 bt_field_class_put_ref(debug_field_class);
584 }
585 if (bin_field_class) {
586 bt_field_class_put_ref(bin_field_class);
587 }
588 if (func_field_class) {
589 bt_field_class_put_ref(func_field_class);
590 }
591 if (src_field_class) {
592 bt_field_class_put_ref(src_field_class);
593 }
594end:
595 return ret;
596}
597
598BT_HIDDEN
599bt_field_class *create_field_class_copy(struct trace_ir_metadata_maps *md_maps,
600 const bt_field_class *in_field_class)
601{
602 return create_field_class_copy_internal(md_maps, in_field_class);
603}
604
605BT_HIDDEN
606int copy_field_class_content(struct trace_ir_metadata_maps *md_maps,
607 const bt_field_class *in_field_class,
608 bt_field_class *out_field_class)
609{
610 return copy_field_class_content_internal(md_maps, in_field_class,
611 out_field_class);
612}
This page took 0.062506 seconds and 4 git commands to generate.