diff options
author | Dean Michael Berris <dberris@google.com> | 2017-08-28 03:58:23 +0000 |
---|---|---|
committer | Dean Michael Berris <dberris@google.com> | 2017-08-28 03:58:23 +0000 |
commit | 5824d872dfe59e2a65e2b6a8e4d69b2d06d6d001 (patch) | |
tree | 77121014a26544452ae398b78ad0a41e0d786ec3 /lib/xray | |
parent | 26676b9c57b4e21dc89f668c54e7eab5d31f9bb8 (diff) |
[XRay][compiler-rt] Return the pointer associated with the function instead of the sled
Summary:
XRay has erroneously been returning the address of the first sled in the
instrumentation map for a function id instead of the (runtime-relocated)
functison address. This causes confusion and issues for applications
where:
- The first sled in the function may not be an entry sled (due to
re-ordering or some other reason).
- The caller attempts to find a symbol associated with the pointer at
runtime, because the sled may not be exactly where the function's
known address is (in case of inlined functions or those that have an
external definition for symbols).
This fixes http://llvm.org/PR34340.
Reviewers: eizan
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D37202
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@311871 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/xray')
-rw-r--r-- | lib/xray/xray_interface.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/xray/xray_interface.cc b/lib/xray/xray_interface.cc index 694d34c01..7ad6a9b84 100644 --- a/lib/xray/xray_interface.cc +++ b/lib/xray/xray_interface.cc @@ -331,7 +331,7 @@ uintptr_t __xray_function_address(int32_t FuncId) XRAY_NEVER_INSTRUMENT { __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->Function // 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. |