[CLASSES]: Handle DW_TAG_unspecified_parameters in function pointers
My favourite guinea pig (linux's vmlinux) has not one pointer to a function that has unspecified parameters (...), but a new guinea pig, also a kernel, has, openbsd's kernel, example: /* /usr/home/leonardo/openbsd/src/sys/sys/protosw.h:63 */ struct protosw { short int pr_type; /* 0 2 */ <SNIP> void (*pr_input)(struct mbuf *, ...); /* 12 4 */ int (*pr_output)(struct mbuf *, ...); /* 16 4 */ <SNIP> So fix it! Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
parent
9f3a65c7fa
commit
47b4f029fb
13
classes.c
13
classes.c
|
@ -1943,13 +1943,18 @@ static void cu__create_new_subroutine_type(Dwarf_Die *die, struct cu *cu)
|
||||||
do {
|
do {
|
||||||
const uint16_t tag = dwarf_tag(die);
|
const uint16_t tag = dwarf_tag(die);
|
||||||
|
|
||||||
if (tag != DW_TAG_formal_parameter) {
|
switch (tag) {
|
||||||
|
case DW_TAG_formal_parameter:
|
||||||
|
cu__create_new_parameter(die, ftype);
|
||||||
|
break;
|
||||||
|
case DW_TAG_unspecified_parameters:
|
||||||
|
ftype->unspec_parms = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
fprintf(stderr, "%s: DW_TAG_%s not handled!\n",
|
fprintf(stderr, "%s: DW_TAG_%s not handled!\n",
|
||||||
__FUNCTION__, dwarf_tag_name(tag));
|
__FUNCTION__, dwarf_tag_name(tag));
|
||||||
continue;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cu__create_new_parameter(die, ftype);
|
|
||||||
} while (dwarf_siblingof(die, die) == 0);
|
} while (dwarf_siblingof(die, die) == 0);
|
||||||
out:
|
out:
|
||||||
cu__add_tag(cu, &ftype->tag);
|
cu__add_tag(cu, &ftype->tag);
|
||||||
|
|
Loading…
Reference in New Issue