Date: Sun, 6 Jun 2010 00:18:09 -0700 From: Artem Belevich <fbsdlist@src.cx> To: Shrikanth Kamath <shrikanth07@gmail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: ctfconvert : failed to resolve types Message-ID: <AANLkTimpeuUV5Yg5ENuGrKPK6HY3o1xOwCK1Wip5S4Dc@mail.gmail.com> In-Reply-To: <AANLkTil86P4To3IvAkTqePaB_BUMztdIK5R8srMQF_At@mail.gmail.com> References: <AANLkTil86P4To3IvAkTqePaB_BUMztdIK5R8srMQF_At@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Interesting. Looking at dwarf parsing sources in DTrace, and there are comments that suggest that ctfconvert should've been able to deal with zero-sized arrays. Look at die_sou_resolve() in cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c One observation, if you add a real member to the union that otherwise contains only zero-sized arrays, then ctfconvert is happy. This suggests that it can deal with zero-sized arrays as such, but got surprised that we've managed to define zero-sized data type that is not an array. It sounds like a corner case to me. After all, who could have thought that someone may need zero-sized struct or union one day? One possible way to deal with that would be to move zero-sized arrays out of the union. ctfconvert is happy and the size of your data structure should not change -- you still should be able to use zero-sized array members to append real data, only now they are members of the structure itself, not of the member union. This seems to work: struct abc { int length; int bit; char key[0]; char *key_ptr[0]; }; --Artem On Sat, Jun 5, 2010 at 10:23 PM, Shrikanth Kamath <shrikanth07@gmail.com> w= rote: > I have a small snippet trying to study ctfconvert... > > struct abc { > =A0 =A0int length; > =A0 =A0int bit; > =A0 =A0union { > =A0 =A0 =A0 =A0char key[0]; > =A0 =A0 =A0 =A0char *key_ptr[0]; > =A0 =A0} keys; > }; > > int main() > { > =A0 =A0int a =3D1; > =A0 =A0struct abc member =3D { 16, 5 }; > =A0 =A0printf("Sizeof abc structure [%d] \n", sizeof(struct abc)); > } > > % gcc -g ctfconvert_prob.c > % ctfconvert a.out > > I get the following error on running "ctfconvert"... > ctfconvert_prob.c: failed to resolve the following types: > struct 362 <16a>: failed to size member "keys" of type __anon__ (297 <129= >) > ERROR: ctfconvert_prob.c: failed to resolve types > > How can ctfconvert be equipped to resolve this data type? > > -- > Shrikanth R K > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org= " >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimpeuUV5Yg5ENuGrKPK6HY3o1xOwCK1Wip5S4Dc>