[PATCH] D47925: Add debug info for OProfile porifling support
Gaetano Priori via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 11 14:32:18 PDT 2018
gipri updated this revision to Diff 150846.
https://reviews.llvm.org/D47925
Files:
lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt
lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp
Index: lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp
===================================================================
--- lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp
+++ lib/ExecutionEngine/OProfileJIT/OProfileJITEventListener.cpp
@@ -86,6 +86,7 @@
OwningBinary<ObjectFile> DebugObjOwner = L.getObjectForDebug(Obj);
const ObjectFile &DebugObj = *DebugObjOwner.getBinary();
+ std::unique_ptr<DIContext> Context = DWARFContext::create(DebugObj);
// Use symbol info to iterate functions in the object.
for (const std::pair<SymbolRef, uint64_t> &P : computeSymbolSizes(DebugObj)) {
@@ -110,7 +111,28 @@
<< ((char *)Addr + Size) << "]\n");
continue;
}
- // TODO: support line number info (similar to IntelJITEventListener.cpp)
+
+ DILineInfoTable Lines = Context->getLineInfoForAddressRange(Addr, Size);
+ size_t i = 0;
+ size_t num_entries = Lines.size();
+ struct debug_line_info *debug_line;
+ debug_line = (struct debug_line_info *)calloc(
+ num_entries, sizeof(struct debug_line_info));
+
+ for (auto& It : Lines) {
+ debug_line[i].vma = (unsigned long)It.first;
+ debug_line[i].lineno = It.second.Line;
+ debug_line[i].filename =
+ const_cast<char *>(Lines.front().second.FileName.c_str());
+ ++i;
+ }
+
+ if (Wrapper->op_write_debug_line_info((void *)Addr, num_entries,
+ debug_line) == -1) {
+ DEBUG(dbgs() << "Failed to tell OProfiler about debug object at ["
+ << (void *)Addr << "-" << ((char *)Addr + Size) << "]\n");
+ continue;
+ }
}
DebugObjects[Obj.getData().data()] = std::move(DebugObjOwner);
Index: lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt
===================================================================
--- lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt
+++ lib/ExecutionEngine/OProfileJIT/LLVMBuild.txt
@@ -21,4 +21,4 @@
type = OptionalLibrary
name = OProfileJIT
parent = ExecutionEngine
-required_libraries = Support Object ExecutionEngine
+required_libraries = DebugInfoDWARF Support Object ExecutionEngine
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47925.150846.patch
Type: text/x-patch
Size: 2168 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180611/6c811d3c/attachment.bin>
More information about the llvm-commits
mailing list