1. 10 5月, 2018 1 次提交
    • T
      powerpc/livepatch: Implement reliable stack tracing for the consistency model · df78d3f6
      Torsten Duwe 提交于
      The "Power Architecture 64-Bit ELF V2 ABI" says in section 2.3.2.3:
      
      [...] There are several rules that must be adhered to in order to ensure
      reliable and consistent call chain backtracing:
      
      * Before a function calls any other function, it shall establish its
        own stack frame, whose size shall be a multiple of 16 bytes.
      
       – In instances where a function’s prologue creates a stack frame, the
         back-chain word of the stack frame shall be updated atomically with
         the value of the stack pointer (r1) when a back chain is implemented.
         (This must be supported as default by all ELF V2 ABI-compliant
         environments.)
      [...]
       – The function shall save the link register that contains its return
         address in the LR save doubleword of its caller’s stack frame before
         calling another function.
      
      To me this sounds like the equivalent of HAVE_RELIABLE_STACKTRACE.
      This patch may be unneccessarily limited to ppc64le, but OTOH the only
      user of this flag so far is livepatching, which is only implemented on
      PPCs with 64-LE, a.k.a. ELF ABI v2.
      
      Feel free to add other ppc variants, but so far only ppc64le got tested.
      
      This change also implements save_stack_trace_tsk_reliable() for ppc64le
      that checks for the above conditions, where possible.
      Signed-off-by: NTorsten Duwe <duwe@suse.de>
      Signed-off-by: NNicolai Stange <nstange@suse.de>
      Acked-by: NJosh Poimboeuf <jpoimboe@redhat.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      df78d3f6
  2. 28 3月, 2017 1 次提交
  3. 02 3月, 2017 1 次提交
  4. 11 1月, 2016 1 次提交
    • S
      powerpc: Implement save_stack_trace_regs() to enable kprobe stack tracing · 35de3b1a
      Steven Rostedt 提交于
      It has come to my attention that kprobe event stack tracing does not
      work on powerpc. You can see with the following:
      
        # cd /sys/kernel/debug/tracing
        # echo stacktrace > trace_options
        # echo 'p kfree' > kprobe_events
        # echo 1 > events/kprobes/enable
      
      Will print the following warning:
        save_stack_trace_regs() not implemented yet.
      
      Although save_stack_trace() (which normal event stack traces use) is
      implemented, save_stack_trace_regs() which kprobe events use is not.
      This is a cheap attempt to implement that function.
      
      Note, This may have issues if a task tries to get a stack trace from
      another task with its regs, because it just passes in "current" to
      save_context_stack(). But this does solve the issue with stack tracing
      kprobe events.
      Reported-by: NChunyu Hu <chuhu@redhat.com>
      Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      35de3b1a
  5. 15 10月, 2014 2 次提交
    • A
      powerpc: Rename __get_SP() to current_stack_pointer() · acf620ec
      Anton Blanchard 提交于
      Michael points out that __get_SP() is a pretty horrible
      function name. Let's give it a better name.
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      acf620ec
    • A
      powerpc: Reimplement __get_SP() as a function not a define · bfe9a2cf
      Anton Blanchard 提交于
      Li Zhong points out an issue with our current __get_SP()
      implementation. If ftrace function tracing is enabled (ie -pg
      profiling using _mcount) we spill a stack frame on 64bit all the
      time.
      
      If a function calls __get_SP() and later calls a function that is
      tail call optimised, we will pop the stack frame and the value
      returned by __get_SP() is no longer valid. An example from Li can
      be found in save_stack_trace -> save_context_stack:
      
      c0000000000432c0 <.save_stack_trace>:
      c0000000000432c0:       mflr    r0
      c0000000000432c4:       std     r0,16(r1)
      c0000000000432c8:       stdu    r1,-128(r1) <-- stack frame for _mcount
      c0000000000432cc:       std     r3,112(r1)
      c0000000000432d0:       bl      <._mcount>
      c0000000000432d4:       nop
      
      c0000000000432d8:       mr      r4,r1 <-- __get_SP()
      
      c0000000000432dc:       ld      r5,632(r13)
      c0000000000432e0:       ld      r3,112(r1)
      c0000000000432e4:       li      r6,1
      
      c0000000000432e8:       addi    r1,r1,128 <-- pop stack frame
      
      c0000000000432ec:       ld      r0,16(r1)
      c0000000000432f0:       mtlr    r0
      c0000000000432f4:       b       <.save_context_stack> <-- tail call optimized
      
      save_context_stack ends up with a stack pointer below the current
      one, and it is likely to be scribbled over.
      
      Fix this by making __get_SP() a function which returns the
      callers stack frame. Also replace inline assembly which grabs
      the stack pointer in save_stack_trace and show_stack with
      __get_SP().
      
      This also fixes an issue with perf_arch_fetch_caller_regs().
      It currently unwinds the stack once, which will skip a
      valid stack frame on a leaf function. With the __get_SP() fixes
      in this patch, we never need to unwind the stack frame to get
      to the first interesting frame.
      
      We have to export __get_SP() because perf_arch_fetch_caller_regs()
      (which is used in modules) calls it from a header file.
      Reported-by: NLi Zhong <zhong@linux.vnet.ibm.com>
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      bfe9a2cf
  6. 01 11月, 2011 1 次提交
  7. 28 7月, 2008 1 次提交
  8. 22 7月, 2008 1 次提交
  9. 15 7月, 2008 1 次提交
  10. 14 7月, 2008 1 次提交
    • S
      generic-ipi: powerpc/generic-ipi tree build failure · 7798ed0f
      Stephen Rothwell 提交于
      Today's linux-next build (powerpc allmodconfig) failed like this:
      
      ERROR: ".save_stack_trace" [tests/backtracetest.ko] undefined!
      
      But save_stack_trace is exported in arch/powerpc/kernel/stacktrace.c
      
      I couldn't figure it out until I noticed these earlier warnings:
      
      arch/powerpc/kernel/stacktrace.c:47: warning: data definition has no type or storage class
      arch/powerpc/kernel/stacktrace.c:47: warning: type defaults to 'int' in declaration of 'EXPORT_SYMBOL_GPL'
      arch/powerpc/kernel/stacktrace.c:47: warning: parameter names (without types) in function declaration
      
      I applied the patch below.
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: <linuxppc-dev@ozlabs.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      7798ed0f
  11. 03 7月, 2008 1 次提交
  12. 24 4月, 2008 1 次提交
  13. 18 4月, 2008 1 次提交