1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 18:35:09 +00:00

UserspaceEmulator: Implement clock_settime syscall

This commit is contained in:
Brendan Coles 2021-01-10 16:00:34 +00:00 committed by Andreas Kling
parent 700f213011
commit b53664a8ef
2 changed files with 11 additions and 0 deletions

View file

@ -508,6 +508,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
return virt$gettimeofday(arg1); return virt$gettimeofday(arg1);
case SC_clock_gettime: case SC_clock_gettime:
return virt$clock_gettime(arg1, arg2); return virt$clock_gettime(arg1, arg2);
case SC_clock_settime:
return virt$clock_settime(arg1, arg2);
case SC_getrandom: case SC_getrandom:
return virt$getrandom(arg1, arg2, arg3); return virt$getrandom(arg1, arg2, arg3);
case SC_fork: case SC_fork:
@ -767,6 +769,14 @@ int Emulator::virt$clock_gettime(int clockid, FlatPtr timespec)
return rc; return rc;
} }
int Emulator::virt$clock_settime(uint32_t clock_id, FlatPtr user_ts)
{
struct timespec user_timespec;
mmu().copy_from_vm(&user_timespec, user_ts, sizeof(user_timespec));
int rc = syscall(SC_clock_settime, clock_id, &user_timespec);
return rc;
}
int Emulator::virt$set_mmap_name(FlatPtr) int Emulator::virt$set_mmap_name(FlatPtr)
{ {
// FIXME: Implement. // FIXME: Implement.

View file

@ -135,6 +135,7 @@ private:
int virt$chmod(FlatPtr, size_t, mode_t); int virt$chmod(FlatPtr, size_t, mode_t);
int virt$fchmod(int, mode_t); int virt$fchmod(int, mode_t);
int virt$fchown(int, uid_t, gid_t); int virt$fchown(int, uid_t, gid_t);
int virt$clock_settime(uint32_t clock_id, FlatPtr user_ts);
int virt$listen(int, int); int virt$listen(int, int);
int virt$kill(pid_t, int); int virt$kill(pid_t, int);
int virt$fstat(int, FlatPtr); int virt$fstat(int, FlatPtr);