summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-07-09 20:22:41 +0000
committerRui Ueyama <ruiu@google.com>2015-07-09 20:22:41 +0000
commita841bb0f5dc824241d22df943ea5b9c4935469cb (patch)
tree5bfaf9bc0ea40a72723e928c8c9490913607d932
parent39d9efb7724bed98518825db2e2cba79f0f2f0f1 (diff)
downloadbcm5719-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.cpp10
-rw-r--r--lld/test/COFF/Inputs/imports-mangle.libbin2108 -> 2114 bytes
-rw-r--r--lld/test/COFF/imports-mangle.test4
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
index af6e583a31b..f3c722ad074 100644
--- a/lld/test/COFF/Inputs/imports-mangle.lib
+++ b/lld/test/COFF/Inputs/imports-mangle.lib
Binary files differ
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
OpenPOWER on IntegriCloud