Date: Fri, 18 Jun 2010 16:14:37 +0000 (UTC) From: Alexander Kabaev <kan@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org Subject: svn commit: r209306 - stable/8/cddl/contrib/opensolaris/tools/ctf/cvt Message-ID: <201006181614.o5IGEbCx006842@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kan Date: Fri Jun 18 16:14:37 2010 New Revision: 209306 URL: http://svn.freebsd.org/changeset/base/209306 Log: MFC r207578: Do not encode more than CTF_MAX_VLEN(1023) enum members. CTF can not represent enums with more than CTF_MAX_VLEN members, but ctfconvert will happily ignore that limitation and create CTF section no other tool can interpret. This change is different from similar change from upstream, which just returns an error if big enum is encountered. Doing that means that every FreeBSD kernel with compiled in hwpmc will have no useable CTF information due to pmc_event enum having 1236+ members. Modified: stable/8/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c Directory Properties: stable/8/cddl/contrib/opensolaris/ (props changed) Modified: stable/8/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c ============================================================================== --- stable/8/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c Fri Jun 18 16:07:24 2010 (r209305) +++ stable/8/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c Fri Jun 18 16:14:37 2010 (r209306) @@ -355,14 +355,21 @@ write_type(void *arg1, void *arg2) for (i = 0, ep = tp->t_emem; ep != NULL; ep = ep->el_next) i++; /* count up enum members */ + if (i > CTF_MAX_VLEN) { + warning("enum %s has too many values: %d > %d\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; ep != NULL && i > 0; ep = ep->el_next) { 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; ctf_buf_write(b, &cte, sizeof (cte)); + i--; } break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006181614.o5IGEbCx006842>