Author: Joseph Huber Date: 2022-07-04T17:34:14-04:00 New Revision: b6178ccfe85238e123ecf29a12af23d3b70bef22
URL: https://github.com/llvm/llvm-project/commit/b6178ccfe85238e123ecf29a12af23d3b70bef22 DIFF: https://github.com/llvm/llvm-project/commit/b6178ccfe85238e123ecf29a12af23d3b70bef22.diff LOG: [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. Added: Modified: clang/tools/clang-offload-packager/CMakeLists.txt clang/tools/clang-offload-packager/ClangOffloadPackager.cpp Removed: ################################################################################ diff --git a/clang/tools/clang-offload-packager/CMakeLists.txt b/clang/tools/clang-offload-packager/CMakeLists.txt index a781825895a52..accc9486f46ab 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 338b63ad0a223..8e98fab2a8a4b 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 { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits