[lld] r197373 - [PECOFF] Add a check for duplicate export ordinals.
Rui Ueyama
ruiu at google.com
Mon Dec 16 01:15:58 PST 2013
Author: ruiu
Date: Mon Dec 16 03:15:58 2013
New Revision: 197373
URL: http://llvm.org/viewvc/llvm-project?rev=197373&view=rev
Log:
[PECOFF] Add a check for duplicate export ordinals.
Modified:
lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp
Modified: lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp?rev=197373&r1=197372&r2=197373&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp Mon Dec 16 03:15:58 2013
@@ -53,6 +53,18 @@ bool PECOFFLinkingContext::validateImpl(
return false;
}
+ // Check for duplicate export ordinals.
+ std::set<int> exports;
+ for (const PECOFFLinkingContext::ExportDesc &desc : getDllExports()) {
+ if (desc.ordinal == -1)
+ continue;
+ if (exports.count(desc.ordinal) == 1) {
+ diagnostics << "Duplicate export ordinals: " << desc.ordinal << "\n";
+ return false;
+ }
+ exports.insert(desc.ordinal);
+ }
+
std::bitset<64> alignment(_sectionDefaultAlignment);
if (alignment.count() != 1) {
diagnostics << "Section alignment must be a power of 2, but got "
Modified: lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp?rev=197373&r1=197372&r2=197373&view=diff
==============================================================================
--- lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp (original)
+++ lld/trunk/unittests/DriverTests/WinLinkDriverTest.cpp Mon Dec 16 03:15:58 2013
@@ -183,6 +183,11 @@ TEST_F(WinLinkParserTest, ExportWithOpti
EXPECT_TRUE(exports[1].isData);
}
+TEST_F(WinLinkParserTest, ExportDuplicates) {
+ EXPECT_FALSE(
+ parse("link.exe", "/export:foo, at 1", "/export:bar, at 1", "a.out", nullptr));
+}
+
TEST_F(WinLinkParserTest, ExportInvalid1) {
EXPECT_FALSE(parse("link.exe", "/export:foo, at 0", "a.out", nullptr));
}
More information about the llvm-commits
mailing list