#define BT_COMP_LOG_SELF_COMP (bin->self_comp)
#define BT_LOG_OUTPUT_LEVEL (bin->log_level)
#define BT_LOG_TAG "PLUGIN/FLT.LTTNG-UTILS.DEBUG-INFO/BIN-INFO"
-#include "plugins/comp-logging.h"
+#include "logging/comp-logging.h"
#include <babeltrace2/logging.h>
#include <dwarf.h>
#include <inttypes.h>
#include <libgen.h>
#include <math.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
{
struct bt_fd_cache_handle *elf_handle = NULL;
Elf *elf_file = NULL;
+ int ret;
- if (!bin) {
- goto error;
- }
+ BT_ASSERT(bin);
elf_handle = bt_fd_cache_get_handle(bin->fd_cache, bin->elf_path);
if (!elf_handle) {
elf_file = elf_begin(bt_fd_cache_handle_get_fd(bin->elf_handle),
ELF_C_READ, NULL);
if (!elf_file) {
- BT_COMP_LOGE("elf_begin failed: %s", elf_errmsg(-1));
+ BT_COMP_LOGE_APPEND_CAUSE(bin->self_comp,
+ "elf_begin failed: %s", elf_errmsg(-1));
goto error;
}
bin->elf_file = elf_file;
if (elf_kind(elf_file) != ELF_K_ELF) {
- BT_COMP_LOGE("Error: %s is not an ELF object", bin->elf_path);
+ BT_COMP_LOGE_APPEND_CAUSE(bin->self_comp,
+ "Error: %s is not an ELF object", bin->elf_path);
goto error;
}
- return 0;
+
+ ret = 0;
+ goto end;
error:
bt_fd_cache_put_handle(bin->fd_cache, elf_handle);
elf_end(elf_file);
- return -1;
+ ret = -1;
+
+end:
+ return ret;
}
/**
return 0;
error:
- bt_fd_cache_put_handle(bin->fd_cache, dwarf_handle);
+ if (bin) {
+ bt_fd_cache_put_handle(bin->fd_cache, dwarf_handle);
+ }
dwarf_end(dwarf_info);
g_free(dwarf_info);
free(cu);