Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/cddl/osnet/dist/tools/ctf/cvt DTrace: The CTF forma...



details:   https://anonhg.NetBSD.org/src/rev/ffcf8a56a426
branches:  trunk
changeset: 752935:ffcf8a56a426
user:      darran <darran%NetBSD.org@localhost>
date:      Thu Mar 11 23:26:33 2010 +0000

description:
DTrace: The CTF format is limited to only 1024 elements in an enum,
so rather than error out when there are more than this just truncate the
length.

diffstat:

 external/cddl/osnet/dist/tools/ctf/cvt/ctf.c |  16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diffs (60 lines):

diff -r 014018c93954 -r ffcf8a56a426 external/cddl/osnet/dist/tools/ctf/cvt/ctf.c
--- a/external/cddl/osnet/dist/tools/ctf/cvt/ctf.c      Thu Mar 11 21:43:15 2010 +0000
+++ b/external/cddl/osnet/dist/tools/ctf/cvt/ctf.c      Thu Mar 11 23:26:33 2010 +0000
@@ -369,14 +369,16 @@
                        i++; /* count up enum members */
 
                if (i > CTF_MAX_VLEN) {
-                       terminate("enum %s has too many values: %d > %d\n",
+                       printf("enum %s has too many values: %d > %d, truncating\n",
                            tdesc_name(tp), i, CTF_MAX_VLEN);
+
+                   i = CTF_MAX_VLEN;
                }
 
                ctt.ctt_info = CTF_TYPE_INFO(CTF_K_ENUM, isroot, i);
                write_sized_type_rec(b, &ctt, tp->t_size);
 
-               for (ep = tp->t_emem; ep != NULL; ep = ep->el_next) {
+               for (ep = tp->t_emem; i && ep != NULL; ep = ep->el_next, i--) {
                        offset = strtab_insert(&b->ctb_strtab, ep->el_name);
                        cte.cte_name = CTF_TYPE_NAME(CTF_STRTAB_0, offset);
                        cte.cte_value = ep->el_number;
@@ -818,7 +820,7 @@
                        debug(3, "Skipping null object\n");
                        continue;
                } else if (id >= tdsize) {
-                       parseterminate("Reference to invalid type %d", id);
+                       parseterminate("(1) Reference to invalid type %d", id);
                }
 
                ii = iidesc_new(symit_name(si));
@@ -869,7 +871,7 @@
                dptr += 2;
 
                if (retid >= tdsize)
-                       parseterminate("Reference to invalid type %d", retid);
+                       parseterminate("(2) Reference to invalid type %d", retid);
 
                ii = iidesc_new(symit_name(si));
                ii->ii_dtype = tdarr[retid];
@@ -887,8 +889,8 @@
                        v = (void *) dptr;
                        ushort_t id = *((ushort_t *)v);
                        if (id >= tdsize)
-                               parseterminate("Reference to invalid type %d",
-                                   id);
+                               parseterminate("(3) Reference to invalid type %d (tdsize %d) ii_nargs %d %s",
+                                   id, tdsize, ii->ii_nargs, ii->ii_name);
                        ii->ii_args[i] = tdarr[id];
                }
 
@@ -943,7 +945,7 @@
                        break;
 
                if (tid >= tdsize)
-                       parseterminate("Reference to invalid type %d", tid);
+                       parseterminate("(4) Reference to invalid type %d", tid);
 
                void *v = (void *) dptr;
                ctt = v;



Home | Main Index | Thread Index | Old Index