From af3ffcc1f8d13b2b5f26e8283df25dd05ea1a3f0 Mon Sep 17 00:00:00 2001 From: Tim Shen Date: Wed, 17 May 2017 21:20:00 +0000 Subject: [XRay] Fix __xray_function_address on PPC reguarding local entry points. Reviewers: echristo, dberris Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D33266 llvm-svn: 303302 --- compiler-rt/lib/xray/xray_interface.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'compiler-rt/lib/xray/xray_interface.cc') diff --git a/compiler-rt/lib/xray/xray_interface.cc b/compiler-rt/lib/xray/xray_interface.cc index c437a72e3f0..523ed16b9e1 100644 --- a/compiler-rt/lib/xray/xray_interface.cc +++ b/compiler-rt/lib/xray/xray_interface.cc @@ -326,7 +326,14 @@ uintptr_t __xray_function_address(int32_t FuncId) XRAY_NEVER_INSTRUMENT { __sanitizer::SpinMutexLock Guard(&XRayInstrMapMutex); if (FuncId <= 0 || static_cast(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 { -- cgit v1.2.3