1. 05 6月, 2015 2 次提交
    • M
      arm64: alternative: Work around .inst assembler bugs · eb7c11ee
      Marc Zyngier 提交于
      AArch64 toolchains suffer from the following bug:
      
      $ cat blah.S
      1:
      	.inst	0x01020304
      	.if ((. - 1b) != 4)
      		.error	"blah"
      	.endif
      $ aarch64-linux-gnu-gcc -c blah.S
      blah.S: Assembler messages:
      blah.S:3: Error: non-constant expression in ".if" statement
      
      which precludes the use of msr_s and co as part of alternatives.
      
      We workaround this issue by not directly testing the labels
      themselves, but by moving the current output pointer by a value
      that should always be zero. If this value is not null, then
      we will trigger a backward move, which is expclicitely forbidden.
      This triggers the error we're after:
      
        AS      arch/arm64/kvm/hyp.o
      arch/arm64/kvm/hyp.S: Assembler messages:
      arch/arm64/kvm/hyp.S:1377: Error: attempt to move .org backwards
      scripts/Makefile.build:294: recipe for target 'arch/arm64/kvm/hyp.o' failed
      make[1]: *** [arch/arm64/kvm/hyp.o] Error 1
      Makefile:946: recipe for target 'arch/arm64/kvm' failed
      
      Not pretty, but at least works on the current toolchains.
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      eb7c11ee
    • M
      arm64: alternative: Merge alternative-asm.h into alternative.h · 8d883b23
      Marc Zyngier 提交于
      asm/alternative-asm.h and asm/alternative.h are extremely similar,
      and really deserve to live in the same file (as this makes further
      modufications a bit easier).
      
      Fold the content of alternative-asm.h into alternative.h, and
      update the few users.
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
      8d883b23
  2. 04 12月, 2014 1 次提交
    • A
      arm64: add module support for alternatives fixups · 932ded4b
      Andre Przywara 提交于
      Currently the kernel patches all necessary instructions once at boot
      time, so modules are not covered by this.
      Change the apply_alternatives() function to take a beginning and an
      end pointer and introduce a new variant (apply_alternatives_all()) to
      cover the existing use case for the static kernel image section.
      Add a module_finalize() function to arm64 to check for an
      alternatives section in a module and patch only the instructions from
      that specific area.
      Since that module code is not touched before the module
      initialization has ended, we don't need to halt the machine before
      doing the patching in the module's code.
      Signed-off-by: NAndre Przywara <andre.przywara@arm.com>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      932ded4b
  3. 25 11月, 2014 1 次提交