1. 12 6月, 2017 1 次提交
    • A
      ARM: 8680/1: boot/compressed: fix inappropriate Thumb2 mnemonic for __nop · 60ce2858
      Ard Biesheuvel 提交于
      Commit 06a4b6d0 ("ARM: 8677/1: boot/compressed: fix decompressor
      header layout for v7-M") fixed an issue in the layout of the header
      of the compressed kernel image that was caused by the assembler
      emitting narrow opcodes for 'mov r0, r0', and for this reason, the
      mnemonic was updated to use the W() macro, which will append the .w
      suffix (which forces a wide encoding) if required, i.e., when building
      the kernel in Thumb2 mode.
      
      However, this failed to take into account that on Thumb2 kernels built
      for CPUs that are also ARM capable, the entry point is entered in ARM
      mode, and so the instructions emitted here will be ARM instructions
      that only exist in a wide encoding to begin with, which is why the
      assembler rejects the .w suffix here and aborts the build with the
      following message:
      
        head.S: Assembler messages:
        head.S:132: Error: width suffixes are invalid in ARM mode -- `mov.w r0,r0'
      
      So replace the W(mov) with separate ARM and Thumb2 instructions, where
      the latter will only be used for THUMB2_ONLY builds.
      
      Fixes: 06a4b6d0 ("ARM: 8677/1: boot/compressed: fix decompressor ...")
      Reported-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
      Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
      60ce2858
  2. 05 6月, 2017 1 次提交
    • A
      ARM: 8677/1: boot/compressed: fix decompressor header layout for v7-M · 06a4b6d0
      Ard Biesheuvel 提交于
      As reported by Patrice, the header layout of the decompressor is
      incorrect when building for v7-M. In this case, the __nop macro
      resolves to 'mov r0, r0', which is emitted as a narrow encoding,
      resulting in the header data fields to end up at lower offsets than
      required.
      
      Given the variety of targets we need to support with the same code,
      the startup sequence is a bit of a jumble, and uses instructions
      and macros whose encoding widths cannot be specified (badr), or only
      exist in a narrow encoding (bx)
      
      So force the use of a wide encoding in __nop, and replace the start
      sequence with a simple jump to the label marking the start of code,
      preceded by a Thumb2 mode switch if required (using explicit wide
      encodings where appropriate). The label itself can be moved to the
      start of code [where it belongs] due to the larger range of branch
      instructions as compared to adr instructions.
      Reported-by: NPatrice CHOTARD <patrice.chotard@st.com>
      Acked-by: NNicolas Pitre <nico@linaro.org>
      Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
      Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
      06a4b6d0
  3. 14 12月, 2015 1 次提交