mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:47:35 +00:00
UserspaceEmulator: Add support for SC_uname and SC_sysconf syscalls
This commit is contained in:
parent
61d9082da6
commit
1e48cd35a1
2 changed files with 20 additions and 0 deletions
|
@ -148,6 +148,7 @@ private:
|
||||||
int virt$purge(int mode);
|
int virt$purge(int mode);
|
||||||
u32 virt$mmap(u32);
|
u32 virt$mmap(u32);
|
||||||
FlatPtr virt$mremap(FlatPtr);
|
FlatPtr virt$mremap(FlatPtr);
|
||||||
|
u32 virt$sysconf(u32 name);
|
||||||
u32 virt$mount(u32);
|
u32 virt$mount(u32);
|
||||||
u32 virt$munmap(FlatPtr address, size_t size);
|
u32 virt$munmap(FlatPtr address, size_t size);
|
||||||
u32 virt$gettid();
|
u32 virt$gettid();
|
||||||
|
@ -231,6 +232,7 @@ private:
|
||||||
int virt$beep();
|
int virt$beep();
|
||||||
int virt$ftruncate(int fd, FlatPtr length_addr);
|
int virt$ftruncate(int fd, FlatPtr length_addr);
|
||||||
mode_t virt$umask(mode_t);
|
mode_t virt$umask(mode_t);
|
||||||
|
int virt$uname(FlatPtr params_addr);
|
||||||
int virt$anon_create(size_t, int);
|
int virt$anon_create(size_t, int);
|
||||||
int virt$recvfd(int, int);
|
int virt$recvfd(int, int);
|
||||||
int virt$sendfd(int, int);
|
int virt$sendfd(int, int);
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
#include <syscall.h>
|
#include <syscall.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
|
|
||||||
|
@ -94,6 +95,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
return virt$mremap(arg1);
|
return virt$mremap(arg1);
|
||||||
case SC_gettid:
|
case SC_gettid:
|
||||||
return virt$gettid();
|
return virt$gettid();
|
||||||
|
case SC_sysconf:
|
||||||
|
return virt$sysconf(arg1);
|
||||||
case SC_getpid:
|
case SC_getpid:
|
||||||
return virt$getpid();
|
return virt$getpid();
|
||||||
case SC_getsid:
|
case SC_getsid:
|
||||||
|
@ -246,6 +249,8 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
|
||||||
return virt$ftruncate(arg1, arg2);
|
return virt$ftruncate(arg1, arg2);
|
||||||
case SC_umask:
|
case SC_umask:
|
||||||
return virt$umask(arg1);
|
return virt$umask(arg1);
|
||||||
|
case SC_uname:
|
||||||
|
return virt$uname(arg1);
|
||||||
case SC_chown:
|
case SC_chown:
|
||||||
return virt$chown(arg1);
|
return virt$chown(arg1);
|
||||||
case SC_msyscall:
|
case SC_msyscall:
|
||||||
|
@ -487,6 +492,14 @@ int Emulator::virt$ftruncate(int fd, FlatPtr length_addr)
|
||||||
return syscall(SC_ftruncate, fd, &length);
|
return syscall(SC_ftruncate, fd, &length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Emulator::virt$uname(FlatPtr params_addr)
|
||||||
|
{
|
||||||
|
struct utsname local_uname;
|
||||||
|
auto rc = syscall(SC_uname, &local_uname);
|
||||||
|
mmu().copy_to_vm(params_addr, &local_uname, sizeof(local_uname));
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
mode_t Emulator::virt$umask(mode_t mask)
|
mode_t Emulator::virt$umask(mode_t mask)
|
||||||
{
|
{
|
||||||
return syscall(SC_umask, mask);
|
return syscall(SC_umask, mask);
|
||||||
|
@ -1596,6 +1609,11 @@ int Emulator::virt$beep()
|
||||||
return syscall(SC_beep);
|
return syscall(SC_beep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 Emulator::virt$sysconf(u32 name)
|
||||||
|
{
|
||||||
|
return syscall(SC_sysconf, name);
|
||||||
|
}
|
||||||
|
|
||||||
int Emulator::virt$msyscall(FlatPtr)
|
int Emulator::virt$msyscall(FlatPtr)
|
||||||
{
|
{
|
||||||
// FIXME: Implement this.
|
// FIXME: Implement this.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue