lkml.org 
[lkml]   [2011]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v3 2.6.39-rc1-tip 13/26] 13: uprobes: get the breakpoint address.

    On a breakpoint hit, return the address where the breakpoint was hit.

    Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Signed-off-by: Jim Keniston <jkenisto@us.ibm.com>
    ---
    include/linux/uprobes.h | 5 +++++
    kernel/uprobes.c | 11 +++++++++++
    2 files changed, 16 insertions(+), 0 deletions(-)

    diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h
    index 10647be..91b808a 100644
    --- a/include/linux/uprobes.h
    +++ b/include/linux/uprobes.h
    @@ -157,6 +157,7 @@ extern void uprobe_free_utask(struct task_struct *tsk);

    struct vm_area_struct;
    extern int uprobe_mmap(struct vm_area_struct *vma);
    +extern unsigned long uprobes_get_bkpt_addr(struct pt_regs *regs);
    extern void uprobe_dup_mmap(struct mm_struct *old_mm, struct mm_struct *mm);
    extern void uprobes_free_xol_area(struct mm_struct *mm);
    #else /* CONFIG_UPROBES is not defined */
    @@ -179,5 +180,9 @@ static inline int uprobe_mmap(struct vm_area_struct *vma)
    }
    static inline void uprobe_free_utask(struct task_struct *tsk) {}
    static inline void uprobes_free_xol_area(struct mm_struct *mm) {}
    +static inline unsigned long uprobes_get_bkpt_addr(struct pt_regs *regs)
    +{
    + return 0;
    +}
    #endif /* CONFIG_UPROBES */
    #endif /* _LINUX_UPROBES_H */
    diff --git a/kernel/uprobes.c b/kernel/uprobes.c
    index 7663d18..dcae6dd 100644
    --- a/kernel/uprobes.c
    +++ b/kernel/uprobes.c
    @@ -1190,6 +1190,17 @@ static void xol_free_insn_slot(struct task_struct *tsk, unsigned long slot_addr)
    __func__, slot_addr);
    }

    +/**
    + * uprobes_get_bkpt_addr - compute address of bkpt given post-bkpt regs
    + * @regs: Reflects the saved state of the task after it has hit a breakpoint
    + * instruction.
    + * Return the address of the breakpoint instruction.
    + */
    +unsigned long uprobes_get_bkpt_addr(struct pt_regs *regs)
    +{
    + return instruction_pointer(regs) - UPROBES_BKPT_INSN_SIZE;
    +}
    +
    /*
    * Called with no locks held.
    * Called in context of a exiting or a exec-ing thread.

    \
     
     \ /
      Last update: 2011-04-01 16:47    [W:0.022 / U:121.912 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site