[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