diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2017-06-27 23:49:58 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-06-27 23:49:58 +0000 |
| commit | 53ed867da88baf0beb48038183f4b8a125c700b9 (patch) | |
| tree | 9a8d2bae4fb8d9762befca13d6dd7641f7ca171a | |
| parent | 4b23fa0abf4a8397f5a4e89c1350bdbeb55abd01 (diff) | |
| download | bcm5719-llvm-53ed867da88baf0beb48038183f4b8a125c700b9.tar.gz bcm5719-llvm-53ed867da88baf0beb48038183f4b8a125c700b9.zip | |
Object: Add version and producer fields to the irsymtab header. NFCI.
These will be necessary in order to handle upgrades from old bitcode
files.
Differential Revision: https://reviews.llvm.org/D33972
llvm-svn: 306486
| -rw-r--r-- | llvm/include/llvm/Object/IRSymtab.h | 12 | ||||
| -rw-r--r-- | llvm/lib/Object/IRSymtab.cpp | 18 |
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/include/llvm/Object/IRSymtab.h b/llvm/include/llvm/Object/IRSymtab.h index 502f133d307..61f90c2d353 100644 --- a/llvm/include/llvm/Object/IRSymtab.h +++ b/llvm/include/llvm/Object/IRSymtab.h @@ -124,6 +124,18 @@ struct Uncommon { }; 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; diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp index 7bca032a7be..ecefd141bb0 100644 --- a/llvm/lib/Object/IRSymtab.cpp +++ b/llvm/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 @@ using namespace irsymtab; 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 @@ Error Builder::build(ArrayRef<Module *> IRMods) { 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()); |

