diff options
author | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-02-14 00:42:42 +0100 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2019-02-14 00:42:42 +0100 |
commit | 4392124e26e699df38cf34dbbac6baeaa243271c (patch) | |
tree | 88c76aa34f0c3a15bc6eaaf00a37ccaaffc2db9e /qtmips_osemu/ossyscall.h | |
parent | 0916bef42e28218b08b05342d5b571b8a45afb5a (diff) | |
download | qtmips-4392124e26e699df38cf34dbbac6baeaa243271c.tar.gz qtmips-4392124e26e699df38cf34dbbac6baeaa243271c.tar.bz2 qtmips-4392124e26e699df38cf34dbbac6baeaa243271c.zip |
Implemented sys_set_thread_area and sys_writev syscalls.
The example Linux program compiled against musl library
reaches main and displays printf output.
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Diffstat (limited to 'qtmips_osemu/ossyscall.h')
-rw-r--r-- | qtmips_osemu/ossyscall.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/qtmips_osemu/ossyscall.h b/qtmips_osemu/ossyscall.h index f2c8137..3897327 100644 --- a/qtmips_osemu/ossyscall.h +++ b/qtmips_osemu/ossyscall.h @@ -47,6 +47,13 @@ namespace osemu { +#define OSSYCALL_HANDLER_DECLARE(name) \ +int name(std::uint32_t &result, machine::Core *core, \ + std::uint32_t syscall_num, \ + std::uint32_t a1, std::uint32_t a2, std::uint32_t a3, \ + std::uint32_t a4, std::uint32_t a5, std::uint32_t a6, \ + std::uint32_t a7, std::uint32_t a8) + class OsSyscallExceptionHandler : public machine::ExceptionHandler { Q_OBJECT public: @@ -54,14 +61,13 @@ public: machine::ExceptionCause excause, std::uint32_t inst_addr, std::uint32_t next_addr, std::uint32_t jump_branch_pc, bool in_delay_slot, std::uint32_t mem_ref_addr); - int syscall_default_handler(std::uint32_t &result, machine::Core *core, - std::uint32_t syscall_num, - std::uint32_t a1, std::uint32_t a2, std::uint32_t a3, - std::uint32_t a4, std::uint32_t a5, std::uint32_t a6, - std::uint32_t a7, std::uint32_t a8); - + OSSYCALL_HANDLER_DECLARE(syscall_default_handler); + OSSYCALL_HANDLER_DECLARE(do_sys_set_thread_area); + OSSYCALL_HANDLER_DECLARE(do_sys_writev); }; +#undef OSSYCALL_HANDLER_DECLARE + } #endif // OSSYCALL_H |