-
Notifications
You must be signed in to change notification settings - Fork 751
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SYCL] Support partially linked fat objects in the bundler. #68
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good feature!
// Iterate through sections and create a map from triple to relevant bundle | ||
// information. | ||
void ReadHeader(MemoryBuffer &Input) final { | ||
for (section_iterator Sec = Obj->section_begin(); Sec != Obj->section_end(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps an interface such as
for (auto const &Sec : Obj->sections()) {
or similar would be even clearer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually need section_iterator here, not SectionRef. So section_begin()/end() instead of sections()
report_fatal_error( | ||
"'o' file type is requested, but the fat object contains multiple " | ||
"device objects; use 'oo' instead"); | ||
std::string FileList = ""; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
= ""
seems redundant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK
cat(File); | ||
} | ||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing end of line.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK
Hi,
I'm pretty new to github, and it looks like I inadvertently discarded the previous pull request for this feature along with your comments.
I will implement the changes you suggest.
…--
Konst
Понедельник, 8 апреля 2019, 16:32 -07:00 от Ronan Keryell ***@***.***>:
@keryell commented on this pull request.
Good feature!
----------------------------------------------------------------------
In clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp :
>
~ObjectFileHandler() final {}
- void ReadHeader(MemoryBuffer &Input) final {}
+ // Iterate through sections and create a map from triple to relevant bundle
+ // information.
+ void ReadHeader(MemoryBuffer &Input) final {
+ for (section_iterator Sec = Obj->section_begin(); Sec != Obj->section_end();
Perhaps an interface such as
for (auto const &Sec : Obj->sections()) {
or similar would be even clearer.
----------------------------------------------------------------------
In clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp :
> StringRef Content;
- CurrentSection->getContents(Content);
+ CurBundle->second->BundleSection->getContents(Content);
+ const char *ObjData = Content.data();
+ // Determine the number of "device objects" (or individual bundles
+ // concatenated by partial linkage) in the bundle:
+ const auto &SizeVec = CurBundle->second->ObjectSizes;
+ auto NumObjects = SizeVec.size();
+ bool FileListMode = FilesType == "oo";
+
+ if (NumObjects > 1 && !FileListMode)
+ report_fatal_error(
+ "'o' file type is requested, but the fat object contains multiple "
+ "device objects; use 'oo' instead");
+ std::string FileList = "";
= "" seems redundant.
----------------------------------------------------------------------
In test/Driver/clang-offload-bundler1.cpp :
> + if (F.is_open()) {
+ while (getline(F, Line)) {
+ OutFiles.push_back(Line);
+ }
+ F.close();
+ }
+ else {
+ cout << "Unable to open file " << ListFile;
+ return 1;
+ }
+
+ for (const auto &File : OutFiles) {
+ cat(File);
+ }
+ return 0;
+}
Missing end of line.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub , or mute the thread .
|
CONFLICT (content): Merge conflict in clang/lib/Frontend/CompilerInvocation.cpp
…… (#67069) We noticed some performance issue while in lldb-vscode for grabing the name of the SBValue. Profiling shows SBValue::GetName() can cause synthetic children provider of shared/unique_ptr to deference underlying object and complete it type. This patch lazily moves the dereference from synthetic child provider's Update() method to GetChildAtIndex() so that SBValue::GetName() won't trigger the slow code path. Here is the culprit slow code path: ``` ... frame #59: 0x00007ff4102e0660 liblldb.so.15`SymbolFileDWARF::CompleteType(this=<unavailable>, compiler_type=0x00007ffdd9829450) at SymbolFileDWARF.cpp:1567:25 [opt] ... frame #67: 0x00007ff40fdf9bd4 liblldb.so.15`lldb_private::ValueObject::Dereference(this=0x0000022bb5dfe980, error=0x00007ffdd9829970) at ValueObject.cpp:2672:41 [opt] frame #68: 0x00007ff41011bb0a liblldb.so.15`(anonymous namespace)::LibStdcppSharedPtrSyntheticFrontEnd::Update(this=0x000002298fb94380) at LibStdcpp.cpp:403:40 [opt] frame #69: 0x00007ff41011af9a liblldb.so.15`lldb_private::formatters::LibStdcppSharedPtrSyntheticFrontEndCreator(lldb_private::CXXSyntheticChildren*, std::shared_ptr<lldb_private::ValueObject>) [inlined] (anonymous namespace)::LibStdcppSharedPtrSyntheticFrontEnd::LibStdcppSharedPtrSyntheticFrontEnd(this=0x000002298fb94380, valobj_sp=<unavailable>) at LibStdcpp.cpp:371:5 [opt] ... frame #78: 0x00007ff40fdf6e42 liblldb.so.15`lldb_private::ValueObject::CalculateSyntheticValue(this=0x000002296c66a500) at ValueObject.cpp:1836:27 [opt] frame #79: 0x00007ff40fdf1939 liblldb.so.15`lldb_private::ValueObject::GetSyntheticValue(this=<unavailable>) at ValueObject.cpp:1867:3 [opt] frame #80: 0x00007ff40fc89008 liblldb.so.15`ValueImpl::GetSP(this=0x0000022c71b90de0, stop_locker=0x00007ffdd9829d00, lock=0x00007ffdd9829d08, error=0x00007ffdd9829d18) at SBValue.cpp:141:46 [opt] frame #81: 0x00007ff40fc7d82a liblldb.so.15`lldb::SBValue::GetSP(ValueLocker&) const [inlined] ValueLocker::GetLockedSP(this=0x00007ffdd9829d00, in_value=<unavailable>) at SBValue.cpp:208:21 [opt] frame #82: 0x00007ff40fc7d817 liblldb.so.15`lldb::SBValue::GetSP(this=0x00007ffdd9829d90, locker=0x00007ffdd9829d00) const at SBValue.cpp:1047:17 [opt] frame #83: 0x00007ff40fc7da6f liblldb.so.15`lldb::SBValue::GetName(this=0x00007ffdd9829d90) at SBValue.cpp:294:32 [opt] ... ``` Differential Revision: https://reviews.llvm.org/D159542
Signed-off-by: Konstantin Bobrovsky konstantin.s.bobrovsky@intel.com