From: Antoine Busque Date: Thu, 21 Apr 2016 06:26:04 +0000 (-0400) Subject: Use bool where possible in dwarf and bin-info X-Git-Tag: v1.4.0-rc1~52 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=302314ecf17d469511376dad85f86dc33d80541f Use bool where possible in dwarf and bin-info Signed-off-by: Antoine Busque Signed-off-by: Jérémie Galarneau --- diff --git a/include/babeltrace/dwarf.h b/include/babeltrace/dwarf.h index 4baa5918..c3d56b78 100644 --- a/include/babeltrace/dwarf.h +++ b/include/babeltrace/dwarf.h @@ -27,6 +27,7 @@ * SOFTWARE. */ +#include #include #include #include @@ -214,12 +215,12 @@ int bt_dwarf_die_get_call_line(struct bt_dwarf_die *die, * * @param die bt_dwarf_die instance * @param addr The memory address to verify - * @param contains Out parameter, 1 if addr is contained, - * 0 if not + * @param contains Out parameter, true if addr is contained, + * false if not * @returns 0 on succes, -1 on failure */ BT_HIDDEN int bt_dwarf_die_contains_addr(struct bt_dwarf_die *die, uint64_t addr, - int *contains); + bool *contains); #endif /* _BABELTRACE_DWARF_H */ diff --git a/lib/bin-info.c b/lib/bin-info.c index 023515ef..7048b738 100644 --- a/lib/bin-info.c +++ b/lib/bin-info.c @@ -779,7 +779,8 @@ static int bin_info_lookup_cu_function_name(struct bt_dwarf_cu *cu, uint64_t addr, char **func_name) { - int ret = 0, found = 0; + int ret = 0; + bool found = false; struct bt_dwarf_die *die = NULL; if (!cu || !func_name) { @@ -980,20 +981,27 @@ error: * subroutines are inlined within this function and would contain * `addr`. * + * On success, the out parameter `contains` is set with the boolean + * value indicating whether the DIE's range covers `addr`. On failure, + * it remains unchanged. + * * Do note that this function advances the position of `die`. If the * address is found within one of its children, `die` will be pointing * to that child upon returning from the function, allowing to extract * the information deemed necessary. * - * @param die The parent DIE in whose children the address will be - * looked for - * @param addr The address for which to look for in the DIEs - * @returns Returns 1 if the address was found, 0 if not + * @param die The parent DIE in whose children the address will be + * looked for + * @param addr The address for which to look for in the DIEs + * @param contains Out parameter, true if addr is contained, + * false if not + * @returns Returns 0 on success, -1 on failure */ static -int bin_info_child_die_has_address(struct bt_dwarf_die *die, uint64_t addr) +int bin_info_child_die_has_address(struct bt_dwarf_die *die, uint64_t addr, bool *contains) { - int ret = 0, contains = 0; + int ret = 0; + bool _contains = false; if (!die) { goto error; @@ -1013,24 +1021,23 @@ int bin_info_child_die_has_address(struct bt_dwarf_die *die, uint64_t addr) } if (tag == DW_TAG_inlined_subroutine) { - ret = bt_dwarf_die_contains_addr(die, addr, &contains); + ret = bt_dwarf_die_contains_addr(die, addr, &_contains); if (ret) { goto error; } if (contains) { - ret = 1; goto end; } } } while (bt_dwarf_die_next(die) == 0); end: - return ret; + *contains = _contains; + return 0; error: - ret = 0; - goto end; + return -1; } /** @@ -1048,7 +1055,8 @@ static int bin_info_lookup_cu_src_loc_inl(struct bt_dwarf_cu *cu, uint64_t addr, struct source_location **src_loc) { - int ret = 0, found = 0; + int ret = 0; + bool found = false; struct bt_dwarf_die *die = NULL; struct source_location *_src_loc = NULL; @@ -1070,7 +1078,7 @@ int bin_info_lookup_cu_src_loc_inl(struct bt_dwarf_cu *cu, uint64_t addr, } if (tag == DW_TAG_subprogram) { - int contains = 0; + bool contains = false; ret = bt_dwarf_die_contains_addr(die, addr, &contains); if (ret) { @@ -1082,8 +1090,12 @@ int bin_info_lookup_cu_src_loc_inl(struct bt_dwarf_cu *cu, uint64_t addr, * Try to find an inlined subroutine * child of this DIE containing addr. */ - found = bin_info_child_die_has_address( - die, addr); + ret = bin_info_child_die_has_address(die, addr, + &found); + if(ret) { + goto error; + } + goto end; } } diff --git a/lib/dwarf.c b/lib/dwarf.c index c7e2f448..0b8bf961 100644 --- a/lib/dwarf.c +++ b/lib/dwarf.c @@ -351,7 +351,7 @@ error: BT_HIDDEN int bt_dwarf_die_contains_addr(struct bt_dwarf_die *die, uint64_t addr, - int *contains) + bool *contains) { int ret; @@ -360,7 +360,7 @@ int bt_dwarf_die_contains_addr(struct bt_dwarf_die *die, uint64_t addr, goto error; } - *contains = ret; + *contains = (ret == 1); return 0;