[arch][arm] Fix fiq handler for ARM_MERGE_FIQ_IRQ

When entering most exceptions on arm, IRQs are masked but FIQs are left
unmasked. Simulate the behavior we want by looking at the IRQ mask in
SPSR on FIQ entry and restart with FIQs masked as well if only IRQs were
masked. This prevents corrupting the LR and SPSR values for the
interrupted context as FIQs can trigger a context switch when
ARM_MERGE_FIQ_IRQ is enabled.

Bug: 122357256
Change-Id: Ice0f5bee13bc4a52eba3a82ce945c9c693d9b224
1 file changed
tree: 70ad5e7da8673cae1301f28874558c633dc4f74b
  1. app/
  2. arch/
  3. dev/
  4. external/
  5. hosttests/
  6. include/
  7. kernel/
  8. lib/
  9. make/
  10. platform/
  11. target/
  12. tools/
  13. top/
  14. .clang-format
  15. .gitignore
  16. build-config-kerneltests
  17. engine.mk
  18. kerneltests-inc.mk
  19. LICENSE
  20. lk_inc.mk.example
  21. makefile
  22. README.md
README.md

LK

The LK embedded kernel. An SMP-aware kernel designed for small systems.

See https://github.com/littlekernel/lk for the latest version.

See https://github.com/littlekernel/lk/wiki for documentation.

Builds

Build Status

To build and test for ARM on linux

  1. install or build qemu. v2.4 and above is recommended.
  2. install gcc for embedded arm (see note 1)
  3. run scripts/do-qemuarm (from the lk directory)
  4. you should see ‘welcome to lk/MP’

This will get you a interactive prompt into LK which is running in qemu arm machine ‘virt’ emulation. type ‘help’ for commands.

note 1: for ubuntu: sudo apt-get install gcc-arm-none-eabi or fetch a prebuilt toolchain from http://newos.org/toolchains/arm-eabi-5.3.0-Linux-x86_64.tar.xz