[PATCH] D66598: [Clang][Bundler] Fix for a hang when unbundling fat binary
Sergey Dmitriev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 22 09:05:17 PDT 2019
sdmitriev created this revision.
sdmitriev added a reviewer: ABataev.
Herald added a reviewer: jdoerfert.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
clang-offload-bundler tool may hang under certain conditions when it extracts a subset of all available device bundles from the fat binary that is handled by the BinaryFileHandler. This patch fixes this problem.
Repository:
rC Clang
https://reviews.llvm.org/D66598
Files:
clang/test/Driver/clang-offload-bundler.c
clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
Index: clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
===================================================================
--- clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
+++ clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
@@ -231,6 +231,7 @@
/// Iterator for the bundle information that is being read.
StringMap<BundleInfo>::iterator CurBundleInfo;
+ StringMap<BundleInfo>::iterator NextBundleInfo;
public:
BinaryFileHandler() : FileHandler() {}
@@ -300,13 +301,14 @@
BundlesInfo[Triple] = BundleInfo(Size, Offset);
}
// Set the iterator to where we will start to read.
- CurBundleInfo = BundlesInfo.begin();
+ CurBundleInfo = BundlesInfo.end();
+ NextBundleInfo = BundlesInfo.begin();
}
StringRef ReadBundleStart(MemoryBuffer &Input) final {
- if (CurBundleInfo == BundlesInfo.end())
+ if (NextBundleInfo == BundlesInfo.end())
return StringRef();
-
+ CurBundleInfo = NextBundleInfo++;
return CurBundleInfo->first();
}
Index: clang/test/Driver/clang-offload-bundler.c
===================================================================
--- clang/test/Driver/clang-offload-bundler.c
+++ clang/test/Driver/clang-offload-bundler.c
@@ -221,6 +221,11 @@
// RUN: diff %t.empty %t.res.tgt1
// RUN: diff %t.empty %t.res.tgt2
+// Check that we do not have to unbundle all available bundles from the fat binary.
+// RUN: clang-offload-bundler -type=ast -targets=host-%itanium_abi_triple,openmp-x86_64-pc-linux-gnu -outputs=%t.res.ast,%t.res.tgt2 -inputs=%t.bundle3.unordered.ast -unbundle
+// RUN: diff %t.ast %t.res.ast
+// RUN: diff %t.tgt2 %t.res.tgt2
+
//
// Check object bundle/unbundle. The content should be bundled into an ELF
// section (we are using a PowerPC little-endian host which uses ELF). We
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66598.216640.patch
Type: text/x-patch
Size: 1816 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190822/ffeb6bdd/attachment.bin>
More information about the cfe-commits
mailing list