diff options
author | Marcus Comstedt <marcus@mc.pp.se> | 2020-10-11 13:36:13 +0200 |
---|---|---|
committer | Marcus Comstedt <marcus@mc.pp.se> | 2020-11-07 15:03:58 +0100 |
commit | 8d09d845a7373cce52d3943f5dca1a2ac34a4f83 (patch) | |
tree | 65a8e157ac2c167c6b89d436c00fa8c12bdf6181 /fesvr/syscall.cc | |
parent | 641d7d03e6a8d822b720fcb1a19f261813c00c4a (diff) | |
download | riscv-isa-sim-8d09d845a7373cce52d3943f5dca1a2ac34a4f83.zip riscv-isa-sim-8d09d845a7373cce52d3943f5dca1a2ac34a4f83.tar.gz riscv-isa-sim-8d09d845a7373cce52d3943f5dca1a2ac34a4f83.tar.bz2 |
Implement support for big-endian targets
Diffstat (limited to 'fesvr/syscall.cc')
-rw-r--r-- | fesvr/syscall.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fesvr/syscall.cc b/fesvr/syscall.cc index f0bdd25..6feb13b 100644 --- a/fesvr/syscall.cc +++ b/fesvr/syscall.cc @@ -300,21 +300,21 @@ reg_t syscall_t::sys_getmainvars(reg_t pbuf, reg_t limit, reg_t a2, reg_t a3, re { std::vector<std::string> args = htif->target_args(); std::vector<uint64_t> words(args.size() + 3); - words[0] = to_le(args.size()); + words[0] = htif->to_target<uint64_t>(args.size()); words[args.size()+1] = 0; // argv[argc] = NULL words[args.size()+2] = 0; // envp[0] = NULL size_t sz = (args.size() + 3) * sizeof(words[0]); for (size_t i = 0; i < args.size(); i++) { - words[i+1] = to_le(sz + pbuf); + words[i+1] = htif->to_target<uint64_t>(sz + pbuf); sz += args[i].length() + 1; } std::vector<char> bytes(sz); memcpy(&bytes[0], &words[0], sizeof(words[0]) * words.size()); for (size_t i = 0; i < args.size(); i++) - strcpy(&bytes[from_le(words[i+1]) - pbuf], args[i].c_str()); + strcpy(&bytes[htif->from_target(words[i+1]) - pbuf], args[i].c_str()); if (bytes.size() > limit) return -ENOMEM; @@ -343,11 +343,11 @@ void syscall_t::dispatch(reg_t mm) reg_t magicmem[8]; memif->read(mm, sizeof(magicmem), magicmem); - reg_t n = from_le(magicmem[0]); + reg_t n = htif->from_target(magicmem[0]); if (n >= table.size() || !table[n]) throw std::runtime_error("bad syscall #" + std::to_string(n)); - magicmem[0] = to_le((this->*table[n])(from_le(magicmem[1]), from_le(magicmem[2]), from_le(magicmem[3]), from_le(magicmem[4]), from_le(magicmem[5]), from_le(magicmem[6]), from_le(magicmem[7]))); + magicmem[0] = htif->to_target((this->*table[n])(htif->from_target(magicmem[1]), htif->from_target(magicmem[2]), htif->from_target(magicmem[3]), htif->from_target(magicmem[4]), htif->from_target(magicmem[5]), htif->from_target(magicmem[6]), htif->from_target(magicmem[7]))); memif->write(mm, sizeof(magicmem), magicmem); } |