[PATCH] D33266: [XRay] Fix __xray_function_address on PPC reguarding local entry points.
Tim Shen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 16 17:37:00 PDT 2017
timshen created this revision.
https://reviews.llvm.org/D33266
Files:
compiler-rt/lib/xray/xray_interface.cc
compiler-rt/test/xray/TestCases/Linux/func-id-utils.cc
Index: compiler-rt/test/xray/TestCases/Linux/func-id-utils.cc
===================================================================
--- compiler-rt/test/xray/TestCases/Linux/func-id-utils.cc
+++ compiler-rt/test/xray/TestCases/Linux/func-id-utils.cc
@@ -31,18 +31,10 @@
"each function id must be assigned to a unique function");
std::set<void *> not_instrumented;
- const auto comp = [](void *lhs, void *rhs) {
-#ifdef __PPC__
- return reinterpret_cast<uintptr_t>(lhs) + 8 <
- reinterpret_cast<uintptr_t>(rhs);
-#else
- return lhs < rhs;
-#endif
- };
- std::set_difference(must_be_instrumented.begin(), must_be_instrumented.end(),
- all_instrumented.begin(), all_instrumented.end(),
- std::inserter(not_instrumented, not_instrumented.begin()),
- comp);
+ std::set_difference(
+ must_be_instrumented.begin(), must_be_instrumented.end(),
+ all_instrumented.begin(), all_instrumented.end(),
+ std::inserter(not_instrumented, not_instrumented.begin()));
assert(
not_instrumented.empty() &&
"we should see all explicitly instrumented functions with function ids");
Index: compiler-rt/lib/xray/xray_interface.cc
===================================================================
--- compiler-rt/lib/xray/xray_interface.cc
+++ compiler-rt/lib/xray/xray_interface.cc
@@ -326,7 +326,14 @@
__sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex);
if (FuncId <= 0 || static_cast<size_t>(FuncId) > XRayInstrMap.Functions)
return 0;
- return XRayInstrMap.SledsIndex[FuncId - 1].Begin->Address;
+ return XRayInstrMap.SledsIndex[FuncId - 1].Begin->Address
+// On PPC, function entries are always aligned to 16 bytes. The beginning of a
+// sled might be a local entry, which is always +8 based on the global entry.
+// Always return the global entry.
+#ifdef __PPC__
+ & ~0xf
+#endif
+ ;
}
size_t __xray_max_function_id() XRAY_NEVER_INSTRUMENT {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33266.99230.patch
Type: text/x-patch
Size: 1987 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170517/9ec4ed4e/attachment.bin>
More information about the llvm-commits
mailing list