[PATCH] D33972: Object: Add version and producer fields to the irsymtab header. NFCI.

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 27 16:50:23 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL306486: Object: Add version and producer fields to the irsymtab header. NFCI. (authored by pcc).

Changed prior to commit:
  https://reviews.llvm.org/D33972?vs=101652&id=104314#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33972

Files:
  llvm/trunk/include/llvm/Object/IRSymtab.h
  llvm/trunk/lib/Object/IRSymtab.cpp


Index: llvm/trunk/lib/Object/IRSymtab.cpp
===================================================================
--- llvm/trunk/lib/Object/IRSymtab.cpp
+++ llvm/trunk/lib/Object/IRSymtab.cpp
@@ -32,6 +32,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/StringSaver.h"
+#include "llvm/Support/VCSRevision.h"
 #include "llvm/Support/raw_ostream.h"
 #include <cassert>
 #include <string>
@@ -43,6 +44,21 @@
 
 namespace {
 
+const char *getExpectedProducerName() {
+  static char DefaultName[] = LLVM_VERSION_STRING
+#ifdef LLVM_REVISION
+      " " LLVM_REVISION
+#endif
+      ;
+  // Allows for testing of the irsymtab writer and upgrade mechanism. This
+  // environment variable should not be set by users.
+  if (char *OverrideName = getenv("LLVM_OVERRIDE_PRODUCER"))
+    return OverrideName;
+  return DefaultName;
+}
+
+const char *kExpectedProducerName = getExpectedProducerName();
+
 /// Stores the temporary state that is required to build an IR symbol table.
 struct Builder {
   SmallVector<char, 0> &Symtab;
@@ -231,6 +247,8 @@
   storage::Header Hdr;
 
   assert(!IRMods.empty());
+  Hdr.Version = storage::Header::kCurrentVersion;
+  setStr(Hdr.Producer, kExpectedProducerName);
   setStr(Hdr.TargetTriple, IRMods[0]->getTargetTriple());
   setStr(Hdr.SourceFileName, IRMods[0]->getSourceFileName());
   TT = Triple(IRMods[0]->getTargetTriple());
Index: llvm/trunk/include/llvm/Object/IRSymtab.h
===================================================================
--- llvm/trunk/include/llvm/Object/IRSymtab.h
+++ llvm/trunk/include/llvm/Object/IRSymtab.h
@@ -124,6 +124,18 @@
 };
 
 struct Header {
+  /// Version number of the symtab format. This number should be incremented
+  /// when the format changes, but it does not need to be incremented if a
+  /// change to LLVM would cause it to create a different symbol table.
+  Word Version;
+  enum { kCurrentVersion = 0 };
+
+  /// The producer's version string (LLVM_VERSION_STRING " " LLVM_REVISION).
+  /// Consumers should rebuild the symbol table from IR if the producer's
+  /// version does not match the consumer's version due to potential differences
+  /// in symbol table format, symbol enumeration order and so on.
+  Str Producer;
+
   Range<Module> Modules;
   Range<Comdat> Comdats;
   Range<Symbol> Symbols;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33972.104314.patch
Type: text/x-patch
Size: 2336 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170627/bed56867/attachment-0001.bin>


More information about the llvm-commits mailing list