Use bool where possible in dwarf and bin-info
authorAntoine Busque <abusque@efficios.com>
Thu, 21 Apr 2016 06:26:04 +0000 (02:26 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 3 May 2016 19:42:42 +0000 (15:42 -0400)
Signed-off-by: Antoine Busque <abusque@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/dwarf.h
lib/bin-info.c
lib/dwarf.c

index 4baa591817fe6895aab6c38b568903d31a107f34..c3d56b78cef36f5e7b1a7c9739de885301d46192 100644 (file)
@@ -27,6 +27,7 @@
  * SOFTWARE.
  */
 
+#include <stdbool.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <dwarf.h>
@@ -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 */
index 023515effd510f1d118bab45f3e1f32382c279aa..7048b73894ce7e6092e9cabc33fba76624610579 100644 (file)
@@ -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;
                        }
                }
index c7e2f44856c6a1fe910d5f018462529c1543556f..0b8bf9613ffe731706fe0bf2b19d514e320df047 100644 (file)
@@ -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;
 
This page took 0.038465 seconds and 4 git commands to generate.