RISCV Runtime exeption at... address out of range?

1 Antwort

Wenn die Wortbreite 32 Bit ist und Adressen auch 32 Bit haben, dann sieht das soweit eigentlich nachvollziehbar aus.

Es wäre gut, wenn Du anhand der Adresse der Exception die zugehörige Instruktion identifizieren könntest.

  addi sp, sp, 8        # Stackpointer verschieben (zurrücksetzen)
  ret # return fertig

end:
  ret

Hat es einen spezifischen Grund, daß die end:-Marke nicht direkt nach dem addi steht?


BloedeFragenxD 
Beitragsersteller
 22.12.2024, 14:05

Runtime exception at 0x00400038: address out of range 0x7fbffffc

Go: execution terminated with errors.
Das ist die Exception. Der sp hat den wert 0x7fbffffc.

Ich bin auch Schritt für Schritt durchgegangen und vor der Exception hat sp den Wert: 0x7fbffff8
nach der Instruction: sw ra, 4(sp) hat ra dann eben 0x7fbffffc und das ist die Exception.
Ich kenne mich leider auch noch nicht so gut aus, vielleicht ist es ganz offensichtlich

KarlRanseierIII  22.12.2024, 15:43
@BloedeFragenxD

Das eine Rücksprungadresse auf dem Stack zu einer Exception führt ist soweit natürlich klar.

Die Frage ist also wie der Wert in ra kommt.

sw ra, 4(sp)

Würde ich lesen als, store word (return adress) at mem[sp+4]. Ich sehe nicht, warum die OP hier ra verändern sollte. Eigentlich sollten nur jal, ret und lw ra,... in Deinem Code überhaupt den Wert von ra ändern.