[PATCH] makedumpfile/eppic: Properly resolve structure members
Atsushi Kumagai
kumagai-atsushi at mxc.nes.nec.co.jp
Mon Mar 3 02:03:13 EST 2014
>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 <aravinda at linux.vnet.ibm.com>
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)
More information about the kexec
mailing list