* SOFTWARE.
*/
-#include <assert.h>
+#define BT_LOG_TAG "PLUGIN-CTF-LTTNG-UTILS-DEBUG-INFO-FLT"
+#include "logging.h"
+
+#include <babeltrace/assert-internal.h>
#include <glib.h>
#include "debug-info.h"
#include "bin-info.h"
if (!bin->is_elf_only || !debug_info_src->func) {
/* Lookup source location */
ret = bin_info_lookup_source_location(bin, ip, &src_loc);
- printf_verbose("Failed to lookup source location (err: %i)\n", ret);
+ BT_LOGD("Failed to lookup source location: ret=%d", ret);
}
if (src_loc) {
static
void handle_statedump_build_id_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
struct proc_debug_info_sources *proc_dbg_info_src;
struct bin_info *bin = NULL;
int ret;
int64_t vpid;
uint64_t baddr;
+ uint64_t build_id_len;
ret = get_stream_event_context_int_field_value(err,
- event, "_vpid", &vpid);
+ event, VPID_FIELD_NAME, &vpid);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
goto end;
}
ret = get_payload_unsigned_int_field_value(err,
- event, "_baddr", &baddr);
+ event, BADDR_FIELD_NAME, &baddr);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ VPID_FIELD_NAME " field.");
goto end;
}
goto end;
}
- ret = get_payload_build_id_field_value(err, event, "_build_id",
- &bin->build_id, &bin->build_id_len);
+ ret = get_payload_build_id_field_value(err, event, BUILD_ID_FIELD_NAME,
+ &bin->build_id, &build_id_len);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
+ BT_LOGE_STR("Failed to get " BUILD_ID_FIELD_NAME
+ " field value.");
goto end;
}
+ if (build_id_len > SIZE_MAX) {
+ bin->build_id_len = (size_t) build_id_len;
+ }
/*
* Reset the is_elf_only flag in case it had been set
static
void handle_statedump_debug_link_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
struct proc_debug_info_sources *proc_dbg_info_src;
struct bin_info *bin = NULL;
int ret;
ret = get_stream_event_context_int_field_value(err, event,
- "_vpid", &vpid);
+ VPID_FIELD_NAME, &vpid);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
goto end;
}
ret = get_payload_unsigned_int_field_value(err,
- event, "_baddr", &baddr);
+ event, BADDR_FIELD_NAME, &baddr);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ BADDR_FIELD_NAME " field.");
ret = -1;
goto end;
}
- ret = get_payload_unsigned_int_field_value(err, event, "_crc32", &tmp);
+ ret = get_payload_unsigned_int_field_value(err, event, CRC32_FIELD_NAME,
+ &tmp);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ CRC32_FIELD_NAME " field.");
ret = -1;
goto end;
}
crc32 = (uint32_t) tmp;
ret = get_payload_string_field_value(err,
- event, "_filename", &filename);
+ event, FILENAME_FIELD_NAME, &filename);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
+ BT_LOGE_STR("Failed to get string value for "
+ FILENAME_FIELD_NAME " field.");
ret = -1;
goto end;
}
static
void handle_bin_info_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event, bool has_pic_field)
+ struct bt_event *event, bool has_pic_field)
{
struct proc_debug_info_sources *proc_dbg_info_src;
struct bin_info *bin;
int ret;
ret = get_payload_unsigned_int_field_value(err,
- event, "_baddr", &baddr);
+ event, BADDR_FIELD_NAME, &baddr);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ BADDR_FIELD_NAME " field.");
goto end;
}
ret = get_payload_unsigned_int_field_value(err,
- event, "_memsz", &memsz);
+ event, MEMSZ_FIELD_NAME, &memsz);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ MEMSZ_FIELD_NAME " field.");
goto end;
}
+ /*
+ * This field is not produced by the dlopen event emitted before
+ * lttng-ust 2.9.
+ */
ret = get_payload_string_field_value(err,
- event, "_path", &path);
- if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
+ event, PATH_FIELD_NAME, &path);
+ if (ret || !path) {
goto end;
}
uint64_t tmp;
ret = get_payload_unsigned_int_field_value(err,
- event, "_is_pic", &tmp);
+ event, IS_PIC_FIELD_NAME, &tmp);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ IS_PIC_FIELD_NAME " field.");
ret = -1;
goto end;
}
is_pic = true;
}
- ret = get_stream_event_context_int_field_value(err, event, "_vpid",
- &vpid);
+ ret = get_stream_event_context_int_field_value(err, event,
+ VPID_FIELD_NAME, &vpid);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
- goto end;
- }
-
- if (!path) {
goto end;
}
static inline
void handle_statedump_bin_info_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
handle_bin_info_event(err, debug_info, event, true);
}
static inline
void handle_lib_load_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
handle_bin_info_event(err, debug_info, event, false);
}
static inline
void handle_lib_unload_event(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
struct proc_debug_info_sources *proc_dbg_info_src;
uint64_t baddr;
int ret;
ret = get_payload_unsigned_int_field_value(err,
- event, "_baddr", &baddr);
+ event, BADDR_FIELD_NAME, &baddr);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
+ BT_LOGE_STR("Failed to get unsigned int value for "
+ BADDR_FIELD_NAME " field.");
ret = -1;
goto end;
}
- ret = get_stream_event_context_int_field_value(err, event, "_vpid",
- &vpid);
+ ret = get_stream_event_context_int_field_value(err, event,
+ VPID_FIELD_NAME, &vpid);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
goto end;
}
static
void handle_statedump_start(FILE *err, struct debug_info *debug_info,
- struct bt_ctf_event *event)
+ struct bt_event *event)
{
struct proc_debug_info_sources *proc_dbg_info_src;
int64_t vpid;
int ret;
ret = get_stream_event_context_int_field_value(err, event,
- "_vpid", &vpid);
+ VPID_FIELD_NAME, &vpid);
if (ret) {
- fprintf(err, "[error] %s in %s:%d\n", __func__,
- __FILE__, __LINE__);
- ret = -1;
goto end;
}
}
BT_HIDDEN
-void debug_info_handle_event(FILE *err, struct bt_ctf_event *event,
+void debug_info_handle_event(FILE *err, struct bt_event *event,
struct debug_info *debug_info)
{
- struct bt_ctf_event_class *event_class;
+ struct bt_event_class *event_class;
const char *event_name;
GQuark q_event_name;
if (!debug_info || !event) {
goto end;
}
- event_class = bt_ctf_event_get_class(event);
+ event_class = bt_event_get_class(event);
if (!event_class) {
goto end;
}
- event_name = bt_ctf_event_class_get_name(event_class);
+ event_name = bt_event_class_get_name(event_class);
if (!event_name) {
goto end_put_class;
}