[clang] b6178cc - [OffloadPackager] Use appropriate kind for LTO bitcode
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 4 14:34:26 PDT 2022
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 {
More information about the cfe-commits
mailing list