[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
Wed May 17 14:33:26 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL303302: [XRay] Fix __xray_function_address on PPC reguarding local entry points. (authored by timshen).

Changed prior to commit:
  https://reviews.llvm.org/D33266?vs=99230&id=99349#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33266

Files:
  compiler-rt/trunk/lib/xray/xray_interface.cc
  compiler-rt/trunk/test/xray/TestCases/Linux/func-id-utils.cc


Index: compiler-rt/trunk/lib/xray/xray_interface.cc
===================================================================
--- compiler-rt/trunk/lib/xray/xray_interface.cc
+++ compiler-rt/trunk/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 {
Index: compiler-rt/trunk/test/xray/TestCases/Linux/func-id-utils.cc
===================================================================
--- compiler-rt/trunk/test/xray/TestCases/Linux/func-id-utils.cc
+++ compiler-rt/trunk/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");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33266.99349.patch
Type: text/x-patch
Size: 2023 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170517/1488648b/attachment.bin>


More information about the llvm-commits mailing list