@@ -13376,14 +13376,14 @@ ARM exception levels are analogous to x86 <<ring0,rings>>.
13376
13376
Print the EL at the beginning of a baremetal simulation:
13377
13377
13378
13378
....
13379
- ./run --arch arm --baremetal baremetal/arch/arm/el .c
13380
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c
13379
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs .c
13380
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c
13381
13381
....
13382
13382
13383
13383
Sources:
13384
13384
13385
- * link:baremetal/arch/arm/el .c[]
13386
- * link:baremetal/arch/aarch64/el .c[]
13385
+ * link:baremetal/arch/arm/dump_regs .c[]
13386
+ * link:baremetal/arch/aarch64/dump_regs .c[]
13387
13387
13388
13388
The instructions that find the ARM EL are explained at: https://stackoverflow.com/questions/31787617/what-is-the-current-execution-mode-exception-level-etc
13389
13389
@@ -13392,53 +13392,53 @@ The lower ELs are not mandated by the architecture, and can be controlled throug
13392
13392
In QEMU, you can configure the lowest EL as explained at https://stackoverflow.com/questions/42824706/qemu-system-aarch64-entering-el1-when-emulating-a53-power-up
13393
13393
13394
13394
....
13395
- ./run --arch arm --baremetal baremetal/arch/arm/el.c
13396
- ./run --arch arm --baremetal baremetal/arch/arm/el .c -- -machine virtualization=on
13397
- ./run --arch arm --baremetal baremetal/arch/arm/el .c -- -machine secure=on
13398
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el.c
13399
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c -- -machine virtualization=on
13400
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c -- -machine secure=on
13395
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs.c | grep CPSR.M
13396
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs .c -- -machine virtualization=on | grep CPSR.M
13397
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs .c -- -machine secure=on | grep CPSR.M
13398
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs.c | grep CurrentEL.EL
13399
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c -- -machine virtualization=on | grep CurrentEL.EL
13400
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c -- -machine secure=on | grep CurrentEL.EL
13401
13401
....
13402
13402
13403
13403
outputs respectively:
13404
13404
13405
13405
....
13406
- 19
13407
- 19
13408
- 19
13409
- 1
13410
- 2
13411
- 3
13406
+ CPSR.M 0x3
13407
+ CPSR.M 0x3
13408
+ CPSR.M 0x3
13409
+ CurrentEL.EL 0x1
13410
+ CurrentEL.EL 0x2
13411
+ CurrentEL.EL 0x3
13412
13412
....
13413
13413
13414
- TODO: why is ` arm` stuck at `19 ` which equals Supervisor mode?
13414
+ TODO: why is arm `CPSR.M` stuck at `0x3 ` which equals Supervisor mode?
13415
13415
13416
13416
In gem5, you can configure the lowest EL with:
13417
13417
13418
13418
....
13419
- ./run --arch arm --baremetal baremeta /arch/arm/el .c --emulator gem5
13420
- cat "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13421
- ./run --arch arm --baremetal baremetal/arch/arm/el .c --emulator gem5 -- --param 'system.have_virtualization = True'
13422
- cat "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13423
- ./run --arch arm --baremetal baremetal/arch/arm/el .c --emulator gem5 -- --param 'system.have_security = True'
13424
- cat "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13425
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c --emulator gem5
13426
- cat "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13427
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c --emulator gem5 -- --param 'system.have_virtualization = True'
13428
- cat "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13429
- ./run --arch aarch64 --baremetal baremetal/arch/aarch64/el .c --emulator gem5 -- --param 'system.have_security = True'
13430
- cat "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13419
+ ./run --arch arm --baremetal baremetal /arch/arm/dump_regs .c --emulator gem5
13420
+ grep CPSR.M "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13421
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs .c --emulator gem5 -- --param 'system.have_virtualization = True'
13422
+ grep CPSR.M "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13423
+ ./run --arch arm --baremetal baremetal/arch/arm/dump_regs .c --emulator gem5 -- --param 'system.have_security = True'
13424
+ grep CPSR.M "$(./getvar --arch arm --emulator gem5 gem5_guest_terminal_file)"
13425
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c --emulator gem5
13426
+ grep CurrentEL.EL "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13427
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c --emulator gem5 -- --param 'system.have_virtualization = True'
13428
+ grep CurrentEL.EL "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13429
+ ./run --arch aarch64 --baremetal baremetal/arch/aarch64/dump_regs .c --emulator gem5 -- --param 'system.have_security = True'
13430
+ grep CurrentEL.EL "$(./getvar --arch aarch64 --emulator gem5 gem5_guest_terminal_file)"
13431
13431
....
13432
13432
13433
13433
output:
13434
13434
13435
13435
....
13436
- 19
13437
- 26
13438
- 19
13439
- 1
13440
- 2
13441
- 3
13436
+ CPSR.M 0x3
13437
+ CPSR.M 0x3
13438
+ CPSR.M 0x3
13439
+ CurrentEL.EL 0x1
13440
+ CurrentEL.EL 0x2
13441
+ CurrentEL.EL 0x3
13442
13442
....
13443
13443
13444
13444
==== svc
0 commit comments