X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Flttng-utils%2Fdebug-info%2Fbin-info.c;h=dcb543151744daf76a5ce6a5b5e6517a80fdc25e;hb=fe5ee4280c235005d2fa7eab2af14a352740d4eb;hp=3d46a54f2ee9afd205ddea386e0ff55347d43640;hpb=475e740ee86751cc9ab29a9b5df2968a77c3560d;p=babeltrace.git diff --git a/src/plugins/lttng-utils/debug-info/bin-info.c b/src/plugins/lttng-utils/debug-info/bin-info.c index 3d46a54f..dcb54315 100644 --- a/src/plugins/lttng-utils/debug-info/bin-info.c +++ b/src/plugins/lttng-utils/debug-info/bin-info.c @@ -29,7 +29,7 @@ #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 #include @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -163,10 +164,9 @@ int bin_info_set_elf_file(struct bin_info *bin) { 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) { @@ -178,23 +178,30 @@ int bin_info_set_elf_file(struct bin_info *bin) 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; } /** @@ -293,7 +300,7 @@ end: * * @returns 1 on if the build id of stored in `bin` matches * the build id of the ondisk file. - * 0 on if they are different or an error occured. + * 0 on if they are different or an error occurred. */ static int is_build_id_matching(struct bin_info *bin) @@ -370,6 +377,9 @@ int bin_info_set_build_id(struct bin_info *bin, uint8_t *build_id, goto error; } + /* Free any previously set build id. */ + g_free(bin->build_id); + /* Set the build id. */ bin->build_id = g_new0(uint8_t, build_id_len); if (!bin->build_id) { @@ -488,7 +498,9 @@ int bin_info_set_dwarf_info_from_path(struct bin_info *bin, char *path) 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);