Hi,
On 15.05.2018 19:30, Andy Lutomirski wrote:
> 
>> On May 15, 2018, at 1:08 AM, Alexey Budankov 
>> <alexey.budan...@linux.intel.com> wrote:
>>
>>
>> Hi Andy,
>>
>>> On 09.05.2018 17:54, Peter Zijlstra wrote:
>>>> On Tue, May 08, 2018 at 06:21:36PM +0300, Alexey Budankov wrote:
>>>>
>>>> Store user space frame-pointer value (BP register) into Perf trace 
>>>> on a sample for a process so the value becomes available when 
>>>> unwinding call stacks for functions gaining event samples.
>>>>
>>>> Signed-off-by: Alexey Budankov <alexey.budan...@linux.intel.com>
>>>> ---
>>>> arch/x86/kernel/perf_regs.c | 8 +++++++-
>>>> 1 file changed, 7 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/arch/x86/kernel/perf_regs.c b/arch/x86/kernel/perf_regs.c
>>>> index e47b2dbbdef3..8d68658eff7f 100644
>>>> --- a/arch/x86/kernel/perf_regs.c
>>>> +++ b/arch/x86/kernel/perf_regs.c
>>>> @@ -156,7 +156,13 @@ void perf_get_regs_user(struct perf_regs *regs_user,
>>>
>>>
>>>>     * Most system calls don't save these registers, don't report them.
>>>
>>> ^^^ that worries me and is the reason for the '-1's below. However I
>>> think with all the PTI rework this might no longer be true.
>>>
>>> The Changelog needs to state that user_regs->bp is in fact valid and
>>> ideally point to the commits that makes it so. Also this patch should
>>> update that comment.
>>>
>>> Cc Andy who keeps better track of all that than me.
>>
>> Are there any thoughts so far? Feedback on the matter above is highly 
>> appreciated.
> 
> Sorry, I missed this. Can you forward the original patch?  I don’t have it.

Store user space frame-pointer value (BP register) into Perf trace 
on a sample for a process so the value becomes available when 
unwinding call stacks for functions gaining event samples.

Signed-off-by: Alexey Budankov <alexey.budan...@linux.intel.com>
---
 arch/x86/kernel/perf_regs.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/perf_regs.c b/arch/x86/kernel/perf_regs.c
index e47b2dbbdef3..8d68658eff7f 100644
--- a/arch/x86/kernel/perf_regs.c
+++ b/arch/x86/kernel/perf_regs.c
@@ -156,7 +156,13 @@ void perf_get_regs_user(struct perf_regs *regs_user,
         * Most system calls don't save these registers, don't report them.
         */
        regs_user_copy->bx = -1;
-       regs_user_copy->bp = -1;
+       /*
+        * Store user space frame-pointer value on sample
+        * to facilitate stack unwinding for cases when
+        * user space executable code has such support
+        * enabled at compile time;
+        */
+       regs_user_copy->bp = user_regs->bp;
        regs_user_copy->r12 = -1;
        regs_user_copy->r13 = -1;
        regs_user_copy->r14 = -1;

> These days, system calls should save all registers, but I’m not entirely sure 
> I want to promise that they’ll continue to do so forever.
> 

Reply via email to