From 675767a5910d2ec77ef8b51c78fe312cf9022896 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Tue, 27 Mar 2018 19:40:50 +0000 Subject: Use the DWARF linkage name when importing C++ methods. 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 --- .../test/expression_command/pr35310/main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/pr35310/main.cpp (limited to 'lldb/packages/Python/lldbsuite/test/expression_command/pr35310/main.cpp') diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/pr35310/main.cpp b/lldb/packages/Python/lldbsuite/test/expression_command/pr35310/main.cpp new file mode 100644 index 00000000000..a8e8a5c737a --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/expression_command/pr35310/main.cpp @@ -0,0 +1,19 @@ +#include + +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; +} -- cgit v1.2.3