I nailed the Keystone SATP change bug on CVA6 after only 1.5 months of constant debugging:
I try to learn at least one RISC-V opcode a day to get more familiar. Today’s opcode was auipc
which stores to a register a PC-relative address from an immediate offset. The offset is given as number of pages.
It is e.g. used to set the gp
(which is mnemonic for x3
), which is the base address for global variables.
Not trying to teach anyone. Writing things down like this just works for my memory :-)