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:
parent
d628808ad9
commit
8f653b1bbd
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user