Re: How to access the virtual table?
On Friday 12 September 2014 12:14 PM, Jan Hubicka wrote: I am trying to access the virtual table. My pass is hooked after pass_ipa_pta. Consider Class A which contains virtual function. An object created as : A a; is translated in GIMPLE as struct A a; From variable "a" we can get its type which is "struct A". I tried to see how the dump_vtable function access the table. To access the virtual table for class A, Below is the code which I tried. tree t = TREE_TYPE (a); tree binfo = TYPE_BINFO (t); tree vtab = BINFO_VTABLE (binfo); FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (vtab)), ix, value) Using the above iterator, entries of the virtual table should be accessible. However, I am not able to do so. You can check dump_tree (vtab) to see if you are seeing an VAR_DECL. BINFO_VTABLE is usually POINTER_PLUS_EXPR, so you want to access DECL_INITIAL of TREE_OPERAND (vtab) in that case. If you want to access an virtual method with given token (position in vtable), you can just use gimple_get_virt_method_for_binfo (or borrow code from there for things you need). Thanks a lot. This helped. Honza Kindly inform me the way to access the virtual table. Also how to fetch the functions from that virtual table? Regards, Swati
Re: How to access the virtual table?
> > I am trying to access the virtual table. > My pass is hooked after pass_ipa_pta. > > Consider Class A which contains virtual function. > An object created as : > A a; > is translated in GIMPLE as > struct A a; > > From variable "a" we can get its type which is "struct A". > I tried to see how the dump_vtable function access the table. > > To access the virtual table for class A, Below is the code which I tried. > > tree t = TREE_TYPE (a); > tree binfo = TYPE_BINFO (t); > tree vtab = BINFO_VTABLE (binfo); > > FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL > (vtab)), ix, value) > > Using the above iterator, entries of the virtual table should be accessible. > However, I am not able to do so. You can check dump_tree (vtab) to see if you are seeing an VAR_DECL. BINFO_VTABLE is usually POINTER_PLUS_EXPR, so you want to access DECL_INITIAL of TREE_OPERAND (vtab) in that case. If you want to access an virtual method with given token (position in vtable), you can just use gimple_get_virt_method_for_binfo (or borrow code from there for things you need). Honza > > Kindly inform me the way to access the virtual table. > Also how to fetch the functions from that virtual table? > > Regards, > Swati
How to access the virtual table?
I am trying to access the virtual table. My pass is hooked after pass_ipa_pta. Consider Class A which contains virtual function. An object created as : A a; is translated in GIMPLE as struct A a; From variable "a" we can get its type which is "struct A". I tried to see how the dump_vtable function access the table. To access the virtual table for class A, Below is the code which I tried. tree t = TREE_TYPE (a); tree binfo = TYPE_BINFO (t); tree vtab = BINFO_VTABLE (binfo); FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (vtab)), ix, value) Using the above iterator, entries of the virtual table should be accessible. However, I am not able to do so. Kindly inform me the way to access the virtual table. Also how to fetch the functions from that virtual table? Regards, Swati