On Thu, 14 Jun 2018 at 19:26, David Blaikie <dblai...@gmail.com> wrote:
>
>
>
> On Thu, Jun 14, 2018 at 11:24 AM Pavel Labath <lab...@google.com> wrote:
>>
>> On Thu, 14 Jun 2018 at 17:58, Greg Clayton <clayb...@gmail.com> wrote:
>> >
>> >
>> >
>> > On Jun 14, 2018, at 9:36 AM, Adrian Prantl <apra...@apple.com> wrote:
>> >
>> >
>> >
>> > On Jun 14, 2018, at 7:01 AM, Pavel Labath via llvm-dev 
>> > <llvm-...@lists.llvm.org> wrote:
>> >
>> > Thank you all. I am going to try to reply to all comments in a single 
>> > email.
>> >
>> > Regarding the  .apple_objc idea, I am afraid the situation is not as
>> > simple as just flipping a switch.
>> >
>> >
>> > Jonas is currently working on adding the support for DWARF5-style 
>> > Objective-C accelerator tables to LLVM/LLDB/dsymutil. Based on the 
>> > assumption that DWARF 4 and earlier are unaffected by any of this, I don't 
>> > think it's necessary to spend any effort of making the transition smooth. 
>> > I'm fine with having Objective-C on DWARF 5 broken on trunk for two weeks 
>> > until Jonas is done adding Objective-C support to the DWARF 5 
>> > implementation.
>>
>> Ideally, I would like to enable the accelerator tables (possibly with
>> a different version number or something) on DWARF 4 too (on non-apple
>> targets only). The reason for this is that their absence if causing
>> large slowdowns when debugging on non-apple platforms, and I wouldn't
>> want to wait for dwarf 5 for that to go away (I mean no disrespect to
>> Paul and DWARF 5 effort in general, but even if all of DWARF 5 in llvm
>> was done tomorrow, there would still be lldb, which hasn't even begun
>> to look at this version).
>>
>> That said, if you are working on the Objective C support right now,
>> then I am happy to wait two weeks or so that we have a full
>> implementation from the get-go.
>>
>> > But, other options may be possible as well. What's not clear to me is
>> > whether these tables couldn't be replaced by extra information in the
>> > .debug_info section. It seems to me that these tables are trying to
>> > work around the issue that there is no straight way to go from a
>> > DW_TAG_structure type DIE describing an ObjC class to it's methods. If
>> > these methods (their forward declarations) were be present as children
>> > of the type DIE (as they are for c++ classes), then these tables may
>> > not be necessary. But maybe (probably) that has already been
>> > considered and deemed infeasible for some reason. In any case this
>> > seemed like a thing best left for people who actually work on ObjC
>> > support to figure out.
>> >
>> >
>> > That's really a question for Greg or Jim — I don't know why the current 
>> > representation has the Objective-C methods outside of the structs. One 
>> > reason might be that an interface's implementation can define more methods 
>> > than are visible in its public interface in the header file, but we 
>> > already seem to be aware of this and mark the implementation with 
>> > DW_AT_APPLE_objc_complete_type. I also am not sure that this is the *only* 
>> > reason for the objc accelerator table. But I'd like to learn.
>>
>> My observation was based on studying lldb code. The only place where
>> the objc table is used is in the AppleDWARFIndex::GetObjCMethods
>> function, which is called from
>> SymbolFileDWARF::GetObjCMethodDIEOffsets, whose only caller is
>> DWARFASTParserClang::CompleteTypeFromDWARF, which seems to have a
>> class DIE as an argument. However, if not all declarations of a
>> class/interface have access to the full list of methods then this
>> might be a problem for the approach I suggested.
>
>
> Maybe, but the same is actually true for C++ classes too (see my comments in 
> another reply about implicit specializations of class member templates (and 
> there are a couple of other examples)) - so might be worth considering how 
> those are handled/could be improved, and maybe in fixing those we could 
> improve/normalize the ObjC representation and avoid the need for ObjC 
> tables... maybe.
>

That's a good point! I need to check out how we handle that right now.
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to