mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-13 10:02:38 +00:00
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.
This commit is contained in:
parent
2d5d7f7f61
commit
59879e52c1
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=207578
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user