diff options
| author | Rui Ueyama <ruiu@google.com> | 2015-07-09 20:22:41 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2015-07-09 20:22:41 +0000 |
| commit | a841bb0f5dc824241d22df943ea5b9c4935469cb (patch) | |
| tree | 5bfaf9bc0ea40a72723e928c8c9490913607d932 | |
| parent | 39d9efb7724bed98518825db2e2cba79f0f2f0f1 (diff) | |
| download | bcm5719-llvm-a841bb0f5dc824241d22df943ea5b9c4935469cb.tar.gz bcm5719-llvm-a841bb0f5dc824241d22df943ea5b9c4935469cb.zip | |
COFF: Fix import symbol name mangling.
For IMPORT_NAME_NOPREFIX symbols, we should remove only one prefix character.
llvm-svn: 241854
| -rw-r--r-- | lld/COFF/InputFiles.cpp | 10 | ||||
| -rw-r--r-- | lld/test/COFF/Inputs/imports-mangle.lib | bin | 2108 -> 2114 bytes | |||
| -rw-r--r-- | lld/test/COFF/imports-mangle.test | 4 |
3 files changed, 10 insertions, 4 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index cbc23938886..66d792ba4cf 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -249,6 +249,12 @@ MachineTypes ObjectFile::getMachineType() { return IMAGE_FILE_MACHINE_UNKNOWN; } +StringRef ltrim1(StringRef S, const char *Chars) { + if (!S.empty() && strchr(Chars, S[0])) + return S.substr(1); + return S; +} + std::error_code ImportFile::parse() { const char *Buf = MB.getBufferStart(); const char *End = MB.getBufferEnd(); @@ -273,10 +279,10 @@ std::error_code ImportFile::parse() { ExtName = Name; break; case IMPORT_NAME_NOPREFIX: - ExtName = Name.ltrim("?@_"); + ExtName = ltrim1(Name, "?@_"); break; case IMPORT_NAME_UNDECORATE: - ExtName = Name.ltrim("?@_"); + ExtName = ltrim1(Name, "?@_"); ExtName = ExtName.substr(0, ExtName.find('@')); break; } diff --git a/lld/test/COFF/Inputs/imports-mangle.lib b/lld/test/COFF/Inputs/imports-mangle.lib Binary files differindex af6e583a31b..f3c722ad074 100644 --- a/lld/test/COFF/Inputs/imports-mangle.lib +++ b/lld/test/COFF/Inputs/imports-mangle.lib diff --git a/lld/test/COFF/imports-mangle.test b/lld/test/COFF/imports-mangle.test index 45e5699d685..ce7209f8e57 100644 --- a/lld/test/COFF/imports-mangle.test +++ b/lld/test/COFF/imports-mangle.test @@ -5,7 +5,7 @@ # CHECK: Import { # CHECK: Symbol: sym4 (0) -# CHECK: Symbol: sym3 (1) +# CHECK: Symbol: _sym3 (1) # CHECK: Symbol: sym1 (2) # CHECK: Symbol: (2) # CHECK: } @@ -51,7 +51,7 @@ symbols: SimpleType: IMAGE_SYM_TYPE_NULL ComplexType: IMAGE_SYM_DTYPE_FUNCTION StorageClass: IMAGE_SYM_CLASS_EXTERNAL - - Name: _sym3 + - Name: __sym3 Value: 0 SectionNumber: 0 SimpleType: IMAGE_SYM_TYPE_NULL |

