|
ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
|
#include <cstdio>#include "etiss/ETISS.h"#include <iomanip>#include "SemihostingCalls.h"#include "etiss/jit/ReturnCode.h"#include "libsemihost.h"
Go to the source code of this file.
Macros | |
| #define | TICKER_FREQ 1000 |
| #define | SYS_OPEN_MODES_TOTAL 12 |
| #define | SYS_OPEN_MODES_IN_LIMIT 4 |
| #define | SYS_OPEN_MODES_OUT_LIMIT 8 |
| #define | PS_PER_CS 10000000000 |
| #define | CHECK_NEGATIVE_RETURN(var) |
| #define | FIELD(fieldNo) semihostReadStructField(etissSystem, XLEN / 8, parameter, fieldNo); |
Functions | |
| etiss_int64 | semihostingCall (ETISS_CPU *const cpu, ETISS_System *const etissSystem, etiss_uint32 XLEN, etiss_uint64 operationNumber, etiss_uint64 parameter) |
| Executes the semihosting call based on the operation number. | |
| uint8_t | etiss_semihost_enabled () |
| Checks whether semihosting is enabled in the config. | |
| int64_t | etiss_semihost (ETISS_CPU *const cpu, ETISS_System *const etissSystem, void *const *const _, uint32_t XLEN, uint64_t operation, uint64_t parameter) |
| Executes the semihosting call based on the operation number. | |
| etiss_uint64 | semihostReadStructField (ETISS_System *etissSystem, etiss_uint32 numBytes, etiss_uint64 address, int fieldNo) |
| Assumes there is an array of numBytes long integers at address. | |
| std::vector< etiss_uint8 > | semihostReadSystemMemory (ETISS_System *etissSystem, etiss_uint64 address, etiss_uint64 length) |
| helper for reading a std::vector of bytes by address and length from an etiss system | |
| void | semihostWriteSystemMemory (ETISS_System *etissSystem, etiss_uint64 address, std::vector< etiss_uint8 > data) |
| helper for writing a std::vector of bytes to an etiss system | |
| std::string | semihostReadString (ETISS_System *etissSystem, etiss_uint64 address, etiss_uint64 length) |
| helper for reading a std::string by address and length from an etiss system | |
| void | semihostWriteString (ETISS_System *etissSystem, etiss_uint64 address, std::string str) |
| helper for writing a std::string to an etiss system | |
| bool | is_std_in_out_err (FILE *file) |
Variables | |
| const char * | SYS_OPEN_MODES_STRS [] = { "r", "rb", "r+", "r+b", "w", "wb", "w+", "w+b", "a", "ab", "a+", "a+b" } |
| #define CHECK_NEGATIVE_RETURN | ( | var | ) |
Definition at line 31 of file semihost.cpp.
| #define FIELD | ( | fieldNo | ) | semihostReadStructField(etissSystem, XLEN / 8, parameter, fieldNo); |
Definition at line 39 of file semihost.cpp.
| #define PS_PER_CS 10000000000 |
Definition at line 28 of file semihost.cpp.
| #define SYS_OPEN_MODES_IN_LIMIT 4 |
Definition at line 25 of file semihost.cpp.
| #define SYS_OPEN_MODES_OUT_LIMIT 8 |
Definition at line 26 of file semihost.cpp.
| #define SYS_OPEN_MODES_TOTAL 12 |
Definition at line 24 of file semihost.cpp.
| #define TICKER_FREQ 1000 |
Definition at line 20 of file semihost.cpp.
| int64_t etiss_semihost | ( | ETISS_CPU *const | cpu, |
| ETISS_System *const | etissSystem, | ||
| void *const *const | _, | ||
| uint32_t | XLEN, | ||
| uint64_t | operation, | ||
| uint64_t | parameter | ||
| ) |
Executes the semihosting call based on the operation number.
For description of all semihosting calls see: https://github.com/ARM-software/abi-aa/blob/main/semihosting/semihosting.rst
Definition at line 56 of file semihost.cpp.
References semihostingCall().

| uint8_t etiss_semihost_enabled | ( | ) |
Checks whether semihosting is enabled in the config.
Definition at line 51 of file semihost.cpp.
References etiss::cfg(), and etiss::Configuration::get().

| bool is_std_in_out_err | ( | FILE * | file | ) |
Definition at line 127 of file semihost.cpp.
Referenced by semihostingCall().

