1. 19 7月, 2016 3 次提交
    • W
      arm64: Add trampoline code for kretprobes · da6a9125
      William Cohen 提交于
      The trampoline code is used by kretprobes to capture a return from a probed
      function.  This is done by saving the registers, calling the handler, and
      restoring the registers. The code then returns to the original saved caller
      return address. It is necessary to do this directly instead of using a
      software breakpoint because the code used in processing that breakpoint
      could itself be kprobe'd and cause a problematic reentry into the debug
      exception handler.
      Signed-off-by: NWilliam Cohen <wcohen@redhat.com>
      Signed-off-by: NDavid A. Long <dave.long@linaro.org>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      [catalin.marinas@arm.com: removed unnecessary masking of the PSTATE bits]
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      da6a9125
    • S
      arm64: kprobes instruction simulation support · 39a67d49
      Sandeepa Prabhu 提交于
      Kprobes needs simulation of instructions that cannot be stepped
      from a different memory location, e.g.: those instructions
      that uses PC-relative addressing. In simulation, the behaviour
      of the instruction is implemented using a copy of pt_regs.
      
      The following instruction categories are simulated:
       - All branching instructions(conditional, register, and immediate)
       - Literal access instructions(load-literal, adr/adrp)
      
      Conditional execution is limited to branching instructions in
      ARM v8. If conditions at PSTATE do not match the condition fields
      of opcode, the instruction is effectively NOP.
      
      Thanks to Will Cohen for assorted suggested changes.
      Signed-off-by: NSandeepa Prabhu <sandeepa.s.prabhu@gmail.com>
      Signed-off-by: NWilliam Cohen <wcohen@redhat.com>
      Signed-off-by: NDavid A. Long <dave.long@linaro.org>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      [catalin.marinas@arm.com: removed linux/module.h include]
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      39a67d49
    • S
      arm64: Kprobes with single stepping support · 2dd0e8d2
      Sandeepa Prabhu 提交于
      Add support for basic kernel probes(kprobes) and jump probes
      (jprobes) for ARM64.
      
      Kprobes utilizes software breakpoint and single step debug
      exceptions supported on ARM v8.
      
      A software breakpoint is placed at the probe address to trap the
      kernel execution into the kprobe handler.
      
      ARM v8 supports enabling single stepping before the break exception
      return (ERET), with next PC in exception return address (ELR_EL1). The
      kprobe handler prepares an executable memory slot for out-of-line
      execution with a copy of the original instruction being probed, and
      enables single stepping. The PC is set to the out-of-line slot address
      before the ERET. With this scheme, the instruction is executed with the
      exact same register context except for the PC (and DAIF) registers.
      
      Debug mask (PSTATE.D) is enabled only when single stepping a recursive
      kprobe, e.g.: during kprobes reenter so that probed instruction can be
      single stepped within the kprobe handler -exception- context.
      The recursion depth of kprobe is always 2, i.e. upon probe re-entry,
      any further re-entry is prevented by not calling handlers and the case
      counted as a missed kprobe).
      
      Single stepping from the x-o-l slot has a drawback for PC-relative accesses
      like branching and symbolic literals access as the offset from the new PC
      (slot address) may not be ensured to fit in the immediate value of
      the opcode. Such instructions need simulation, so reject
      probing them.
      
      Instructions generating exceptions or cpu mode change are rejected
      for probing.
      
      Exclusive load/store instructions are rejected too.  Additionally, the
      code is checked to see if it is inside an exclusive load/store sequence
      (code from Pratyush).
      
      System instructions are mostly enabled for stepping, except MSR/MRS
      accesses to "DAIF" flags in PSTATE, which are not safe for
      probing.
      
      This also changes arch/arm64/include/asm/ptrace.h to use
      include/asm-generic/ptrace.h.
      
      Thanks to Steve Capper and Pratyush Anand for several suggested
      Changes.
      Signed-off-by: NSandeepa Prabhu <sandeepa.s.prabhu@gmail.com>
      Signed-off-by: NDavid A. Long <dave.long@linaro.org>
      Signed-off-by: NPratyush Anand <panand@redhat.com>
      Acked-by: NMasami Hiramatsu <mhiramat@kernel.org>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      2dd0e8d2