From: Joseph Huber Date: Thu, 7 Jul 2022 16:23:44 +0000 (-0400) Subject: [LinkerWrapper] Identify offloading sections using ELF type X-Git-Tag: upstream/15.0.7~2411 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=42e10354d4553cdce131add80a4bf135f01d40db;p=platform%2Fupstream%2Fllvm.git [LinkerWrapper] Identify offloading sections using ELF type Summary: A previous patch added a new ELF section type for LLVM offloading. We should use this when extracting the offloading sections rather than checking the string. This pach also removes the implicit support for COFF and MACH-O because we don't support those currently and should not be included. --- diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index e7214eb..8f98bb8 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -28,6 +28,7 @@ #include "llvm/Object/Archive.h" #include "llvm/Object/ArchiveWriter.h" #include "llvm/Object/Binary.h" +#include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/IRObjectFile.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/OffloadBinary.h" @@ -339,9 +340,8 @@ Error extractOffloadFiles(MemoryBufferRef Contents, // Extract offloading binaries from an Object file \p Obj. Error extractFromBinary(const ObjectFile &Obj, SmallVectorImpl &DeviceFiles) { - for (const SectionRef &Sec : Obj.sections()) { - Expected Name = Sec.getName(); - if (!Name || !Name->equals(OFFLOAD_SECTION_MAGIC_STR)) + for (ELFSectionRef Sec : Obj.sections()) { + if (Sec.getType() != ELF::SHT_LLVM_OFFLOADING) continue; Expected Buffer = Sec.getContents(); @@ -433,9 +433,7 @@ Error extractFromBuffer(std::unique_ptr Buffer, switch (Type) { case file_magic::bitcode: return extractFromBitcode(std::move(Buffer), DeviceFiles); - case file_magic::elf_relocatable: - case file_magic::macho_object: - case file_magic::coff_object: { + case file_magic::elf_relocatable: { Expected> ObjFile = ObjectFile::createObjectFile(*Buffer, Type); if (!ObjFile)