Module Name: src Committed By: hannken Date: Tue Jul 16 07:26:41 UTC 2019
Modified Files: src/external/cddl/osnet/dist/tools/ctf/cvt: fixup_tdescs.c Log Message: Add fixup operation to remove private mutex types for x86. For GENERIC the number of types goes down from 47351 to 33981. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.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/fixup_tdescs.c diff -u src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.3 src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.4 --- src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c:1.3 Wed Feb 24 21:53:26 2010 +++ src/external/cddl/osnet/dist/tools/ctf/cvt/fixup_tdescs.c Tue Jul 16 07:26:41 2019 @@ -276,8 +276,57 @@ fix_small_cpu_struct(tdata_t *td, size_t lml->ml_next = cpum; } +#ifdef __NetBSD__ + +/* + * The kmutex structure comes in two flavours, with or without __MUTEX_PRIVATE + * defined. Since many structures include kmutexes this causes massive amounts + * of duplication on merge (~ 40% for a GENERIC kernel). Remove the private + * fields if we see them. + */ +static void +fix_kmutex_private(tdata_t *td, size_t ptrsize) +{ + tdesc_t *desc; + mlist_t *ml; + + /* + * X86 kmutex is either + * union { + * volatile uintptr_t mtxa_owner; + * } u + * or + * union { + * volatile uintptr_t mtxa_owner; + * struct { + * ... + * } s; + * } u + * so we remove "struct s" if we find it. + */ + if ((desc = lookup_tdesc(td, "kmutex")) != NULL && + desc->t_type == STRUCT && + (ml = desc->t_members) != NULL && + streq(ml->ml_name, "u") && + (desc = ml->ml_type) != NULL && + desc->t_type == UNION && + (ml = desc->t_members) != NULL && + streq(ml->ml_name, "mtxa_owner") && + (ml = ml->ml_next) != NULL && + streq(ml->ml_name, "s") && + ml->ml_next == NULL) { + /* Found, delete member "s". */ + desc->t_members->ml_next = NULL; + } +} + +#endif /* __NetBSD__ */ + void cvt_fixups(tdata_t *td, size_t ptrsize) { fix_small_cpu_struct(td, ptrsize); +#ifdef __NetBSD__ + fix_kmutex_private(td, ptrsize); +#endif }