svn commit: r274565 - head/cddl/contrib/opensolaris/tools/ctf/cvt
Mark Johnston
markj at FreeBSD.org
Sun Nov 16 04:10:24 UTC 2014
Author: markj
Date: Sun Nov 16 04:10:23 2014
New Revision: 274565
URL: https://svnweb.freebsd.org/changeset/base/274565
Log:
Remove an incorrect optimization. The type IDs of each member of a struct or
union must be checked when determine whether two types are equivalent. This
bug could cause ctfmerge(1) to incorrectly merge distinct types.
Reviewed by: Robert Mustacchi <rm at joyent.com>
MFC after: 2 weeks
Sponsored by: EMC / Isilon Storage Division
Modified:
head/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c
Modified: head/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c
==============================================================================
--- head/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c Sun Nov 16 04:07:53 2014 (r274564)
+++ head/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c Sun Nov 16 04:10:23 2014 (r274565)
@@ -287,19 +287,11 @@ equiv_su(tdesc_t *stdp, tdesc_t *ttdp, e
while (ml1 && ml2) {
if (ml1->ml_offset != ml2->ml_offset ||
- strcmp(ml1->ml_name, ml2->ml_name) != 0)
+ strcmp(ml1->ml_name, ml2->ml_name) != 0 ||
+ ml1->ml_size != ml2->ml_size ||
+ !equiv_node(ml1->ml_type, ml2->ml_type, ed))
return (0);
- /*
- * Don't do the recursive equivalency checking more than
- * we have to.
- */
- if (olm1 == NULL || olm1->ml_type->t_id != ml1->ml_type->t_id) {
- if (ml1->ml_size != ml2->ml_size ||
- !equiv_node(ml1->ml_type, ml2->ml_type, ed))
- return (0);
- }
-
olm1 = ml1;
ml1 = ml1->ml_next;
ml2 = ml2->ml_next;
More information about the svn-src-head
mailing list