[PATCH] D144181: [clang][DebugInfo] Add abi-tags on constructors/destructors as LLVM annotations

Michael Buch via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 21 10:45:25 PST 2023


Michael137 added a comment.

We thought a bit about what it would take to link a constructor declaration DIE to the various definitions (e.g., via a `DW_AT_LLVM_complete_ctor_linkage_name` or `DW_AT_LLVM_complete_ctor_ref`). The issue with this is that it would mess with type uniquing. E.g., what if two different CUs each had a constructor declaration but differed only in which definitions they linked to? LLDB would have to support the case where two constructor DIEs for the same type point to different definitions depending on how they were used in the corresponding object files.

One could instead have some new attribute on the various constructor definitions specifying which constructor type it is, and then implement @pavel's suggestion of attaching multiple `asm` labels to the `CXXConstructorDecl`. To support that in LLDB we'd have to do a lookup in the DWARF index and filter appropriately. But it's unclear to me whether this is much better than the proposed patch (in terms of simplicity). I pinged the libcxx people regarding their policy of using abi-tags on structures/namespaces

Some more findings on the Clang side: a very naive way to support multiple `asm` labels is to adjust the `ManglingContext::mangleName` to be aware of multiple `asm` labels and pick the correct one based on the `GlobalDecl` we're mangling. But we'd need to somehow match `CtorType` to the `AsmLabelAttr` in question. Which is possibly doable by encoding the `CtorType` into the label. E.g., `asm("C2<mangled_name>")` (?) Though that seems tacky


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D144181



More information about the cfe-commits mailing list