forked from OSchip/llvm-project
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
This commit is contained in:
parent
4b23fa0abf
commit
53ed867da8
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue