nelhage added a comment.

In https://reviews.llvm.org/D40283#936088, @clayborg wrote:

> Jim will need to ok this. A few concerns follow. Most of the time when we 
> don't get the DWARF -> AST conversion right, it can mean that we might code 
> gen incorrect code. Is there not enough information for the GNU abi_tag in 
> the DWARF to actually re-create these classes correctly in the AST?


Correct, as far as I can tell. Looking at a symbol definition from the test 
program on the issue via `llvm-dwarfdump`, I see

  0x00000076:     DW_TAG_subprogram
                    DW_AT_linkage_name    ("_ZN1A16helloWorld_cxx11B5cxx11Ev")
                    DW_AT_name    ("helloWorld_cxx11")
                    DW_AT_decl_file       ("/tmp/test_abi_tag.cc")
                    DW_AT_decl_line       (5)
                    DW_AT_declaration     (true)
                    DW_AT_external        (true)
                    DW_AT_accessibility   (DW_ACCESS_public)
  
  0x00000082:       DW_TAG_formal_parameter
                      DW_AT_type  (cu + 0x009b "A*")
                      DW_AT_artificial    (true)
  
  0x00000087:       NULL

The function of the `abi_tag` annotation is to append the `B5cxx11` to the 
mangled name; I can't find any other indication in the DWARF of the ABI tag.

You can read more about `abi_tag` here:
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html
Or an explanation of why it exists and how it is used here:
https://davmac.wordpress.com/2015/07/19/tale-of-two-abis/

The effect of this patch on the code generated by `expression` is to change the 
names we emit into the LLVM IR; Previously, we would emit a call to 
`_ZN1A16helloWorld_cxx11Ev`, which would then fail when resolving symbols. Now 
we (correctly) emit a call to `_ZN1A16helloWorld_cxx11B5cxx11Ev`.

The test case I added in this patch also demonstrates that GCC and clang both 
support arbitrarily overriding a symbol's mangled name in the source using 
`asm("new_name")`. I can't recall having ever encountered a use of that in the 
wild, so I don't care strongly about supporting it, but if we want to I think 
this general approach is almost certainly the only approach that would do so.


https://reviews.llvm.org/D40283



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

Reply via email to