summaryrefslogtreecommitdiffstats
path: root/src/include/sys/syscall.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/sys/syscall.h')
-rw-r--r--src/include/sys/syscall.h23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/include/sys/syscall.h b/src/include/sys/syscall.h
index f0972e949..b3d435edf 100644
--- a/src/include/sys/syscall.h
+++ b/src/include/sys/syscall.h
@@ -23,13 +23,21 @@
#ifndef __SYS_SYSCALL_H
#define __SYS_SYSCALL_H
+/** @file syscall.h
+ * @brief Defines syscall wrapper functions to get C-caller to put syscall
+ * parameters in the correct spots for ABI so kernel can pull them
+ * from the right position in the task structs.
+ */
+
#ifdef __cplusplus
-extern "C"
+extern "C"
{
#endif
#include <stdint.h>
+#include <builtins.h>
+// Normal system calls.
void* _syscall0(uint64_t);
void* _syscall1(uint64_t, void*);
void* _syscall2(uint64_t, void*, void*);
@@ -39,6 +47,19 @@ void* _syscall5(uint64_t, void*, void*, void*, void*, void*);
void* _syscall6(uint64_t, void*, void*, void*, void*, void*, void*);
void* _syscall7(uint64_t, void*, void*, void*, void*, void*, void*, void*);
+// System calls which never return. Marked NO_RETURN so the compiler
+// can make additional optimizations.
+void* _syscall0_nr(uint64_t) NO_RETURN;
+void* _syscall1_nr(uint64_t, void*) NO_RETURN;
+void* _syscall2_nr(uint64_t, void*, void*) NO_RETURN;
+void* _syscall3_nr(uint64_t, void*, void*, void*) NO_RETURN;
+void* _syscall4_nr(uint64_t, void*, void*, void*, void*) NO_RETURN;
+void* _syscall5_nr(uint64_t, void*, void*, void*, void*, void*) NO_RETURN;
+void* _syscall6_nr(uint64_t, void*, void*, void*, void*, void*, void*)
+ NO_RETURN;
+void* _syscall7_nr(uint64_t, void*, void*, void*, void*, void*, void*, void*)
+ NO_RETURN;
+
#ifdef __cplusplus
}
#include <kernel/syscalls.H>
OpenPOWER on IntegriCloud