changes the io_buf
This commit is contained in:
parent
f4718c6de3
commit
aaebeaf023
@ -314,11 +314,16 @@ inline void write_reg_uint32(uint64_t offs, uint32_t& reg, const uint8_t* const
|
|||||||
}
|
}
|
||||||
struct riscv_hart_common {
|
struct riscv_hart_common {
|
||||||
riscv_hart_common(){};
|
riscv_hart_common(){};
|
||||||
~riscv_hart_common(){};
|
~riscv_hart_common() {
|
||||||
|
if(io_buf.str().length()) {
|
||||||
|
CPPLOG(INFO) << "tohost send '" << io_buf.str() << "'";
|
||||||
|
}
|
||||||
|
};
|
||||||
std::unordered_map<std::string, uint64_t> symbol_table;
|
std::unordered_map<std::string, uint64_t> symbol_table;
|
||||||
uint64_t entry_address{0};
|
uint64_t entry_address{0};
|
||||||
uint64_t tohost = std::numeric_limits<uint64_t>::max();
|
uint64_t tohost = std::numeric_limits<uint64_t>::max();
|
||||||
uint64_t fromhost = std::numeric_limits<uint64_t>::max();
|
uint64_t fromhost = std::numeric_limits<uint64_t>::max();
|
||||||
|
std::stringstream io_buf;
|
||||||
|
|
||||||
bool read_elf_file(std::string name, uint8_t expected_elf_class,
|
bool read_elf_file(std::string name, uint8_t expected_elf_class,
|
||||||
std::function<iss::status(uint64_t, uint64_t, const uint8_t* const)> cb) {
|
std::function<iss::status(uint64_t, uint64_t, const uint8_t* const)> cb) {
|
||||||
@ -378,7 +383,6 @@ struct riscv_hart_common {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
iss::status execute_sys_write(arch_if* aif, const std::array<uint64_t, 8>& loaded_payload, unsigned mem_type) {
|
iss::status execute_sys_write(arch_if* aif, const std::array<uint64_t, 8>& loaded_payload, unsigned mem_type) {
|
||||||
std::stringstream io_buf;
|
|
||||||
uint64_t fd = loaded_payload[1];
|
uint64_t fd = loaded_payload[1];
|
||||||
uint64_t buf_ptr = loaded_payload[2];
|
uint64_t buf_ptr = loaded_payload[2];
|
||||||
uint64_t len = loaded_payload[3];
|
uint64_t len = loaded_payload[3];
|
||||||
@ -389,15 +393,13 @@ struct riscv_hart_common {
|
|||||||
}
|
}
|
||||||
// we disregard the fd and just log to stdout
|
// we disregard the fd and just log to stdout
|
||||||
for(size_t i = 0; i < len; i++) {
|
for(size_t i = 0; i < len; i++) {
|
||||||
if(buf[i] == '\n') {
|
if(buf[i] == '\n' || buf[i] == '\0') {
|
||||||
CPPLOG(INFO) << "tohost send '" << io_buf.str() << "'";
|
CPPLOG(INFO) << "tohost send '" << io_buf.str() << "'";
|
||||||
io_buf.str("");
|
io_buf.str("");
|
||||||
} else
|
} else
|
||||||
io_buf << buf[i];
|
io_buf << buf[i];
|
||||||
}
|
}
|
||||||
if(io_buf.str().length()) {
|
|
||||||
CPPLOG(INFO) << "tohost send '" << io_buf.str() << "'";
|
|
||||||
}
|
|
||||||
// Not sure what the correct return value should be
|
// Not sure what the correct return value should be
|
||||||
uint8_t ret_val = 1;
|
uint8_t ret_val = 1;
|
||||||
if(fromhost != std::numeric_limits<uint64_t>::max())
|
if(fromhost != std::numeric_limits<uint64_t>::max())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user