labath added a comment.

In D131335#3726204 <https://reviews.llvm.org/D131335#3726204>, @Michael137 
wrote:

> Thanks for taking the time to look at this
>
>> I would like to understand what (if any) are the issues with extending the 
>> approach #2 to cover non-member functions as well. For what it's worth, I 
>> don't think #2 is a hack. I might actually say that's "using DWARF as it was 
>> meant to be used" -- the mangled name is there for us to use (*). Before 
>> LLDB came around, I doubt anybody on the DWARF committee imagined people 
>> would try round-tripping the DWARF information back into a "regular" C++ 
>> compiler (and expecting it to recreate "perfect" mangled names for templates 
>> and all).
>
> There are no issues that I know of with this. My hesitation with this 
> approach was just that if we eventually fix the way we construct template 
> decls, we will need to make sure we continue attaching the labels correctly. 
> Maybe this isn't a big deal if we note it in a comment

Yeah, if you end up working on this, and find that you need to have clang to 
something in this area, I can try to loop in some clang people to help.

>> I don't mean to offend, but if anything, I would say that #1 is a hack. What 
>> it essentially does is pretend that abi tags don't exist. The way I 
>> understand it, the main reason for the introduction of abi tags was to 
>> enable one to have two versions of the same function (class, etc.) co-exist 
>> in the same binary/program. This essentially defeats that. I haven't looked 
>> at the implementation too closely, but I don't see how one could properly 
>> disambiguate two differently-tagged versions of the same functions using 
>> this approach. It may be a hack that we have to live with, but I am not 
>> convinced of that (yet).
>
> The way this patch allows distinguishing differently-tagged versions is by 
> checking the `Attrs` Node of the Itanium mangle tree. But you're right in 
> that this change does rely on a follow-up patch that attaches `AbiTagAttr` 
> nodes to the `FunctionDecl`s we generate, which we were planning on doing. 
> But I guess if we are going to attach labels to FunctionDecls anyway, we 
> could just attach the `AsmLabel` instead and thus cover all types of 
> attributes trivially.

FWIW, I would be all for attaching the abi tags to the clang declarations if 
they would be in some easily accessible form (e.g. a DWARF attribute). Parsing 
them out of the mangled name is somewhat dubious, but I am not entirely against 
that, if it is necessary for some use case. However, even if we did that, I'd 
still say that attaching the asm attribute is a good idea.

>> Regarding #3, yes, there are definite problems regarding the way we 
>> represent templates. The root cause is the fundamental mismatch between what 
>> clang wants (a completely accurate description of all objects "as if written 
>> in source") versus what DWARF provides (a description of the most important 
>> properties of entities that are present in the binary). Where the problem 
>> lies depends on your point of view. However, even if we come up with a 
>> better way to represent the debug information in AST, it's not clear to me 
>> why that would be incompatible with #2. Since we don't have the actual 
>> source code for the template function, we will never be able to provide a 
>> fully generic definition of it -- we will always need to deal with specific 
>> instantiations of that template. So what we just need is the attach a (asm) 
>> label to a specific template instantiation. I would hope that wouldn't be 
>> too much to ask of clang to support.
>
> This mismatch currently causes problems with unqualified lookups, especially 
> with import-std-module enabled, so it would be nice to fix eventually. We 
> don't need a fully generic definition, just the generic prototype to get the 
> mangled name correctly. But as you say, this can be done with an asm() label 
> with less trouble.
>
> I can open a separate diff with approach #2 and see from there.

Cool. Thanks for doing that.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D131335/new/

https://reviews.llvm.org/D131335

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to