[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