summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-10-21 02:28:28 +0000
committerRui Ueyama <ruiu@google.com>2014-10-21 02:28:28 +0000
commitf3208b808d96f14abf44faca9f7b21a1fb397d7b (patch)
tree8584ea5e9243545396ba54fb00e3050876909f8b
parent2bafc2d5aee50e37ef06d9ce27c4a104400f803c (diff)
downloadbcm5719-llvm-f3208b808d96f14abf44faca9f7b21a1fb397d7b.tar.gz
bcm5719-llvm-f3208b808d96f14abf44faca9f7b21a1fb397d7b.zip
[PECOFF] Look for decorated entry symbol name.
Entry symbol name can be decorated. When we look for _WinMain, we also have to look for _WinMain@16. llvm-svn: 220259
-rw-r--r--lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h6
-rw-r--r--lld/test/pecoff/entry.test3
2 files changed, 8 insertions, 1 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h b/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
index 0c44037e8a4..a42673c5fd8 100644
--- a/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
+++ b/lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
@@ -337,7 +337,11 @@ private:
// Returns true if a given name exists in an input object file.
auto defined = [&](StringRef name) -> bool {
- return _syms->defined().count(_ctx->decorateSymbol(name));
+ StringRef sym = _ctx->decorateSymbol(name);
+ if (_syms->defined().count(sym))
+ return true;
+ std::string ignore;
+ return findDecoratedSymbol(_ctx, _syms.get(), sym, ignore);
};
switch (_ctx->getSubsystem()) {
diff --git a/lld/test/pecoff/entry.test b/lld/test/pecoff/entry.test
index fd0e1833b24..b48e5a03829 100644
--- a/lld/test/pecoff/entry.test
+++ b/lld/test/pecoff/entry.test
@@ -17,6 +17,9 @@ WMAIN: _wmainCRTStartup
# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain=_foo \
# RUN: -- %t.obj 2> %t.log
# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
+# RUN: not lld -flavor link /out:%t.exe /alternatename:_WinMain@16=_foo \
+# RUN: -- %t.obj 2> %t.log
+# RUN: FileCheck -check-prefix=WINMAIN %s < %t.log
WINMAIN: _WinMainCRTStartup
OpenPOWER on IntegriCloud