Improve syscall definitions
- Allow constant id specification - Define function signature in SYSCALL macro - Move implementation into src/kernel/syscalls/*.cpp
This commit is contained in:
17
src/kernel/syscalls/exit.cpp
Normal file
17
src/kernel/syscalls/exit.cpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
void
|
||||
exit(int64_t status)
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
log::debug(logs::syscall, "Process %d exiting with code %d", p->pid, status);
|
||||
|
||||
p->exit(status);
|
||||
s.schedule();
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
14
src/kernel/syscalls/getpid.cpp
Normal file
14
src/kernel/syscalls/getpid.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
pid_t
|
||||
getpid()
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
return p->pid;
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
14
src/kernel/syscalls/message.cpp
Normal file
14
src/kernel/syscalls/message.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
void
|
||||
message(const char *message)
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
log::info(logs::syscall, "Message[%d]: %s", p->pid, message);
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
14
src/kernel/syscalls/noop.cpp
Normal file
14
src/kernel/syscalls/noop.cpp
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
void
|
||||
noop()
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
log::debug(logs::syscall, "Process %d called noop syscall.", p->pid);
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
15
src/kernel/syscalls/pause.cpp
Normal file
15
src/kernel/syscalls/pause.cpp
Normal file
@@ -0,0 +1,15 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
void
|
||||
pause()
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
p->wait_on_signal(-1ull);
|
||||
s.schedule();
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
17
src/kernel/syscalls/sleep.cpp
Normal file
17
src/kernel/syscalls/sleep.cpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "log.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
namespace syscalls {
|
||||
|
||||
void
|
||||
sleep(uint64_t til)
|
||||
{
|
||||
auto &s = scheduler::get();
|
||||
auto *p = s.current();
|
||||
log::debug(logs::syscall, "Process %d sleeping until %d", p->pid, til);
|
||||
|
||||
p->wait_on_time(til);
|
||||
s.schedule();
|
||||
}
|
||||
|
||||
} // namespace syscalls
|
||||
Reference in New Issue
Block a user