diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2017-06-08 01:26:14 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-06-08 01:26:14 +0000 |
commit | c00c2b246b12b47ab2cc22d522806aa3a900038b (patch) | |
tree | e987c30103f1cc9b29b229005ff3b8cfbc691830 /llvm/lib/Object/IRObjectFile.cpp | |
parent | 4f440e3af5966590e12b4b294b01b441683d1347 (diff) | |
download | bcm5719-llvm-c00c2b246b12b47ab2cc22d522806aa3a900038b.tar.gz bcm5719-llvm-c00c2b246b12b47ab2cc22d522806aa3a900038b.zip |
Object: Factor out the code for creating the irsymtab for an arbitrary bitcode file.
This code now lives in lib/Object. The idea is that it can now be reused by
IRObjectFile among other things.
Differential Revision: https://reviews.llvm.org/D31921
llvm-svn: 304958
Diffstat (limited to 'llvm/lib/Object/IRObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/IRObjectFile.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Object/IRObjectFile.cpp b/llvm/lib/Object/IRObjectFile.cpp index bcaee029ce5..9996661fbde 100644 --- a/llvm/lib/Object/IRObjectFile.cpp +++ b/llvm/lib/Object/IRObjectFile.cpp @@ -139,3 +139,26 @@ IRObjectFile::create(MemoryBufferRef Object, LLVMContext &Context) { return std::unique_ptr<IRObjectFile>( new IRObjectFile(*BCOrErr, std::move(Mods))); } + +Expected<IRSymtabFile> object::readIRSymtab(MemoryBufferRef MBRef) { + IRSymtabFile F; + ErrorOr<MemoryBufferRef> BCOrErr = + IRObjectFile::findBitcodeInMemBuffer(MBRef); + if (!BCOrErr) + return errorCodeToError(BCOrErr.getError()); + + Expected<std::vector<BitcodeModule>> BMsOrErr = + getBitcodeModuleList(*BCOrErr); + if (!BMsOrErr) + return BMsOrErr.takeError(); + + Expected<irsymtab::FileContents> FCOrErr = irsymtab::readBitcode(*BMsOrErr); + if (!FCOrErr) + return FCOrErr.takeError(); + + F.Mods = std::move(*BMsOrErr); + F.Symtab = std::move(FCOrErr->Symtab); + F.Strtab = std::move(FCOrErr->Strtab); + F.TheReader = std::move(FCOrErr->TheReader); + return std::move(F); +} |