Hi Mark,

just when looking at it I found this issue but it is in fact unrelated minor
bug existing before this patch.


On Wed, 26 Jun 2013 18:02:26 +0200, Mark Wielaard wrote:
> --- a/libdw/libdw_visit_scopes.c
> +++ b/libdw/libdw_visit_scopes.c
> @@ -87,7 +87,7 @@ __libdw_visit_scopes (depth, root, previsit, postvisit, arg)
>  
>    child.parent = root;
>    if (INTUSE(dwarf_child) (&root->die, &child.die) != 0)
> -    return -1;
> +    return 0; // Having zero children is legal.

dwarf_child seems to return 1 on no children and -1 on error.  Here you hide
the error case.


>  
>    inline int recurse (void)
>      {
> @@ -95,63 +95,72 @@ __libdw_visit_scopes (depth, root, previsit, postvisit, 
> arg)
[...]
> +         Dwarf_Die orig_child_die = child.die;
> +         Dwarf_Attribute attr_mem;
> +         Dwarf_Attribute *attr = INTUSE(dwarf_attr) (&child.die,
> +                                                     DW_AT_import,
> +                                                     &attr_mem);
> +         if (INTUSE(dwarf_formref_die) (attr, &child.die) != NULL
> +                && INTUSE(dwarf_child) (&child.die, &child.die) == 0)

Here again -1 seems to be an error, +1 no more children.

>             {
> -             int result = recurse ();
> +             int result = walk_children ();
>               if (result != DWARF_CB_OK)
>                 return result;
>             }
> -         break;
>  
> -       case imported:
> +         /* Any "real" children left?  */
> +         if (INTUSE(dwarf_siblingof) (&orig_child_die, &child.die) != 0)

Here again -1 seems to be an error, +1 no more children.


> +           return 0;
> +       };
> +
> +     child.prune = false;
[...]


Jan
_______________________________________________
elfutils-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/elfutils-devel

Reply via email to