diff --git a/llvm/lib/Object/OffloadBinary.cpp b/llvm/lib/Object/OffloadBinary.cpp index abdc704c847e..21946ec2d6fb 100644 --- a/llvm/lib/Object/OffloadBinary.cpp +++ b/llvm/lib/Object/OffloadBinary.cpp @@ -12,6 +12,7 @@ #include "llvm/BinaryFormat/Magic.h" #include "llvm/MC/StringTableBuilder.h" #include "llvm/Object/Error.h" +#include "llvm/Support/Alignment.h" #include "llvm/Support/FileOutputBuffer.h" using namespace llvm; @@ -26,6 +27,10 @@ OffloadBinary::create(MemoryBufferRef Buf) { if (identify_magic(Buf.getBuffer()) != file_magic::offload_binary) return errorCodeToError(object_error::parse_failed); + // Make sure that the data has sufficient alignment. + if (!isAddrAligned(Align(getAlignment()), Buf.getBufferStart())) + return errorCodeToError(object_error::parse_failed); + const char *Start = Buf.getBufferStart(); const Header *TheHeader = reinterpret_cast(Start); if (TheHeader->Version != OffloadBinary::Version) diff --git a/llvm/test/tools/llvm-objdump/Offloading/binary.test b/llvm/test/tools/llvm-objdump/Offloading/binary.test index 3e2b711057b8..fab988233c8d 100644 --- a/llvm/test/tools/llvm-objdump/Offloading/binary.test +++ b/llvm/test/tools/llvm-objdump/Offloading/binary.test @@ -5,6 +5,7 @@ ## Check that we can dump an offloading binary inside of an ELF section. # RUN: yaml2obj %s -o %t.elf # RUN: llvm-objcopy --add-section .llvm.offloading=%t.bin %t.elf +# RUN: llvm-objcopy --set-section-alignment .llvm.offloading=8 %t.elf # RUN: llvm-objdump --offloading %t.elf | FileCheck %s --check-prefixes=CHECK,ELF --match-full-lines --strict-whitespace --implicit-check-not={{.}} !ELF diff --git a/llvm/test/tools/llvm-objdump/Offloading/warning.test b/llvm/test/tools/llvm-objdump/Offloading/warning.test index a7ce7db3d7f9..aaf796b5b9e1 100644 --- a/llvm/test/tools/llvm-objdump/Offloading/warning.test +++ b/llvm/test/tools/llvm-objdump/Offloading/warning.test @@ -4,6 +4,7 @@ # RUN: cat %t-bad.bin >> %t-good.bin # RUN: yaml2obj %s -o %t.elf # RUN: llvm-objcopy --add-section .llvm.offloading=%t-good.bin %t.elf +# RUN: llvm-objcopy --set-section-alignment .llvm.offloading=8 %t.elf # RUN: llvm-objdump --offloading %t.elf 2>&1 | FileCheck %s -DFILENAME=%t.elf !ELF