>makedumpfile/eppic was not able to resolve member of the
>structure in cases such as:
>
>struct abc
>{
>       ...
>       ...
>       struct xyz
>       ...
>}
>
>and eppic script:
>
>sample()
>{
>       struct abc *a;
>       struct xyz *x;
>
>       x->member;
>}
>
>would fail to resolve "member" of structure xyz. However
>it works if "struct abc *a;" line is removed from eppic
>script. This patch fixes this issue.
>
>Signed-off-by: Aravinda Prasad <[email protected]>

Thanks, I'll merge this patch into makedumpfile-1.5.6.

Atsushi Kumagai

>---
> dwarf_info.c      |    2 +-
> extension_eppic.c |   17 +++++++++++------
> 2 files changed, 12 insertions(+), 7 deletions(-)
>
>diff --git a/dwarf_info.c b/dwarf_info.c
>index c5752c9..b7012b2 100644
>--- a/dwarf_info.c
>+++ b/dwarf_info.c
>@@ -1468,7 +1468,7 @@ get_die_attr_type(unsigned long long die_off, int 
>*type_flag,
> {
>       Dwarf_Die result;
>
>-      if (!die_attr_off)
>+      if (!die_attr_off || !die_off)
>               return FALSE;
>
>       if (!get_die_from_offset((Dwarf_Off) die_off, &result)) {
>diff --git a/extension_eppic.c b/extension_eppic.c
>index 7e045c9..20d996d 100644
>--- a/extension_eppic.c
>+++ b/extension_eppic.c
>@@ -24,6 +24,8 @@
> #include "makedumpfile.h"
> #include "extension_eppic.h"
>
>+static int apigetctype(int, char *, type_t *);
>+
> /*
>  * Most of the functions included in this file performs similar
>  * functionality as in the applications/crash/eppic.c file part of
>@@ -183,7 +185,15 @@ drilldown(ull offset, type_t *t)
>                       goto label;
>               case DW_TAG_structure_type:
>                       eppic_type_mkstruct(t);
>-                      goto label;
>+label:
>+                      eppic_type_setsize(t, GET_DIE_LENGTH(t_die_off, TRUE));
>+                      eppic_type_setidx(t, (ull)t_die_off);
>+                      tstr = GET_DIE_NAME(t_die_off);
>+                      /* Drill down further */
>+                      if (tstr)
>+                              apigetctype(V_STRUCT, tstr, t);
>+                      die_off = 0;
>+                      break;
>               /* Unknown TAG ? */
>               default:
>                       die_off = t_die_off;
>@@ -191,11 +201,6 @@ drilldown(ull offset, type_t *t)
>               }
>       }
>
>-label:
>-      eppic_type_setsize(t, GET_DIE_LENGTH(t_die_off, TRUE));
>-      eppic_type_setidx(t, (ull)t_die_off);
>-      tstr = GET_DIE_NAME(t_die_off);
>-
> out:
>       eppic_setupidx(t, ref, nidx, idxlst);
>       if (fctflg)
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to