Add fixup operation to remove private mutex types for x86.
For GENERIC the number of types goes down from 47351 to 33981.
This commit is contained in:
parent
fcc1d7b138
commit
9112aa41cd
|
@ -276,8 +276,57 @@ fix_small_cpu_struct(tdata_t *td, size_t ptrsize)
|
||||||
lml->ml_next = cpum;
|
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
|
void
|
||||||
cvt_fixups(tdata_t *td, size_t ptrsize)
|
cvt_fixups(tdata_t *td, size_t ptrsize)
|
||||||
{
|
{
|
||||||
fix_small_cpu_struct(td, ptrsize);
|
fix_small_cpu_struct(td, ptrsize);
|
||||||
|
#ifdef __NetBSD__
|
||||||
|
fix_kmutex_private(td, ptrsize);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue