[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