u‐boot vectors - MarekBykowski/readme GitHub Wiki

Break at vectors

hbreak -p mb_vectors

vectors is a global variable. It is written to X0 (adr X0, vectors in arch/arm/cpu/armv8/start.S). Advance to execute the instruction and then read on the X0

info registers x0
print /x $x0

Save the x0 as it will get clobbered soon.

newvar $vectors = $x0 

image

vectors has 16 entries, with each entry being 128 bytes (32 instructions) in size. The table effectively consists of 4 sets of 4 entries. The four entries are at

newvar $current_el_with_sp0 = $vectors
newvar $current_el_with_spx = $vectors +0x200
newvar $lower_el_using_aarch64 = $vectors +0x400
newvar $lower_el_using_aarch32 = $vectors +0x600

Show assembly at each of the four sets

disassemble $current_el_with_sp0 +0x200
disassemble $current_el_with_spx +0x200
disassemble $lower_el_using_aarch64 +0x200
disassemble $lower_el_using_aarch32 +0x200

eg

  • show assembly at set 1, entry 2 current EL with SP0 -> IRQ
newvar $current_el_with_sp0_irq = $current_el_with_sp0 + 0x80
disassemble $current_el_with_sp0_irq +128
  • show assembly at set 1, entry 2 current EL with SP0 -> IRQ
newvar $current_el_with_spx_irq = $current_el_with_spx + 0x80
disassemble $current_el_with_spx_irq +128

TODO:

  • add smc call to generate Sync Excpetion.