Ich bin verwirrt über die RISC-V ABI Register-Namen. Zum Beispiel gibt Tabelle 18.2 im "RISC-V Befehlssatzhandbuch, Band I: Benutzer-ISA, Version 2.0" auf Seite 85 an, dass der Stapelzeiger sp
register x14
ist. Jedoch die Anweisung
wird von riscv64-unknown-elf-as nach 0x00000113 kompiliert ( -m32
macht keinen Unterschied). In Binär:
Also hier scheint sp
x2
zu sein. Dann habe ich ein bisschen gegoogelt und das RISC-V Linux Benutzerhandbuch gefunden. In diesem Dokument wird angegeben, dass sp
ist x30
.
Also, was ist es? Gibt es verschiedene ABIs? Kann ich den ABI mit einer Befehlszeilenoption auf riscv64-unknown-elf-*
setzen? Gibt es irgendwo einen umfassenden Tisch?
Der Stapelzeiger ist jetzt x2
.
Hier ist die aktuelle ABI Dokumentation, die aus der ISA-Spezifikation auf Benutzerebene entfernt wurde und nun denselben Link enthält.
Die ABI wurde modifiziert, um besser der neuen RISC-V-komprimierten Spezifikation zu entsprechen, die die acht meistverwendeten Register in x8-x15 nebeneinander platziert.
Hinweis: trauen keiner ANY riscv.org-Webseite zu. Quan Nguyen stellt in seiner Einführung klar, dass das "RISC-V Linux User Manual" den Portierungsprozess dokumentiert und dass die Genauigkeit NICHT garantiert ist.
Tags und Links riscv