| etiss_int64 semihostingCall | ( | ETISS_CPU *const | cpu, |
| ETISS_System *const | etissSystem, | ||
| etiss_uint32 | XLEN, | ||
| etiss_uint64 | operationNumber, | ||
| etiss_uint64 | parameter | ||
| ) |
Executes the semihosting call based on the operation number.
For description of all semihosting calls see: https://github.com/ARM-software/abi-aa/blob/main/semihosting/semihosting.rst
openFiles maps target file descriptors (uint) to host file descriptors (FILE *).
next target file descriptor to be allocated. starts at 0 for first target fd (stdin)
Local errno variable to set in semihosting functions and return using SYS_ERRNO
Definition at line 132 of file semihost.cpp.
References c, CHECK_NEGATIVE_RETURN, ETISS_CPU::cpuTime_ps, ETISS_CPU::exception, FIELD, etiss::INFO, is_std_in_out_err(), length(), etiss::log(), PS_PER_CS, ETISS_CPU::return_pending, semihostReadString(), semihostReadStructField(), semihostReadSystemMemory(), semihostWriteString(), semihostWriteSystemMemory(), SYS_CLOCK, SYS_CLOSE, SYS_ELAPSED, SYS_ERRNO, SYS_EXIT, SYS_EXIT_EXTENDED, SYS_FLEN, SYS_GET_CMDLINE, SYS_HEAPINFO, SYS_ISERROR, SYS_ISTTY, SYS_OPEN, SYS_OPEN_MODES_IN_LIMIT, SYS_OPEN_MODES_OUT_LIMIT, SYS_OPEN_MODES_STRS, SYS_OPEN_MODES_TOTAL, SYS_READ, SYS_READC, SYS_REMOVE, SYS_RENAME, SYS_SEEK, SYS_SYSTEM, SYS_TICKFREQ, SYS_TIME, SYS_TMPNAM, SYS_WRITE, SYS_WRITE0, SYS_WRITEC, TICKER_FREQ, etiss::VERBOSE, and etiss::WARNING.
Referenced by etiss_semihost().


| std::string semihostReadString | ( | ETISS_System * | etissSystem, |
| etiss_uint64 | address, | ||
| etiss_uint64 | length | ||
| ) |
helper for reading a std::string by address and length from an etiss system
Definition at line 114 of file semihost.cpp.
References length(), and semihostReadSystemMemory().
Referenced by semihostingCall().


| etiss_uint64 semihostReadStructField | ( | ETISS_System * | etissSystem, |
| etiss_uint32 | numBytes, | ||
| etiss_uint64 | address, | ||
| int | fieldNo | ||
| ) |
Assumes there is an array of numBytes long integers at address.
Reads the filedNo-th field of this array an returns it as a uint64 (0-indexed)
Definition at line 66 of file semihost.cpp.
References ETISS_System::dbg_read, etiss::ERROR, ETISS_System::handle, and etiss::log().
Referenced by semihostingCall().


| std::vector< etiss_uint8 > semihostReadSystemMemory | ( | ETISS_System * | etissSystem, |
| etiss_uint64 | address, | ||
| etiss_uint64 | length | ||
| ) |
helper for reading a std::vector of bytes by address and length from an etiss system
Definition at line 99 of file semihost.cpp.
References ETISS_System::dbg_read, ETISS_System::handle, and length().
Referenced by semihostingCall(), and semihostReadString().


| void semihostWriteString | ( | ETISS_System * | etissSystem, |
| etiss_uint64 | address, | ||
| std::string | str | ||
| ) |
helper for writing a std::string to an etiss system
Definition at line 122 of file semihost.cpp.
References ETISS_System::dbg_write, and ETISS_System::handle.
Referenced by semihostingCall().

| void semihostWriteSystemMemory | ( | ETISS_System * | etissSystem, |
| etiss_uint64 | address, | ||
| std::vector< etiss_uint8 > | data | ||
| ) |
helper for writing a std::vector of bytes to an etiss system
Definition at line 108 of file semihost.cpp.
References ETISS_System::dbg_write, and ETISS_System::handle.
Referenced by semihostingCall().

| const char* SYS_OPEN_MODES_STRS[] = { "r", "rb", "r+", "r+b", "w", "wb", "w+", "w+b", "a", "ab", "a+", "a+b" } |
Definition at line 23 of file semihost.cpp.
Referenced by semihostingCall().