> On Oct 7, 2016, at 7:32 AM, Carlo Kok via lldb-dev <lldb-dev@lists.llvm.org> > wrote: > > >>> How do I get the dw_at_name field? I don't need lldb to decypher the >>> mangling I use, I just want access to the linkage name and real encoded >>> name? >>> >>> Also how do I get the type this is contained in (presuming there is one >>> ofc)? >> I am not sure what you are trying to do. Can you elaborate a little. > > I have a custom language where it's ~ equivalent to the c++ class: > > class TEST{ > private: > int INSTANCEFIELD; > static int STATICFIELD; > public: > void INSTANCEMETHOD() { > INSTANCEFIELD++; > } > static void STATICMETHOD() { > STATICFIELD++; > } > }; > > the name "STATICMETHOD" is properly encoded in the dwarf debug info (where > linkage name is the mangled name). I want "STATICMETHOD" back as it would be > encoded in DW_AT_NAME. > > I also want to get the SBType for "TEST" when I have the SBFunction for > INSTANCEMETHOD/STATICMETHOD. > > Both things are properly encoded in dwarf (as matching the c++ output), > however I can't seem to find the right SB method to get it.
We currently have a way for you to find the SBType for "TEST" and then ask that type for its member functions: SBType test_type = module.FindFirstType("TEST"); const uint32_t num_member_functions = test_type.GetNumberOfMemberFunctions(); for (uint32_t i=0; i<num_member_functions; ++i) { SBTypeMemberFunction member_function = test_type.GetMemberFunctionAtIndex(i); } When using a SBFunction, you can easily get its function type: SBFunction function = ...; SBType function_type = function.GetType(); But there isn't a way to get directly from a SBFunction's type to SBTypeMemberFunction. Seems like this can be fixed by adding the following functions: lldb::SBTypeMemberFunction lldb::SBType::GetMemberFunction(); lldb::SBTypeMemberFunction might come back invalid if the type wasn't a member function, but if it is, then this would work. We would also need to add a way to get the class type from the member function: lldb::SBType lldb::SBTypeMemberFunction::GetContainingType(); This would return the class/struct that owns the member function. So if we just add: lldb::SBTypeMemberFunction lldb::SBType::GetMemberFunction(); lldb::SBType lldb::SBTypeMemberFunction::GetContainingType(); Then you should be able to do what you want. Let me know if you need help with this. Greg > > >> >>> >>> Lastly: How do I encode if a method is static or not, I couldn't find >>> any difference in what C++ does for instance vs static. You can already ask a member function for its kind: lldb::MemberFunctionKind lldb::SBTypeMemberFunction::GetKind(); This should help for member functions. >> >> There is "DW_AT_object_pointer". Debuggers can also make that decision >> based on presence of "this" parameter. >> The member function type should be correctly encoded and can be accessed by lldb::SBTypeMemberFunction::GetKind(). > > Thanks. > > -- > Carlo Kok > RemObjects Software > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev