1. 21 8月, 2009 6 次提交
    • M
      sh: Handle the DWARF op, DW_CFA_undefined · 5580e904
      Matt Fleming 提交于
      Allow a DWARF register to have an undefined value. When applied to the
      DWARF return address register this lets lets us label a function as
      having no direct caller, e.g. kernel_thread_helper().
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      5580e904
    • M
      sh: Fix bug calculating the end of the FDE instructions · 5480675d
      Matt Fleming 提交于
      The 'end' member of struct dwarf_fde denotes one byte past the end of
      the CFA instruction stream for an FDE. The value of 'end' was being
      calcualted incorrectly, it was being set too high. This resulted in
      dwarf_cfa_execute_insns() interpreting data past the end of valid
      instructions, thus causing all sorts of weird crashes.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      5480675d
    • M
      sh: Setup the frame pointer in handle_interrupt · fe98dd31
      Matt Fleming 提交于
      When CONFIG_DWARF_UNWINDER is enabled setup r14 in handle_interrupt, so
      that we can figure out what function was running when we were
      interrupted.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      fe98dd31
    • M
      sh: unwinder: Introduce UNWINDER_BUG() and UNWINDER_BUG_ON() · b344e24a
      Matt Fleming 提交于
      We can't assume that if we execute the unwinder code and the unwinder
      was already running that it has faulted. Clearly two kernel threads can
      invoke the unwinder at the same time and may be running simultaneously.
      
      The previous approach used BUG() and BUG_ON() in the unwinder code to
      detect whether the unwinder was incapable of unwinding the stack, and
      that the next available unwinder should be used instead. A better
      approach is to explicitly invoke a trap handler to switch unwinders when
      the current unwinder cannot continue.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      b344e24a
    • M
      sh: unwinder: Set the flags for DW_CFA_val_offset ops as DWARF_VAL_OFFSET · 97efbbd5
      Matt Fleming 提交于
      The handling of DW_CFA_val_offset ops was incorrectly using the
      DWARF_REG_OFFSET flag but the register's value cannot be calculated
      using the DWARF_REG_OFFSET method. Create a new flag to indicate that a
      different method must be used to calculate the register's value even
      though there is no implementation for DWARF_VAL_OFFSET yet; it's mainly
      just a place holder.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      97efbbd5
    • M
      sh: unwinder: Fix memory leak and create our own kmem cache · fb3f3e7f
      Matt Fleming 提交于
      Plug a memory leak in dwarf_unwinder_dump() where we didn't free the
      memory that we had previously allocated for the DWARF frames and DWARF
      registers.
      
      Now is also a opportune time to implement our own mempool and kmem
      cache. It's a good idea to have a certain number of frame and register
      objects in reserve at all times, so that we are guaranteed to have our
      allocation satisfied even when memory is scarce. Since we have pools to
      allocate from we can implement the registers for each frame as a linked
      list as opposed to a sparsely populated array. Whilst it's true that the
      lookup time for a linked list is larger than for arrays, there's only
      usually a maximum of 8 registers per frame. So the overhead isn't that
      much of a concern.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      fb3f3e7f
  2. 17 8月, 2009 1 次提交
  3. 16 8月, 2009 3 次提交
    • M
      sh: Add support for DWARF GNU extensions · cd7246f0
      Matt Fleming 提交于
      Also, remove the "fix" to DW_CFA_def_cfa_register where we reset the
      frame's cfa_offset to 0. This action is incorrect when handling
      DW_CFA_def_cfa_register as the DWARF spec specifically states that the
      previous contents of cfa_offset should be used with the new
      register. The reason that I thought cfa_offset should be reset to 0 was
      because it was being assigned a bogus value prior to executing the
      DW_CFA_def_cfa_register op. It turns out that the bogus cfa_offset value
      came from interpreting .cfi_escape pseudo-ops (those used by the GNU
      extensions) as CFA_DW_def_cfa ops.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      cd7246f0
    • M
      sh: Try again at getting the initial return address for an unwind · b955873b
      Matt Fleming 提交于
      The previous hack for calculating the return address for the first frame
      we unwind (dwarf_unwinder_dump) didn't always work. The problem was that
      it assumed once it read the rule for calculating the return address,
      there would be no new rules for calculating it. This isn't true because
      the way in which the CFA is calculated can change as you progress
      through a function and the return address is figured out using the
      CFA. Therefore, the way to calculate the return address can change.
      
      So, instead of using some offset from the beginning of
      dwarf_unwind_stack which is just a flakey approach, and instead of
      executing instructions from the FDE until the return address is setup,
      we now figure out the pc in dwarf_unwind_stack() just before we call
      dwarf_cfa_execute_insns().
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      b955873b
    • P
      sh: Merge the _32/_64 variants of arch/sh/kernel/Makefile. · 38f9ddf4
      Paul Mundt 提交于
      This uses the BITS export as per x86 in order to allow the same Makefile
      to be used.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      38f9ddf4
  4. 15 8月, 2009 8 次提交
    • M
      sh: sh7724 ddr self-refresh changes · 237674e0
      Magnus Damm 提交于
      This patch updates the SuperH Mobile sleep assembly code with
      support for DBSC memory controller found in the sh7724 processor.
      
      Without this fix the memory hooked up to the sh7724 processor
      will never enter self-refresh mode before suspending to ram. The
      effect of this is that the memory contents most likeley will be
      lost upon resume which may or may not be what you want.
      Signed-off-by: NMagnus Damm <damm@igel.co.jp>
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      237674e0
    • M
      sh: use in-soc KEYSC on se7724 · 9747e78b
      Magnus Damm 提交于
      This patch updates the Solution Engine 7724 board code to use
      in-SoC KEYSC resources for the keyboard platform device. Using
      the in-SoC key scan controller fixes a crash-during-resume issue.
      
      Without this patch the KEYSC hardware block located in the board
      specific FPGA is used together with an external IRQ which is
      routed through the FPGA and handled by some board specific demux
      code. This board specific FPGA interrupt code does not implement
      desc->set_wake() so the enable_irq_wake() call in the sh_keysc
      driver will fail at suspend-to-ram time and the disable_irq_wake()
      will bomb out when resuming.
      
      Changing the platform data to use the in-SoC KEYSC hardware makes
      the se7724 board support code less special which is a good thing.
      Also, the board specific KEYSC pin setup code selects in-SoC pin
      functions already which makes the current FPGA platform device data
      look like a typo.
      Signed-off-by: NMagnus Damm <damm@igel.co.jp>
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      9747e78b
    • M
      sh: Set the cfa_offset to 0 if we see a DW_CFA_def_cfa_register op · 180aa6e6
      Matt Fleming 提交于
      The way that the CFA is calculated can change as we progress through a
      function. If we see a DW_CFA_def_cfa_register op we need to reset the
      frame's cfa_offset value which may have been previously setup.
      Signed-off-by: NMatt Fleming <matt@console-pimps.org>
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      180aa6e6
    • P
      sh: delay slot future proofing via EXPMASK on SH-4A parts. · 7dd6662a
      Paul Mundt 提交于
      This implements EXPMASK initialization code for SH-4A parts, where it is
      possible to disable compat features that will go away in newer cores.
      Presently this includes disabling support for non-nop instructions in the
      rte delay slot, as well as a sleep instruction being placed in a delay
      slot (neither of which the kernel does any longer). As a result of this,
      any future offenders will have illegal slot exceptions generated for
      them.
      
      Associative writes for the memory-mapped cache array are still left
      enabled, until such a point that special cache operations for SH-4A are
      provided to move off of the current (and rather dated) SH-4 versions.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      7dd6662a
    • P
      sh: Make sure rte delay slots are nopped out on all parts. · 7a90e00d
      Paul Mundt 提交于
      Future SH parts do not support any instruction but a nop in the rte delay
      slot, so make the change for all offending parts. SH-5 is excluded from
      this, and already has its own set of restrictions with regards to rte
      delay slot handling.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      7a90e00d
    • P
      sh: stacktrace: Properly terminate the trace entry buffer. · 606b4c99
      Paul Mundt 提交于
      This inserts a ULONG_MAX entry at the end of the valid entries in the
      stack trace buffer so the default code doesn't need to scan to the end of
      available slots. This also makes the trace buffer termination behaviour
      consistent with the other architectures.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      606b4c99
    • P
      sh: flag the default unwinder as reliable. · f9967e23
      Paul Mundt 提交于
      This flags the default unwinder as reliable, as it tends to be reliable
      enough for the purposes of the stacktrace buffer. We leave the unreliable
      cases for the unwind methods that we know to be completely broken.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      f9967e23
    • P
      sh: stacktrace: Add reliability checks in address saving ops. · 48e4d460
      Paul Mundt 提交于
      This adopts the reliability checks from the x86 stacktrace code so known
      bad addresses are not recorded in the stack trace buffer.
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      48e4d460
  5. 14 8月, 2009 8 次提交
  6. 13 8月, 2009 7 次提交
  7. 12 8月, 2009 7 次提交