aboutsummaryrefslogtreecommitdiff
path: root/qtmips_osemu/ossyscall.h
diff options
context:
space:
mode:
authorPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-14 00:42:42 +0100
committerPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-14 00:42:42 +0100
commit4392124e26e699df38cf34dbbac6baeaa243271c (patch)
tree88c76aa34f0c3a15bc6eaaf00a37ccaaffc2db9e /qtmips_osemu/ossyscall.h
parent0916bef42e28218b08b05342d5b571b8a45afb5a (diff)
downloadqtmips-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.h18
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