Skip to content

Commit 8bc3685

Browse files
committed
[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.
1 parent bcb34a5 commit 8bc3685

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

llvm/tools/llvm-jitlink/llvm-jitlink.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,11 +1008,22 @@ Session::findSymbolInfo(StringRef SymbolName, Twine ErrorMsgStem) {
10081008
static Triple getFirstFileTriple() {
10091009
static Triple FirstTT = []() {
10101010
assert(!InputFiles.empty() && "InputFiles can not be empty");
1011-
auto ObjBuffer =
1012-
ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFiles.front())));
1013-
auto Obj = ExitOnErr(
1014-
object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef()));
1015-
return Obj->makeTriple();
1011+
for (auto InputFile : InputFiles) {
1012+
auto ObjBuffer =
1013+
ExitOnErr(errorOrToExpected(MemoryBuffer::getFile(InputFile)));
1014+
switch (identify_magic(ObjBuffer->getBuffer())) {
1015+
case file_magic::elf_relocatable:
1016+
case file_magic::macho_object:
1017+
case file_magic::coff_object: {
1018+
auto Obj = ExitOnErr(
1019+
object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef()));
1020+
return Obj->makeTriple();
1021+
}
1022+
default:
1023+
break;
1024+
}
1025+
}
1026+
return Triple();
10161027
}();
10171028

10181029
return FirstTT;

0 commit comments

Comments
 (0)