#include <babeltrace/ctf/events-internal.h>
#include <babeltrace/ctf/iterator.h>
#include <babeltrace/ctf-text/types.h>
-#include <babeltrace/debuginfo.h>
+#include <babeltrace/debug-info.h>
#include <babeltrace/iterator.h>
#include <popt.h>
static struct bt_format *fmt_read;
+void bt_dummy_hook(void);
+void bt_lttng_live_hook(void);
+void bt_ctf_hook(void);
+void bt_ctf_text_hook(void);
+void bt_ctf_metadata_hook(void);
+
static
void strlower(char *str)
{
OPT_STREAM_INTERSECTION,
OPT_DEBUG_INFO_DIR,
OPT_DEBUG_INFO_FULL_PATH,
+ OPT_DEBUG_INFO_TARGET_PREFIX,
};
/*
{ "clock-gmt", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_GMT, NULL, NULL },
{ "clock-force-correlate", 0, POPT_ARG_NONE, NULL, OPT_CLOCK_FORCE_CORRELATE, NULL, NULL },
{ "stream-intersection", 0, POPT_ARG_NONE, NULL, OPT_STREAM_INTERSECTION, NULL, NULL },
-#ifdef ENABLE_DEBUGINFO
+#ifdef ENABLE_DEBUG_INFO
{ "debug-info-dir", 0, POPT_ARG_STRING, NULL, OPT_DEBUG_INFO_DIR, NULL, NULL },
{ "debug-info-full-path", 0, POPT_ARG_NONE, NULL, OPT_DEBUG_INFO_FULL_PATH, NULL, NULL },
+ { "debug-info-target-prefix", 0, POPT_ARG_STRING, NULL, OPT_DEBUG_INFO_TARGET_PREFIX, NULL, NULL },
#endif
{ NULL, 0, 0, NULL, 0, NULL, NULL },
};
fprintf(fp, " --clock-force-correlate Assume that clocks are inherently correlated\n");
fprintf(fp, " across traces.\n");
fprintf(fp, " --stream-intersection Only print events when all streams are active.\n");
-#ifdef ENABLE_DEBUGINFO
+#ifdef ENABLE_DEBUG_INFO
fprintf(fp, " --debug-info-dir Directory in which to look for debugging information\n");
fprintf(fp, " files. (default: /usr/lib/debug/)\n");
+ fprintf(fp, " --debug-info-target-prefix Directory to use as a prefix for executable lookup\n");
fprintf(fp, " --debug-info-full-path Show full debug info source and binary paths (if available)\n");
#endif
list_formats(fp);
case OPT_DEBUG_INFO_FULL_PATH:
opt_debug_info_full_path = 1;
break;
+ case OPT_DEBUG_INFO_TARGET_PREFIX:
+ opt_debug_info_target_prefix = (char *) poptGetOptArg(pc);
+ if (!opt_debug_info_target_prefix) {
+ ret = -EINVAL;
+ goto end;
+ }
+ break;
default:
ret = -EINVAL;
goto end;
struct bt_iter_pos *begin_pos = NULL, *end_pos = NULL;
struct bt_ctf_event *ctf_event;
int ret;
+ int error_holder = 0;
sout = container_of(td_write, struct ctf_text_stream_pos,
trace_descriptor);
goto end;
}
ret = bt_iter_next(bt_ctf_get_iter(iter));
- if (ret < 0) {
+ if (ret == -ERANGE) {
+ /*
+ * Remember that a range (truncated packet)
+ * error occurred and continue.
+ */
+ error_holder = 1;
+ continue;
+ } else if (ret < 0) {
goto end;
}
}
- ret = 0;
+ ret = error_holder;
end:
bt_ctf_iter_destroy(iter);
return ret;
}
+void call_plugins_hooks(void)
+{
+ bt_dummy_hook();
+ bt_lttng_live_hook();
+ bt_ctf_hook();
+ bt_ctf_text_hook();
+ bt_ctf_metadata_hook();
+}
+
int main(int argc, char **argv)
{
int ret, partial_error = 0, open_success = 0;
struct bt_context *ctx;
int i;
+ call_plugins_hooks();
+
opt_input_paths = g_ptr_array_new();
ret = parse_options(argc, argv);
free(opt_output_format);
free(opt_output_path);
free(opt_debug_info_dir);
+ free(opt_debug_info_target_prefix);
g_ptr_array_free(opt_input_paths, TRUE);
if (partial_error)
exit(EXIT_FAILURE);