mortbopet / Ripes

A graphical processor simulator and assembly editor for the RISC-V ISA
https://ripes.me/
MIT License
2.49k stars 270 forks source link

Add CLI Support for Executing ELF and C Files #348

Closed federicovilla55 closed 4 months ago

federicovilla55 commented 5 months ago

In the Command Line Interface mode, although the possible execution file types are c, asm, bin (as shown by the command-line option --t), it is not possible to simulate C programs.

int Ripes::CLIRunner::processInput(): Assertion `false && "Command-line support for this source type is not yet implemented"' failed.
Aborted (core dumped)

This has been fixed with the possibility to execute RISC-V ELF files too.

In the clirunner.cpp file I've added the logic to load three new source types: C, InternalELF and ExternalELF. For an ELF file first a check is done to be sure that the specified file is valid for the selected processor and then the file is loaded with the method loadElfFile. I moved this method to the programutilities.cpp file, following what was done for loading binary files with the method loadFlatBinaryFile. The function was moved so that it can be used both by CLI and GUI.

To execute C programs first they are compiled using the already existing methods (such as compileRaw() from ccmanager.cpp), then they are converted as ExternalELF and loaded as mentioned above.

Since I've noticed that running CLI programs can sometimes have problems with large addresses (that cannot fit in an int variable), I've changed the type of the byteAddress variable to long. (Fixing #266)