Module Name:    src
Committed By:   christos
Date:           Sun Mar  9 20:48:01 UTC 2014

Modified Files:
        src/external/cddl/osnet/dist/tools/ctf/cvt: dwarf.c

Log Message:
put back our local fixes:
- don't die on unresolved types.
- it is ok to have 0 sized arrays in structs
- forward enum decls.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c
diff -u src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.8 src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.9
--- src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c:1.8	Sun Mar  9 13:04:00 2014
+++ src/external/cddl/osnet/dist/tools/ctf/cvt/dwarf.c	Sun Mar  9 16:48:01 2014
@@ -817,7 +817,9 @@ die_enum_create(dwarf_t *dw, Dwarf_Die d
 
 	debug(3, "die %llu: creating enum\n", off);
 
-	tdp->t_type = ENUM;
+	tdp->t_type = (die_isdecl(dw, die) ? FORWARD : ENUM);
+	if (tdp->t_type != ENUM)
+		return;
 
 	(void) die_unsigned(dw, die, DW_AT_byte_size, &uval, DW_ATTR_REQ);
 	/* Check for bogus gcc DW_AT_byte_size attribute */
@@ -1137,6 +1139,9 @@ die_sou_resolve(tdesc_t *tdp, tdesc_t **
 		if (ml->ml_size == 0) {
 			mt = tdesc_basetype(ml->ml_type);
 
+			if (mt == NULL)
+				continue;
+
 			if ((ml->ml_size = tdesc_bitsize(mt)) != 0)
 				continue;
 
@@ -1149,6 +1154,16 @@ die_sou_resolve(tdesc_t *tdp, tdesc_t **
 			if (mt->t_type == ARRAY && mt->t_ardef->ad_nelems == 0)
 				continue;
 
+			if (mt->t_type == STRUCT && 
+				mt->t_members != NULL &&
+				mt->t_members->ml_type->t_type == ARRAY &&
+				mt->t_members->ml_type->t_ardef->ad_nelems == 0) {
+			    /* struct with zero sized array */
+			    continue;
+			}
+
+			printf("%s unresolved type = %d (%s)\n", tdesc_name(tdp),
+				mt->t_type, tdesc_name(mt));
 			dw->dw_nunres++;
 			return (1);
 		}

Reply via email to