This commit is contained in:
2025-12-03 06:13:57 +01:00
parent a4bf6ab8c8
commit 9d1abb21f1
4 changed files with 19 additions and 7 deletions

View File

@@ -61,9 +61,11 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2,
case Syscall::ID::SEM_SIGNAL: case Syscall::ID::SEM_SIGNAL:
Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1); Syscall::Skeleton::sem_signal(Guard::enter().vault(), p1);
break; break;
case Syscall::ID::SYS_GETPID:
return Syscall::Skeleton::getpid(Guard::enter().vault());
case Syscall::ID::SYS_EXIT: case Syscall::ID::SYS_EXIT:
Syscall::Skeleton::exit(Guard::enter().vault()); Syscall::Skeleton::exit(Guard::enter().vault());
return 0;
} }
return static_cast<size_t>(-1); return static_cast<size_t>(-1);

View File

@@ -9,6 +9,9 @@
void *operator new(size_t, void *); void *operator new(size_t, void *);
#include "../user/app1/appl.h"
extern Application apps[];
namespace Syscall { namespace Syscall {
namespace Skeleton { namespace Skeleton {
size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4, size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4,
@@ -20,8 +23,10 @@ size_t test(Vault &vault, size_t p1, size_t p2, size_t p3, size_t p4,
} }
int getpid(Vault &vault) { int getpid(Vault &vault) {
(void)vault; Thread *me = vault.scheduler.active();
return -1; unsigned id = 0;
while (&apps[id++] != me); // TODO find better pid source
return id;
} }
size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) { size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x, int y) {
@@ -45,6 +50,8 @@ size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size, int x,
} }
size_t read(Vault &vault, uint32_t id, void *buf, size_t len) { size_t read(Vault &vault, uint32_t id, void *buf, size_t len) {
(void)id;
size_t read_cnt = 0; size_t read_cnt = 0;
while(read_cnt <= len){ while(read_cnt <= len){
Key key; Key key;

View File

@@ -14,8 +14,8 @@ enum class ID : size_t {
SEM_DESTROY=5, SEM_DESTROY=5,
SEM_WAIT=6, SEM_WAIT=6,
SEM_SIGNAL=7, SEM_SIGNAL=7,
//SYS_GETPID=8, SYS_GETPID = 8,
SYS_EXIT= 9, SYS_EXIT = 9,
//SYS_KILL=10 //SYS_KILL=10
}; };
} // namespace Syscall } // namespace Syscall
@@ -59,6 +59,10 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2,
return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0); return sys_call(Syscall::ID::SEM_SIGNAL, fd, semid,0,0,0);
} }
[[gnu::always_inline]] static inline int sys_getpid(){
return sys_call(Syscall::ID::SYS_GETPID, 0,0,0,0,0);
}
[[gnu::always_inline]] static inline void sys_exit(){ [[gnu::always_inline]] static inline void sys_exit(){
sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0); sys_call(Syscall::ID::SYS_EXIT, 0, 0, 0, 0, 0);
} }

View File

@@ -20,8 +20,7 @@ void Application::action() { // NOLINT
//sys_test(1,2,3,4,5); //sys_test(1,2,3,4,5);
unsigned id = 0; unsigned id = sys_getpid();
while (&apps[id++] != this);
char text[] = "testX"; char text[] = "testX";
text[4] = 0x30+id; text[4] = 0x30+id;