Add initial LTO support.
llvm-svn: 260726
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 0c663c9..42b9dc5 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -12,6 +12,9 @@
#include "InputSection.h"
#include "Symbols.h"
#include "llvm/ADT/STLExtras.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/Object/IRObjectFile.h"
+#include "llvm/Support/raw_ostream.h"
using namespace llvm;
using namespace llvm::ELF;
@@ -423,6 +426,28 @@
}
}
+BitcodeFile::BitcodeFile(MemoryBufferRef M) : InputFile(BitcodeKind, M) {}
+
+bool BitcodeFile::classof(const InputFile *F) {
+ return F->kind() == BitcodeKind;
+}
+
+void BitcodeFile::parse() {
+ LLVMContext Context;
+ ErrorOr<std::unique_ptr<IRObjectFile>> ObjOrErr =
+ IRObjectFile::create(MB, Context);
+ fatal(ObjOrErr);
+ IRObjectFile &Obj = **ObjOrErr;
+ for (const BasicSymbolRef &Sym : Obj.symbols()) {
+ SmallString<64> Name;
+ raw_svector_ostream OS(Name);
+ Sym.printName(OS);
+ StringRef NameRef = Saver.save(StringRef(Name));
+ SymbolBody *Body = new (Alloc) DefinedBitcode(NameRef);
+ SymbolBodies.push_back(Body);
+ }
+}
+
template <typename T>
static std::unique_ptr<InputFile> createELFFileAux(MemoryBufferRef MB) {
std::unique_ptr<T> Ret = llvm::make_unique<T>(MB);