diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-07-09 23:03:51 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-07-09 23:03:51 +0000 |
| commit | 270960f5cd02511f02f6bf742418d3e5c6979819 (patch) | |
| tree | a817642ec078566545d6ccb4ebcafbd746649adc | |
| parent | 81beefc541b3dd4c22bcfb4b114c5398f42eeafb (diff) | |
| download | bcm5719-llvm-270960f5cd02511f02f6bf742418d3e5c6979819.tar.gz bcm5719-llvm-270960f5cd02511f02f6bf742418d3e5c6979819.zip | |
COFF: Find C++ mangled name for symbols starting with underscore.
Symbol foo is mangled as _foo in C and ?foo@@... in C++ on x86.
findMangle has to remove prefix underscore before mangle a given name
as a C++ symbol.
llvm-svn: 241874
| -rw-r--r-- | lld/COFF/SymbolTable.cpp | 9 | ||||
| -rw-r--r-- | lld/test/COFF/export32.test | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index faa9aa7a741..4c751327674 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -281,7 +281,14 @@ void SymbolTable::mangleMaybe(Undefined *U) { return; // In Microsoft ABI, a non-member function name is mangled this way. - std::string Prefix = ("?" + U->getName() + "@@Y").str(); + std::string Prefix; + if (Config->is64()) { + Prefix = ("?" + U->getName() + "@@Y").str(); + } else { + if (!U->getName().startswith("_")) + return; + Prefix = ("?" + U->getName().substr(1) + "@@Y").str(); + } for (auto Pair : Symtab) { StringRef Name = Pair.first; if (!Name.startswith(Prefix)) diff --git a/lld/test/COFF/export32.test b/lld/test/COFF/export32.test index b46314c7b71..a9e49e0a27c 100644 --- a/lld/test/COFF/export32.test +++ b/lld/test/COFF/export32.test @@ -10,7 +10,8 @@ CHECK1-NEXT: 0 0 CHECK1-NEXT: 1 0x1008 exportfn1 CHECK1-NEXT: 2 0x1010 exportfn2 -# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1,@5 /export:exportfn2 +# RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1,@5 \ +# RUN: /export:exportfn2 /export:mangled # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK2 %s CHECK2: Export Table: @@ -24,6 +25,7 @@ CHECK2-NEXT: 4 0 CHECK2-NEXT: 5 0x1008 exportfn1 CHECK2-NEXT: 6 0x1010 exportfn2 CHECK2-NEXT: 7 0x1010 exportfn3 +CHECK2-NEXT: 8 0x1010 mangled # RUN: lld -flavor link2 /out:%t.dll /dll %t.obj /export:exportfn1,@5,noname /export:exportfn2 # RUN: llvm-objdump -p %t.dll | FileCheck -check-prefix=CHECK3 %s |

