[lld] r218273 - [PECOFF] Handle PRIVATE keyword in the module definition file
Rui Ueyama
ruiu at google.com
Mon Sep 22 13:50:46 PDT 2014
Author: ruiu
Date: Mon Sep 22 15:50:46 2014
New Revision: 218273
URL: http://llvm.org/viewvc/llvm-project?rev=218273&view=rev
Log:
[PECOFF] Handle PRIVATE keyword in the module definition file
A symbol in a module definition file may be annotated with the
PRIVATE keyword like this.
EXPORTS
func PRIVATE
The PRIVATE keyword does not affect the resulting .dll file.
But it prevents the symbol to be listed in the .lib (import
library) file.
Modified:
lld/trunk/include/lld/Driver/WinLinkModuleDef.h
lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h
lld/trunk/lib/Driver/WinLinkModuleDef.cpp
lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
lld/trunk/test/pecoff/Inputs/exports.def
Modified: lld/trunk/include/lld/Driver/WinLinkModuleDef.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Driver/WinLinkModuleDef.h?rev=218273&r1=218272&r2=218273&view=diff
==============================================================================
--- lld/trunk/include/lld/Driver/WinLinkModuleDef.h (original)
+++ lld/trunk/include/lld/Driver/WinLinkModuleDef.h Mon Sep 22 15:50:46 2014
@@ -38,6 +38,7 @@ enum class Kind {
kw_library,
kw_name,
kw_noname,
+ kw_private,
kw_stacksize,
kw_version,
};
Modified: lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h?rev=218273&r1=218272&r2=218273&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/PECOFFLinkingContext.h Mon Sep 22 15:50:46 2014
@@ -61,7 +61,8 @@ public:
};
struct ExportDesc {
- ExportDesc() : ordinal(-1), noname(false), isData(false) {}
+ ExportDesc()
+ : ordinal(-1), noname(false), isData(false), isPrivate(false) {}
bool operator<(const ExportDesc &other) const {
return name.compare(other.name) < 0;
}
@@ -71,6 +72,7 @@ public:
int ordinal;
bool noname;
bool isData;
+ bool isPrivate;
};
/// \brief Casting support
Modified: lld/trunk/lib/Driver/WinLinkModuleDef.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkModuleDef.cpp?rev=218273&r1=218272&r2=218273&view=diff
==============================================================================
--- lld/trunk/lib/Driver/WinLinkModuleDef.cpp (original)
+++ lld/trunk/lib/Driver/WinLinkModuleDef.cpp Mon Sep 22 15:50:46 2014
@@ -54,16 +54,17 @@ Token Lexer::lex() {
"0123456789_.*~+!@#$%^&*()/");
StringRef word = _buffer.substr(0, end);
Kind kind = llvm::StringSwitch<Kind>(word)
- .Case("BASE", Kind::kw_base)
- .Case("DATA", Kind::kw_data)
- .Case("EXPORTS", Kind::kw_exports)
- .Case("HEAPSIZE", Kind::kw_heapsize)
- .Case("LIBRARY", Kind::kw_library)
- .Case("NAME", Kind::kw_name)
- .Case("NONAME", Kind::kw_noname)
- .Case("STACKSIZE", Kind::kw_stacksize)
- .Case("VERSION", Kind::kw_version)
- .Default(Kind::identifier);
+ .Case("BASE", Kind::kw_base)
+ .Case("DATA", Kind::kw_data)
+ .Case("EXPORTS", Kind::kw_exports)
+ .Case("HEAPSIZE", Kind::kw_heapsize)
+ .Case("LIBRARY", Kind::kw_library)
+ .Case("NAME", Kind::kw_name)
+ .Case("NONAME", Kind::kw_noname)
+ .Case("PRIVATE", Kind::kw_private)
+ .Case("STACKSIZE", Kind::kw_stacksize)
+ .Case("VERSION", Kind::kw_version)
+ .Default(Kind::identifier);
_buffer = (end == _buffer.npos) ? "" : _buffer.drop_front(end);
return Token(kind, word);
}
@@ -224,6 +225,10 @@ bool Parser::parseExport(PECOFFLinkingCo
result.isData = true;
continue;
}
+ if (_tok._kind == Kind::kw_private) {
+ result.isPrivate = true;
+ continue;
+ }
ungetToken();
return true;
}
Modified: lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp?rev=218273&r1=218272&r2=218273&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterImportLibrary.cpp Mon Sep 22 15:50:46 2014
@@ -35,6 +35,8 @@ createModuleDefinitionFile(const PECOFFL
os << " NONAME";
if (desc.isData)
os << " DATA";
+ if (desc.isPrivate)
+ os << " PRIVATE";
os << "\n";
}
os.flush();
Modified: lld/trunk/test/pecoff/Inputs/exports.def
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/Inputs/exports.def?rev=218273&r1=218272&r2=218273&view=diff
==============================================================================
--- lld/trunk/test/pecoff/Inputs/exports.def (original)
+++ lld/trunk/test/pecoff/Inputs/exports.def Mon Sep 22 15:50:46 2014
@@ -3,4 +3,4 @@
EXPORTS
exportfn1 @5 ; foo
exportfn2
- exportfn5=exportfn6
+ exportfn5=exportfn6 PRIVATE
More information about the llvm-commits
mailing list