tmsriram added a comment. In D93747#2482726 <https://reviews.llvm.org/D93747#2482726>, @hoy wrote:
> In D93747#2482519 <https://reviews.llvm.org/D93747#2482519>, @tmsriram wrote: > >> In D93747#2481494 <https://reviews.llvm.org/D93747#2481494>, @dblaikie wrote: >> >>> In D93747#2481383 <https://reviews.llvm.org/D93747#2481383>, @hoy wrote: >>> >>>> In D93747#2481304 <https://reviews.llvm.org/D93747#2481304>, @tmsriram >>>> wrote: >>>> >>>>> In D93747#2481223 <https://reviews.llvm.org/D93747#2481223>, @tmsriram >>>>> wrote: >>>>> >>>>>> In D93747#2481163 <https://reviews.llvm.org/D93747#2481163>, @dblaikie >>>>>> wrote: >>>>>> >>>>>>> In D93747#2481095 <https://reviews.llvm.org/D93747#2481095>, @hoy wrote: >>>>>>> >>>>>>>> In D93747#2481073 <https://reviews.llvm.org/D93747#2481073>, @dblaikie >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Suggesting that gdb isn't using the DW_AT_name at all for "break >>>>>>>>> <function name>" but instead demangling and stripping off the extras >>>>>>>>> from the linkage name, and since it can't demangle this uniquified >>>>>>>>> name (unlike the mangled name used when using the overloadable >>>>>>>>> attribute) that degrades the debugger user experience? I'd have to >>>>>>>>> test that in more detail/with some hand-hacked DWARF. >>>>>>>> >>>>>>>> Yes, I think in your case the linage name can be demangled by the >>>>>>>> debugger. In my previous experiment, the uniquefied names could not be >>>>>>>> demangled therefore I was not able to breakpoint. >>>>>>> >>>>>>> Ah, did some more testing. Seems it's because it isn't a classically >>>>>>> mangled name. >>>>> >>>>> The simplest fix I can think of is to emit the base 10 number of the >>>>> md5hash. That would preserve all the existing uniqueness and be >>>>> demangler friendly. @hoy @dblaikie WDYT? >>>> >>>> I think using the base 10 form of md5hash is a smart workaround. Thanks >>>> for the suggestion. >>> >>> Sure - wouldn't mind having some wording from the Itanium ABI/mangling >>> rules that explain/corroborate what we've seen from testing to ensure we >>> are using it correctly and there aren't any other ways that might be more >>> suitable, or lurking gotchas we haven't tested. >> >> Yes, makes sense. Also, like @dblaikie pointed out in D94154 >> <https://reviews.llvm.org/D94154> it is now important that we don't generate >> the DW_AT_linkage_name for C style names using this suffix as it will not >> demangle. I think this makes it important that we only update this field if >> it already exists. > > Yes, it makes sense to do the renaming only if the linkage name preexists to > not break the debuggability. Unfortunately we won't be able to support C with > this patch. There is nothing needed to support C right? overloadable attribute will mangle with _Z so it will work as expected? What did I miss? >>>>>>> It might be possible for this uniquifying step to check if the name is >>>>>>> mangled (does it start with "_Z") and if it isn't mangled, it could >>>>>>> mangle it (check the length of the name, then "_Z<length><name>v") and >>>>>>> add the unique suffix. That looks to me like it preserves the original >>>>>>> debugging behavior? >>>>>>> >>>>>>> (has the problem that we don't actually know the mangling scheme at >>>>>>> this point - we do know it up in clang (where it might be Itanium >>>>>>> mangling or Microsoft mangling), might point again to the possibility >>>>>>> this feature is more suitable to implement in the frontend rather than >>>>>>> a middle end pass. And also the 'v' in the mangling is 'void return >>>>>>> type', which is a lie - not sure if we could do something better there) >>>> >>>> Doing name unification in the frontend sounds like the ultimate solution >>>> and since the frontend has all the knowledge about the name mangler. I >>>> think for now we can go with the solution @tmsriram suggested, i.e., using >>>> the base 10 form of md5 hash. >>> >>> Any general idea of how long "for now" would be? It doesn't seem like >>> putting this off is going to make things especially better & seems like >>> more bug fixes/changes/etc are being built around the solution as it is at >>> the moment. So I'd be hesitant to put off this kind of restructuring too >>> long. > > I'm not sure. It looks like implementation in the front end has more > complexity as discussed in the other thread D94154 > <https://reviews.llvm.org/D94154>. > >>>>>>> I think it's pretty important that we don't break tradeoff >>>>>>> debuggability for profile accuracy. It'll make for a difficult tradeoff >>>>>>> for our/any users. >>>>>> >>>>>> Agreed, I didn't expect this. >>>>>> >>>>>>> (side note: using the original source file name seems problematic - I >>>>>>> know in google at least, the same source file is sometimes built into >>>>>>> more than one library/form with different preprocessor defines, so this >>>>>>> may not produce as unique a name as you are expecting?) >>>>>> >>>>>> It was a best effort and I think the hashing can be improved by using >>>>>> more signals other than just the module name if needed. For hard data >>>>>> though, this does significantly improve performance which clearly comes >>>>>> from better profile attribution so it does something. >>> >>> I'm OK with the idea that this helped the situation - but it doesn't seem >>> very principled/rigorous. Rather than a sliding scale of "better" I think >>> it'd be worth considering in more detail what would be required to make >>> this correct. >>> >>> Using the object file name may be more robust - also not perfect for all >>> build systems (one could imagine a distributed build system that /might/ be >>> able to get away with having the distributed builders always build a file >>> named x.o - only to have the distribution system rename the file to its >>> canonical name on the main machine before linking occurs - but I think >>> that's not how most distributed build systems work, and most build systems >>> provide a unique object file name across a build?) but maybe moreso than >>> using the input file name? (at least I think for google/blaze the object >>> filename is genuinely unique) >> >> So we are using the full path name of the source. We could also combine the >> object file name into the hash to make it more robust. I can work on this >> patch independently if that is alright. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D93747/new/ https://reviews.llvm.org/D93747 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits