lkml.org 
[lkml]   [2018]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH v2]: perf/x86: store user space frame-pointer value on a sample
    From
    Date
    Hi,
    On 15.05.2018 19:30, Andy Lutomirski wrote:
    >
    >> On May 15, 2018, at 1:08 AM, Alexey Budankov <alexey.budankov@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.budankov@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.budankov@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.
    >

    \
     
     \ /
      Last update: 2018-05-16 10:43    [W:3.167 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site