From: Joseph Huber Date: Mon, 4 Jul 2022 21:32:47 +0000 (-0400) Subject: [OffloadPackager] Use appropriate kind for LTO bitcode X-Git-Tag: upstream/15.0.7~2723 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b6178ccfe85238e123ecf29a12af23d3b70bef22;p=platform%2Fupstream%2Fllvm.git [OffloadPackager] Use appropriate kind for LTO bitcode Summary: Currently we just check the extension to set the image kind. This incorrectly labels the `.o` files created during LTO as object files. This patch simply adds a check for the bitcode magic bytes instead. --- diff --git a/clang/tools/clang-offload-packager/CMakeLists.txt b/clang/tools/clang-offload-packager/CMakeLists.txt index a781825..accc948 100644 --- a/clang/tools/clang-offload-packager/CMakeLists.txt +++ b/clang/tools/clang-offload-packager/CMakeLists.txt @@ -1,5 +1,6 @@ set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD} + BinaryFormat Object Support) diff --git a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp index 338b63a..8e98fab 100644 --- a/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp +++ b/clang/tools/clang-offload-packager/ClangOffloadPackager.cpp @@ -99,9 +99,14 @@ int main(int argc, const char **argv) { llvm::MemoryBuffer::getFileOrSTDIN(KeyAndValue.getValue()); if (std::error_code EC = ObjectOrErr.getError()) return reportError(errorCodeToError(EC)); + + // Clang uses the '.o' suffix for LTO bitcode. + if (identify_magic((*ObjectOrErr)->getBuffer()) == file_magic::bitcode) + ImageBinary.TheImageKind = object::IMG_Bitcode; + else + ImageBinary.TheImageKind = getImageKind( + sys::path::extension(KeyAndValue.getValue()).drop_front()); ImageBinary.Image = std::move(*ObjectOrErr); - ImageBinary.TheImageKind = getImageKind( - sys::path::extension(KeyAndValue.getValue()).drop_front()); } else if (Key == "kind") { ImageBinary.TheOffloadKind = getOffloadKind(KeyAndValue.getValue()); } else {