When importing C++ methods into clang AST nodes from the DWARF symbol
table, preserve the DW_AT_linkage_name and use it as the linker
("asm") name for the symbol.
Concretely, this enables `expression` to call into names that use the
GNU `abi_tag` extension, and enables lldb to call into code using
std::string or std::list from recent versions of libstdc++. See
https://bugs.llvm.org/show_bug.cgi?id=35310 . It also seems broadly
more robust than relying on the DWARF->clang->codegen pipeline to
roundtrip properly, but I'm not immediately aware of any other cases
in which it makes a difference.
Patch by Nelson Elhage!
Differential Revision: https://reviews.llvm.org/D40283
llvm-svn: 328658
20 lines
293 B
C++
20 lines
293 B
C++
#include <stdio.h>
|
|
|
|
class A {
|
|
public:
|
|
int __attribute__((abi_tag("cxx11"))) test_abi_tag() {
|
|
return 1;
|
|
}
|
|
int test_asm_name() asm("A_test_asm") {
|
|
return 2;
|
|
}
|
|
};
|
|
|
|
int main(int argc, char **argv) {
|
|
A a;
|
|
// Break here
|
|
a.test_abi_tag();
|
|
a.test_asm_name();
|
|
return 0;
|
|
}
|