mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

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;
|
|
}
|