aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp b/contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp
index bfc35e41fe65..89dc12551494 100644
--- a/contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp
+++ b/contrib/llvm-project/llvm/lib/Object/OffloadBinary.cpp
@@ -83,7 +83,7 @@ Error extractFromObject(const ObjectFile &Obj,
if (!NameOrErr)
return NameOrErr.takeError();
- if (!NameOrErr->equals(".llvm.offloading"))
+ if (!NameOrErr->starts_with(".llvm.offloading"))
continue;
}
@@ -189,7 +189,10 @@ OffloadBinary::create(MemoryBufferRef Buf) {
return errorCodeToError(object_error::parse_failed);
if (TheHeader->Size > Buf.getBufferSize() ||
- TheHeader->EntryOffset > TheHeader->Size - sizeof(Entry) ||
+ TheHeader->Size < sizeof(Entry) || TheHeader->Size < sizeof(Header))
+ return errorCodeToError(object_error::unexpected_eof);
+
+ if (TheHeader->EntryOffset > TheHeader->Size - sizeof(Entry) ||
TheHeader->EntrySize > TheHeader->Size - sizeof(Header))
return errorCodeToError(object_error::unexpected_eof);
@@ -355,6 +358,10 @@ bool object::areTargetsCompatible(const OffloadFile::TargetID &LHS,
if (LHS.first != RHS.first)
return false;
+ // If the architecture is "all" we assume it is always compatible.
+ if (LHS.second == "generic" || RHS.second == "generic")
+ return true;
+
// Only The AMDGPU target requires additional checks.
llvm::Triple T(LHS.first);
if (!T.isAMDGPU())