diff options
author | Rui Ueyama <ruiu@google.com> | 2017-12-06 19:18:24 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2017-12-06 19:18:24 +0000 |
commit | efb5024e571b5c5bf922152eb226ec6b887e2084 (patch) | |
tree | f3dd7fac748996e6baf947ac74bfb3ee86c2af21 | |
parent | b6e2ca4597d309c98be17e2bcc8a69ac22c25afe (diff) | |
download | bcm5719-llvm-efb5024e571b5c5bf922152eb226ec6b887e2084.tar.gz bcm5719-llvm-efb5024e571b5c5bf922152eb226ec6b887e2084.zip |
[COFF] Ignore semicolons in module definition identifiers
Patch by David Major.
The NSS project's .def files make heavy use of semicolons in a
frightening attempt at portability:
https://hg.mozilla.org/projects/nss/raw-file/tip/lib/ckfw/capi/nsscapi.def
lld-link was treating the semicolon as part of the export name,
resulting in unresolved symbols. This patch includes ';' in the list of
characters to split on.
Differential Revision: https://reviews.llvm.org/D39968
llvm-svn: 319933
-rw-r--r-- | llvm/lib/Object/COFFModuleDefinition.cpp | 2 | ||||
-rw-r--r-- | llvm/test/tools/llvm-dlltool/coff-exports.def | 12 |
2 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/Object/COFFModuleDefinition.cpp b/llvm/lib/Object/COFFModuleDefinition.cpp index e2208016eb5..a571354648d 100644 --- a/llvm/lib/Object/COFFModuleDefinition.cpp +++ b/llvm/lib/Object/COFFModuleDefinition.cpp @@ -117,7 +117,7 @@ public: return Token(Identifier, S); } default: { - size_t End = Buf.find_first_of("=,\r\n \t\v"); + size_t End = Buf.find_first_of("=,;\r\n \t\v"); StringRef Word = Buf.substr(0, End); Kind K = llvm::StringSwitch<Kind>(Word) .Case("BASE", KwBase) diff --git a/llvm/test/tools/llvm-dlltool/coff-exports.def b/llvm/test/tools/llvm-dlltool/coff-exports.def index 01d816f9f0e..0656a44a0a1 100644 --- a/llvm/test/tools/llvm-dlltool/coff-exports.def +++ b/llvm/test/tools/llvm-dlltool/coff-exports.def @@ -5,11 +5,17 @@ LIBRARY test.dll EXPORTS -TestFunction +TestFunction1 +TestFunction2; +TestFunction3 ; This is a comment ; CHECK: File: test.dll ; CHECK: Format: COFF-import-file ; CHECK: Type: code ; CHECK: Name type: name -; CHECK: Symbol: __imp_TestFunction -; CHECK: Symbol: TestFunction +; CHECK: Symbol: __imp_TestFunction1 +; CHECK: Symbol: TestFunction1 +; CHECK: Symbol: __imp_TestFunction2{{$}} +; CHECK: Symbol: TestFunction2{{$}} +; CHECK: Symbol: __imp_TestFunction3{{$}} +; CHECK: Symbol: TestFunction3{{$}} |