rems-project / sail-arm

Sail version of Arm ISA definition, currently for Armv9.3-A, and with the previous Sail Armv8.5-A model
Other
71 stars 18 forks source link

linux doesn't boot: Exception taken during IFetch #1

Open RobertHenry6bev opened 4 years ago

RobertHenry6bev commented 4 years ago

Running on an ubuntu 19.10 host, I believe I'm correctly following the steps in https://github.com/rems-project/sail-arm/tree/master/arm-v8.5-a

The resulting execution of linux runs along for 15 wall clock minutes, and the aarch64 emulator dies due to an exception taken during IFetch. Here's the last few lines of the console log:

0.106016] Floating-point is not implemented

[ 0.106555] Advanced SIMD is not implemented [ 0.110363] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns [ 0.111487] futex hash table entries: 256 (order: 3, 32768 bytes) [ 0.139623] vdso: 2 pages (1 code @ ffff000008275000, 1 data @ ffff000008394000) [ 0.140556] hw-breakpoint: found 2 breakpoint and 2 watchpoint registers. [ 0.146552] DMA: preallocated 256 KiB pool for atomic allocations [ 0.147296] Serial: AMBA PL011 UART driver [ 0.152926] OF: amba_device_add() failed (-2) for /uart@3c000000 [ 0.314280] clocksource: Switched to clocksource arch_sys_counter [ 0.663831] workingset: timestamp_bits=62 max_order=16 bucket_order=0 [ 0.982486] io scheduler noop registered (default) [ 1.094483] Serial: AMBA driver [ 1.098182] cacheinfo: Unable to detect cache hierarchy for CPU 0 [ 1.117508] Warning: unable to open an initial console. [ 1.119854] Freeing unused kernel memory: 192K Exception taken during IFetch from PC=0xffff7dfffe7fc400 in cycle=31252682 [Sail] Finished Successfully!

Alasdair commented 4 years ago

I'm using a magic illegal instruction in the init process to signal that the Kernel has finished booting, which is what causes that message. I only implemented the bare minimum in terms of devices to get that far (UART is just an address that prints bytes when written to, and the interrupt controller is special cased for just a single timer interrupt, so there's not much useful stuff that can be done). Mostly it just serves as a nice test I run on our CI server.