1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

[llvm-jitlink] Scan input files for first object to determine triple.

The previous logic would crash if the first input file was an archive rather
than an object.
This commit is contained in:
Lang Hames 2021-03-19 19:13:50 -07:00
parent d628808ad9
commit 8f653b1bbd

View File

@ -1008,11 +1008,22 @@ Session::findSymbolInfo(StringRef SymbolName, Twine ErrorMsgStem) {
static Triple getFirstFileTriple() {
static Triple FirstTT = []() {
assert(!InputFiles.empty() && "InputFiles can not be empty");
auto ObjBuffer =
ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFiles.front())));
auto Obj = ExitOnErr(
object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef()));
return Obj->makeTriple();
for (auto InputFile : InputFiles) {
auto ObjBuffer =
ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFile)));
switch (identify_magic(ObjBuffer->getBuffer())) {
case file_magic::elf_relocatable:
case file_magic::macho_object:
case file_magic::coff_object: {
auto Obj = ExitOnErr(
object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef()));
return Obj->makeTriple();
}
default:
break;
}
}
return Triple();
}();
return FirstTT;