mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:17:45 +00:00
Kernel+LibC: Rename shared buffer syscalls to use a prefix
This feels a lot more consistent and Unixy: create_shared_buffer() => shbuf_create() share_buffer_with() => shbuf_allow_pid() share_buffer_globally() => shbuf_allow_all() get_shared_buffer() => shbuf_get() release_shared_buffer() => shbuf_release() seal_shared_buffer() => shbuf_seal() get_shared_buffer_size() => shbuf_get_size() Also, "shared_buffer_id" is shortened to "shbuf_id" all around.
This commit is contained in:
parent
8460d02651
commit
f72e5bbb17
36 changed files with 549 additions and 549 deletions
|
@ -3555,7 +3555,7 @@ void Process::disown_all_shared_buffers()
|
|||
shared_buffer->disown(m_pid);
|
||||
}
|
||||
|
||||
int Process::sys$create_shared_buffer(int size, void** buffer)
|
||||
int Process::sys$shbuf_create(int size, void** buffer)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
if (!size || size < 0)
|
||||
|
@ -3565,29 +3565,29 @@ int Process::sys$create_shared_buffer(int size, void** buffer)
|
|||
return -EFAULT;
|
||||
|
||||
LOCKER(shared_buffers().lock());
|
||||
static int s_next_shared_buffer_id;
|
||||
int shared_buffer_id = ++s_next_shared_buffer_id;
|
||||
auto shared_buffer = make<SharedBuffer>(shared_buffer_id, size);
|
||||
static int s_next_shbuf_id;
|
||||
int shbuf_id = ++s_next_shbuf_id;
|
||||
auto shared_buffer = make<SharedBuffer>(shbuf_id, size);
|
||||
shared_buffer->share_with(m_pid);
|
||||
|
||||
void* address = shared_buffer->ref_for_process_and_get_address(*this);
|
||||
copy_to_user(buffer, &address);
|
||||
ASSERT((int)shared_buffer->size() >= size);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Created shared buffer %d @ %p (%u bytes, vmobject is %u)\n", name().characters(), pid(), shared_buffer_id, buffer, size, shared_buffer->size());
|
||||
kprintf("%s(%u): Created shared buffer %d @ %p (%u bytes, vmobject is %u)\n", name().characters(), pid(), shbuf_id, buffer, size, shared_buffer->size());
|
||||
#endif
|
||||
shared_buffers().resource().set(shared_buffer_id, move(shared_buffer));
|
||||
shared_buffers().resource().set(shbuf_id, move(shared_buffer));
|
||||
|
||||
return shared_buffer_id;
|
||||
return shbuf_id;
|
||||
}
|
||||
|
||||
int Process::sys$share_buffer_with(int shared_buffer_id, pid_t peer_pid)
|
||||
int Process::sys$shbuf_allow_pid(int shbuf_id, pid_t peer_pid)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
if (!peer_pid || peer_pid < 0 || peer_pid == m_pid)
|
||||
return -EINVAL;
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
|
@ -3603,11 +3603,11 @@ int Process::sys$share_buffer_with(int shared_buffer_id, pid_t peer_pid)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$share_buffer_globally(int shared_buffer_id)
|
||||
int Process::sys$shbuf_allow_all(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
|
@ -3617,84 +3617,84 @@ int Process::sys$share_buffer_globally(int shared_buffer_id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$release_shared_buffer(int shared_buffer_id)
|
||||
int Process::sys$shbuf_release(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Releasing shared buffer %d, buffer count: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Releasing shared buffer %d, buffer count: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
shared_buffer.deref_for_process(*this);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* Process::sys$get_shared_buffer(int shared_buffer_id)
|
||||
void* Process::sys$shbuf_get(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return (void*)-EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return (void*)-EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Retaining shared buffer %d, buffer count: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Retaining shared buffer %d, buffer count: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
return shared_buffer.ref_for_process_and_get_address(*this);
|
||||
}
|
||||
|
||||
int Process::sys$seal_shared_buffer(int shared_buffer_id)
|
||||
int Process::sys$shbuf_seal(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Sealing shared buffer %d\n", name().characters(), pid(), shared_buffer_id);
|
||||
kprintf("%s(%u): Sealing shared buffer %d\n", name().characters(), pid(), shbuf_id);
|
||||
#endif
|
||||
shared_buffer.seal();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Process::sys$get_shared_buffer_size(int shared_buffer_id)
|
||||
int Process::sys$shbuf_get_size(int shbuf_id)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Get shared buffer %d size: %u\n", name().characters(), pid(), shared_buffer_id, shared_buffers().resource().size());
|
||||
kprintf("%s(%u): Get shared buffer %d size: %u\n", name().characters(), pid(), shbuf_id, shared_buffers().resource().size());
|
||||
#endif
|
||||
return shared_buffer.size();
|
||||
}
|
||||
|
||||
int Process::sys$set_shared_buffer_volatile(int shared_buffer_id, bool state)
|
||||
int Process::sys$shbuf_set_volatile(int shbuf_id, bool state)
|
||||
{
|
||||
REQUIRE_PROMISE(shared_buffer);
|
||||
LOCKER(shared_buffers().lock());
|
||||
auto it = shared_buffers().resource().find(shared_buffer_id);
|
||||
auto it = shared_buffers().resource().find(shbuf_id);
|
||||
if (it == shared_buffers().resource().end())
|
||||
return -EINVAL;
|
||||
auto& shared_buffer = *(*it).value;
|
||||
if (!shared_buffer.is_shared_with(m_pid))
|
||||
return -EPERM;
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("%s(%u): Set shared buffer %d volatile: %u\n", name().characters(), pid(), shared_buffer_id, state);
|
||||
kprintf("%s(%u): Set shared buffer %d volatile: %u\n", name().characters(), pid(), shbuf_id, state);
|
||||
#endif
|
||||
if (!state) {
|
||||
bool was_purged = shared_buffer.vmobject().was_purged();
|
||||
|
|
|
@ -273,14 +273,14 @@ public:
|
|||
int sys$rename(const Syscall::SC_rename_params*);
|
||||
int sys$systrace(pid_t);
|
||||
int sys$mknod(const Syscall::SC_mknod_params*);
|
||||
int sys$create_shared_buffer(int, void** buffer);
|
||||
int sys$share_buffer_with(int, pid_t peer_pid);
|
||||
int sys$share_buffer_globally(int);
|
||||
void* sys$get_shared_buffer(int shared_buffer_id);
|
||||
int sys$release_shared_buffer(int shared_buffer_id);
|
||||
int sys$seal_shared_buffer(int shared_buffer_id);
|
||||
int sys$get_shared_buffer_size(int shared_buffer_id);
|
||||
int sys$set_shared_buffer_volatile(int shared_buffer_id, bool);
|
||||
int sys$shbuf_create(int, void** buffer);
|
||||
int sys$shbuf_allow_pid(int, pid_t peer_pid);
|
||||
int sys$shbuf_allow_all(int);
|
||||
void* sys$shbuf_get(int shbuf_id);
|
||||
int sys$shbuf_release(int shbuf_id);
|
||||
int sys$shbuf_seal(int shbuf_id);
|
||||
int sys$shbuf_get_size(int shbuf_id);
|
||||
int sys$shbuf_set_volatile(int shbuf_id, bool);
|
||||
int sys$halt();
|
||||
int sys$reboot();
|
||||
int sys$set_process_icon(int icon_id);
|
||||
|
|
|
@ -46,7 +46,7 @@ void SharedBuffer::sanity_check(const char* what)
|
|||
found_refs += ref.count;
|
||||
|
||||
if (found_refs != m_total_refs) {
|
||||
dbg() << what << " sanity -- SharedBuffer{" << this << "} id: " << m_shared_buffer_id << " has total refs " << m_total_refs << " but we found " << found_refs;
|
||||
dbg() << what << " sanity -- SharedBuffer{" << this << "} id: " << m_shbuf_id << " has total refs " << m_total_refs << " but we found " << found_refs;
|
||||
for (const auto& ref : m_refs) {
|
||||
dbg() << " ref from pid " << ref.pid << ": refcnt " << ref.count;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ void SharedBuffer::share_with(pid_t peer_pid)
|
|||
return;
|
||||
for (auto& ref : m_refs) {
|
||||
if (ref.pid == peer_pid) {
|
||||
// don't increment the reference count yet; let them get_shared_buffer it first.
|
||||
// don't increment the reference count yet; let them shbuf_get it first.
|
||||
sanity_check("share_with (old ref)");
|
||||
return;
|
||||
}
|
||||
|
@ -129,12 +129,12 @@ void SharedBuffer::deref_for_process(Process& process)
|
|||
m_total_refs--;
|
||||
if (ref.count == 0) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Releasing shared buffer reference on " << m_shared_buffer_id << " of size " << size() << " by PID " << process.pid();
|
||||
dbg() << "Releasing shared buffer reference on " << m_shbuf_id << " of size " << size() << " by PID " << process.pid();
|
||||
#endif
|
||||
process.deallocate_region(*ref.region);
|
||||
m_refs.unstable_remove(i);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Released shared buffer reference on " << m_shared_buffer_id << " of size " << size() << " by PID " << process.pid();
|
||||
dbg() << "Released shared buffer reference on " << m_shbuf_id << " of size " << size() << " by PID " << process.pid();
|
||||
#endif
|
||||
sanity_check("deref_for_process");
|
||||
destroy_if_unused();
|
||||
|
@ -154,12 +154,12 @@ void SharedBuffer::disown(pid_t pid)
|
|||
auto& ref = m_refs[i];
|
||||
if (ref.pid == pid) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Disowning shared buffer " << m_shared_buffer_id << " of size " << size() << " by PID " << pid;
|
||||
dbg() << "Disowning shared buffer " << m_shbuf_id << " of size " << size() << " by PID " << pid;
|
||||
#endif
|
||||
m_total_refs -= ref.count;
|
||||
m_refs.unstable_remove(i);
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Disowned shared buffer " << m_shared_buffer_id << " of size " << size() << " by PID " << pid;
|
||||
dbg() << "Disowned shared buffer " << m_shbuf_id << " of size " << size() << " by PID " << pid;
|
||||
#endif
|
||||
destroy_if_unused();
|
||||
return;
|
||||
|
@ -173,10 +173,10 @@ void SharedBuffer::destroy_if_unused()
|
|||
sanity_check("destroy_if_unused");
|
||||
if (m_total_refs == 0) {
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
kprintf("Destroying unused SharedBuffer{%p} id: %d\n", this, m_shared_buffer_id);
|
||||
kprintf("Destroying unused SharedBuffer{%p} id: %d\n", this, m_shbuf_id);
|
||||
#endif
|
||||
auto count_before = shared_buffers().resource().size();
|
||||
shared_buffers().resource().remove(m_shared_buffer_id);
|
||||
shared_buffers().resource().remove(m_shbuf_id);
|
||||
ASSERT(count_before != shared_buffers().resource().size());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,18 +48,18 @@ private:
|
|||
|
||||
public:
|
||||
SharedBuffer(int id, int size)
|
||||
: m_shared_buffer_id(id)
|
||||
: m_shbuf_id(id)
|
||||
, m_vmobject(PurgeableVMObject::create_with_size(size))
|
||||
{
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Created shared buffer " << m_shared_buffer_id << " of size " << size;
|
||||
dbg() << "Created shared buffer " << m_shbuf_id << " of size " << size;
|
||||
#endif
|
||||
}
|
||||
|
||||
~SharedBuffer()
|
||||
{
|
||||
#ifdef SHARED_BUFFER_DEBUG
|
||||
dbg() << "Destroyed shared buffer " << m_shared_buffer_id << " of size " << size();
|
||||
dbg() << "Destroyed shared buffer " << m_shbuf_id << " of size " << size();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -75,9 +75,9 @@ public:
|
|||
void seal();
|
||||
PurgeableVMObject& vmobject() { return m_vmobject; }
|
||||
const PurgeableVMObject& vmobject() const { return m_vmobject; }
|
||||
int id() const { return m_shared_buffer_id; }
|
||||
int id() const { return m_shbuf_id; }
|
||||
|
||||
int m_shared_buffer_id { -1 };
|
||||
int m_shbuf_id { -1 };
|
||||
bool m_writable { true };
|
||||
bool m_global { false };
|
||||
NonnullRefPtr<PurgeableVMObject> m_vmobject;
|
||||
|
|
730
Kernel/Syscall.h
730
Kernel/Syscall.h
|
@ -42,161 +42,161 @@ typedef u32 socklen_t;
|
|||
|
||||
namespace Kernel {
|
||||
|
||||
#define ENUMERATE_SYSCALLS \
|
||||
__ENUMERATE_SYSCALL(sleep) \
|
||||
__ENUMERATE_SYSCALL(yield) \
|
||||
__ENUMERATE_SYSCALL(open) \
|
||||
__ENUMERATE_SYSCALL(close) \
|
||||
__ENUMERATE_SYSCALL(read) \
|
||||
__ENUMERATE_SYSCALL(lseek) \
|
||||
__ENUMERATE_SYSCALL(kill) \
|
||||
__ENUMERATE_SYSCALL(getuid) \
|
||||
__ENUMERATE_SYSCALL(exit) \
|
||||
__ENUMERATE_SYSCALL(getgid) \
|
||||
__ENUMERATE_SYSCALL(getpid) \
|
||||
__ENUMERATE_SYSCALL(waitid) \
|
||||
__ENUMERATE_SYSCALL(mmap) \
|
||||
__ENUMERATE_SYSCALL(munmap) \
|
||||
__ENUMERATE_SYSCALL(get_dir_entries) \
|
||||
__ENUMERATE_SYSCALL(getcwd) \
|
||||
__ENUMERATE_SYSCALL(gettimeofday) \
|
||||
__ENUMERATE_SYSCALL(gethostname) \
|
||||
__ENUMERATE_SYSCALL(chdir) \
|
||||
__ENUMERATE_SYSCALL(uname) \
|
||||
__ENUMERATE_SYSCALL(set_mmap_name) \
|
||||
__ENUMERATE_SYSCALL(readlink) \
|
||||
__ENUMERATE_SYSCALL(write) \
|
||||
__ENUMERATE_SYSCALL(ttyname_r) \
|
||||
__ENUMERATE_SYSCALL(stat) \
|
||||
__ENUMERATE_SYSCALL(getsid) \
|
||||
__ENUMERATE_SYSCALL(setsid) \
|
||||
__ENUMERATE_SYSCALL(getpgid) \
|
||||
__ENUMERATE_SYSCALL(setpgid) \
|
||||
__ENUMERATE_SYSCALL(getpgrp) \
|
||||
__ENUMERATE_SYSCALL(fork) \
|
||||
__ENUMERATE_SYSCALL(execve) \
|
||||
__ENUMERATE_SYSCALL(geteuid) \
|
||||
__ENUMERATE_SYSCALL(getegid) \
|
||||
__ENUMERATE_SYSCALL(getdtablesize) \
|
||||
__ENUMERATE_SYSCALL(dup) \
|
||||
__ENUMERATE_SYSCALL(dup2) \
|
||||
__ENUMERATE_SYSCALL(sigaction) \
|
||||
__ENUMERATE_SYSCALL(getppid) \
|
||||
__ENUMERATE_SYSCALL(umask) \
|
||||
__ENUMERATE_SYSCALL(getgroups) \
|
||||
__ENUMERATE_SYSCALL(setgroups) \
|
||||
__ENUMERATE_SYSCALL(sigreturn) \
|
||||
__ENUMERATE_SYSCALL(sigprocmask) \
|
||||
__ENUMERATE_SYSCALL(sigpending) \
|
||||
__ENUMERATE_SYSCALL(pipe) \
|
||||
__ENUMERATE_SYSCALL(killpg) \
|
||||
__ENUMERATE_SYSCALL(setuid) \
|
||||
__ENUMERATE_SYSCALL(setgid) \
|
||||
__ENUMERATE_SYSCALL(alarm) \
|
||||
__ENUMERATE_SYSCALL(fstat) \
|
||||
__ENUMERATE_SYSCALL(access) \
|
||||
__ENUMERATE_SYSCALL(fcntl) \
|
||||
__ENUMERATE_SYSCALL(ioctl) \
|
||||
__ENUMERATE_SYSCALL(mkdir) \
|
||||
__ENUMERATE_SYSCALL(times) \
|
||||
__ENUMERATE_SYSCALL(utime) \
|
||||
__ENUMERATE_SYSCALL(sync) \
|
||||
__ENUMERATE_SYSCALL(ptsname_r) \
|
||||
__ENUMERATE_SYSCALL(select) \
|
||||
__ENUMERATE_SYSCALL(unlink) \
|
||||
__ENUMERATE_SYSCALL(poll) \
|
||||
__ENUMERATE_SYSCALL(rmdir) \
|
||||
__ENUMERATE_SYSCALL(chmod) \
|
||||
__ENUMERATE_SYSCALL(usleep) \
|
||||
__ENUMERATE_SYSCALL(socket) \
|
||||
__ENUMERATE_SYSCALL(bind) \
|
||||
__ENUMERATE_SYSCALL(accept) \
|
||||
__ENUMERATE_SYSCALL(listen) \
|
||||
__ENUMERATE_SYSCALL(connect) \
|
||||
__ENUMERATE_SYSCALL(create_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(share_buffer_with) \
|
||||
__ENUMERATE_SYSCALL(get_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(release_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(link) \
|
||||
__ENUMERATE_SYSCALL(chown) \
|
||||
__ENUMERATE_SYSCALL(fchmod) \
|
||||
__ENUMERATE_SYSCALL(symlink) \
|
||||
__ENUMERATE_SYSCALL(get_shared_buffer_size) \
|
||||
__ENUMERATE_SYSCALL(seal_shared_buffer) \
|
||||
__ENUMERATE_SYSCALL(sendto) \
|
||||
__ENUMERATE_SYSCALL(recvfrom) \
|
||||
__ENUMERATE_SYSCALL(getsockopt) \
|
||||
__ENUMERATE_SYSCALL(setsockopt) \
|
||||
__ENUMERATE_SYSCALL(create_thread) \
|
||||
__ENUMERATE_SYSCALL(gettid) \
|
||||
__ENUMERATE_SYSCALL(donate) \
|
||||
__ENUMERATE_SYSCALL(rename) \
|
||||
__ENUMERATE_SYSCALL(ftruncate) \
|
||||
__ENUMERATE_SYSCALL(systrace) \
|
||||
__ENUMERATE_SYSCALL(exit_thread) \
|
||||
__ENUMERATE_SYSCALL(mknod) \
|
||||
__ENUMERATE_SYSCALL(writev) \
|
||||
__ENUMERATE_SYSCALL(beep) \
|
||||
__ENUMERATE_SYSCALL(getsockname) \
|
||||
__ENUMERATE_SYSCALL(getpeername) \
|
||||
__ENUMERATE_SYSCALL(sched_setparam) \
|
||||
__ENUMERATE_SYSCALL(sched_getparam) \
|
||||
__ENUMERATE_SYSCALL(fchown) \
|
||||
__ENUMERATE_SYSCALL(halt) \
|
||||
__ENUMERATE_SYSCALL(reboot) \
|
||||
__ENUMERATE_SYSCALL(mount) \
|
||||
__ENUMERATE_SYSCALL(umount) \
|
||||
__ENUMERATE_SYSCALL(dump_backtrace) \
|
||||
__ENUMERATE_SYSCALL(dbgputch) \
|
||||
__ENUMERATE_SYSCALL(dbgputstr) \
|
||||
__ENUMERATE_SYSCALL(watch_file) \
|
||||
__ENUMERATE_SYSCALL(share_buffer_globally) \
|
||||
__ENUMERATE_SYSCALL(set_process_icon) \
|
||||
__ENUMERATE_SYSCALL(mprotect) \
|
||||
__ENUMERATE_SYSCALL(realpath) \
|
||||
__ENUMERATE_SYSCALL(get_process_name) \
|
||||
__ENUMERATE_SYSCALL(fchdir) \
|
||||
__ENUMERATE_SYSCALL(getrandom) \
|
||||
__ENUMERATE_SYSCALL(setkeymap) \
|
||||
__ENUMERATE_SYSCALL(clock_gettime) \
|
||||
__ENUMERATE_SYSCALL(clock_nanosleep) \
|
||||
__ENUMERATE_SYSCALL(join_thread) \
|
||||
__ENUMERATE_SYSCALL(module_load) \
|
||||
__ENUMERATE_SYSCALL(module_unload) \
|
||||
__ENUMERATE_SYSCALL(detach_thread) \
|
||||
__ENUMERATE_SYSCALL(set_thread_name) \
|
||||
__ENUMERATE_SYSCALL(get_thread_name) \
|
||||
__ENUMERATE_SYSCALL(madvise) \
|
||||
__ENUMERATE_SYSCALL(purge) \
|
||||
__ENUMERATE_SYSCALL(set_shared_buffer_volatile) \
|
||||
__ENUMERATE_SYSCALL(profiling_enable) \
|
||||
__ENUMERATE_SYSCALL(profiling_disable) \
|
||||
__ENUMERATE_SYSCALL(get_kernel_info_page) \
|
||||
__ENUMERATE_SYSCALL(futex) \
|
||||
__ENUMERATE_SYSCALL(set_thread_boost) \
|
||||
__ENUMERATE_SYSCALL(set_process_boost) \
|
||||
__ENUMERATE_SYSCALL(chroot) \
|
||||
__ENUMERATE_SYSCALL(pledge) \
|
||||
__ENUMERATE_SYSCALL(unveil) \
|
||||
__ENUMERATE_SYSCALL(perf_event) \
|
||||
#define ENUMERATE_SYSCALLS \
|
||||
__ENUMERATE_SYSCALL(sleep) \
|
||||
__ENUMERATE_SYSCALL(yield) \
|
||||
__ENUMERATE_SYSCALL(open) \
|
||||
__ENUMERATE_SYSCALL(close) \
|
||||
__ENUMERATE_SYSCALL(read) \
|
||||
__ENUMERATE_SYSCALL(lseek) \
|
||||
__ENUMERATE_SYSCALL(kill) \
|
||||
__ENUMERATE_SYSCALL(getuid) \
|
||||
__ENUMERATE_SYSCALL(exit) \
|
||||
__ENUMERATE_SYSCALL(getgid) \
|
||||
__ENUMERATE_SYSCALL(getpid) \
|
||||
__ENUMERATE_SYSCALL(waitid) \
|
||||
__ENUMERATE_SYSCALL(mmap) \
|
||||
__ENUMERATE_SYSCALL(munmap) \
|
||||
__ENUMERATE_SYSCALL(get_dir_entries) \
|
||||
__ENUMERATE_SYSCALL(getcwd) \
|
||||
__ENUMERATE_SYSCALL(gettimeofday) \
|
||||
__ENUMERATE_SYSCALL(gethostname) \
|
||||
__ENUMERATE_SYSCALL(chdir) \
|
||||
__ENUMERATE_SYSCALL(uname) \
|
||||
__ENUMERATE_SYSCALL(set_mmap_name) \
|
||||
__ENUMERATE_SYSCALL(readlink) \
|
||||
__ENUMERATE_SYSCALL(write) \
|
||||
__ENUMERATE_SYSCALL(ttyname_r) \
|
||||
__ENUMERATE_SYSCALL(stat) \
|
||||
__ENUMERATE_SYSCALL(getsid) \
|
||||
__ENUMERATE_SYSCALL(setsid) \
|
||||
__ENUMERATE_SYSCALL(getpgid) \
|
||||
__ENUMERATE_SYSCALL(setpgid) \
|
||||
__ENUMERATE_SYSCALL(getpgrp) \
|
||||
__ENUMERATE_SYSCALL(fork) \
|
||||
__ENUMERATE_SYSCALL(execve) \
|
||||
__ENUMERATE_SYSCALL(geteuid) \
|
||||
__ENUMERATE_SYSCALL(getegid) \
|
||||
__ENUMERATE_SYSCALL(getdtablesize) \
|
||||
__ENUMERATE_SYSCALL(dup) \
|
||||
__ENUMERATE_SYSCALL(dup2) \
|
||||
__ENUMERATE_SYSCALL(sigaction) \
|
||||
__ENUMERATE_SYSCALL(getppid) \
|
||||
__ENUMERATE_SYSCALL(umask) \
|
||||
__ENUMERATE_SYSCALL(getgroups) \
|
||||
__ENUMERATE_SYSCALL(setgroups) \
|
||||
__ENUMERATE_SYSCALL(sigreturn) \
|
||||
__ENUMERATE_SYSCALL(sigprocmask) \
|
||||
__ENUMERATE_SYSCALL(sigpending) \
|
||||
__ENUMERATE_SYSCALL(pipe) \
|
||||
__ENUMERATE_SYSCALL(killpg) \
|
||||
__ENUMERATE_SYSCALL(setuid) \
|
||||
__ENUMERATE_SYSCALL(setgid) \
|
||||
__ENUMERATE_SYSCALL(alarm) \
|
||||
__ENUMERATE_SYSCALL(fstat) \
|
||||
__ENUMERATE_SYSCALL(access) \
|
||||
__ENUMERATE_SYSCALL(fcntl) \
|
||||
__ENUMERATE_SYSCALL(ioctl) \
|
||||
__ENUMERATE_SYSCALL(mkdir) \
|
||||
__ENUMERATE_SYSCALL(times) \
|
||||
__ENUMERATE_SYSCALL(utime) \
|
||||
__ENUMERATE_SYSCALL(sync) \
|
||||
__ENUMERATE_SYSCALL(ptsname_r) \
|
||||
__ENUMERATE_SYSCALL(select) \
|
||||
__ENUMERATE_SYSCALL(unlink) \
|
||||
__ENUMERATE_SYSCALL(poll) \
|
||||
__ENUMERATE_SYSCALL(rmdir) \
|
||||
__ENUMERATE_SYSCALL(chmod) \
|
||||
__ENUMERATE_SYSCALL(usleep) \
|
||||
__ENUMERATE_SYSCALL(socket) \
|
||||
__ENUMERATE_SYSCALL(bind) \
|
||||
__ENUMERATE_SYSCALL(accept) \
|
||||
__ENUMERATE_SYSCALL(listen) \
|
||||
__ENUMERATE_SYSCALL(connect) \
|
||||
__ENUMERATE_SYSCALL(shbuf_create) \
|
||||
__ENUMERATE_SYSCALL(shbuf_allow_pid) \
|
||||
__ENUMERATE_SYSCALL(shbuf_get) \
|
||||
__ENUMERATE_SYSCALL(shbuf_release) \
|
||||
__ENUMERATE_SYSCALL(link) \
|
||||
__ENUMERATE_SYSCALL(chown) \
|
||||
__ENUMERATE_SYSCALL(fchmod) \
|
||||
__ENUMERATE_SYSCALL(symlink) \
|
||||
__ENUMERATE_SYSCALL(shbuf_get_size) \
|
||||
__ENUMERATE_SYSCALL(shbuf_seal) \
|
||||
__ENUMERATE_SYSCALL(sendto) \
|
||||
__ENUMERATE_SYSCALL(recvfrom) \
|
||||
__ENUMERATE_SYSCALL(getsockopt) \
|
||||
__ENUMERATE_SYSCALL(setsockopt) \
|
||||
__ENUMERATE_SYSCALL(create_thread) \
|
||||
__ENUMERATE_SYSCALL(gettid) \
|
||||
__ENUMERATE_SYSCALL(donate) \
|
||||
__ENUMERATE_SYSCALL(rename) \
|
||||
__ENUMERATE_SYSCALL(ftruncate) \
|
||||
__ENUMERATE_SYSCALL(systrace) \
|
||||
__ENUMERATE_SYSCALL(exit_thread) \
|
||||
__ENUMERATE_SYSCALL(mknod) \
|
||||
__ENUMERATE_SYSCALL(writev) \
|
||||
__ENUMERATE_SYSCALL(beep) \
|
||||
__ENUMERATE_SYSCALL(getsockname) \
|
||||
__ENUMERATE_SYSCALL(getpeername) \
|
||||
__ENUMERATE_SYSCALL(sched_setparam) \
|
||||
__ENUMERATE_SYSCALL(sched_getparam) \
|
||||
__ENUMERATE_SYSCALL(fchown) \
|
||||
__ENUMERATE_SYSCALL(halt) \
|
||||
__ENUMERATE_SYSCALL(reboot) \
|
||||
__ENUMERATE_SYSCALL(mount) \
|
||||
__ENUMERATE_SYSCALL(umount) \
|
||||
__ENUMERATE_SYSCALL(dump_backtrace) \
|
||||
__ENUMERATE_SYSCALL(dbgputch) \
|
||||
__ENUMERATE_SYSCALL(dbgputstr) \
|
||||
__ENUMERATE_SYSCALL(watch_file) \
|
||||
__ENUMERATE_SYSCALL(shbuf_allow_all) \
|
||||
__ENUMERATE_SYSCALL(set_process_icon) \
|
||||
__ENUMERATE_SYSCALL(mprotect) \
|
||||
__ENUMERATE_SYSCALL(realpath) \
|
||||
__ENUMERATE_SYSCALL(get_process_name) \
|
||||
__ENUMERATE_SYSCALL(fchdir) \
|
||||
__ENUMERATE_SYSCALL(getrandom) \
|
||||
__ENUMERATE_SYSCALL(setkeymap) \
|
||||
__ENUMERATE_SYSCALL(clock_gettime) \
|
||||
__ENUMERATE_SYSCALL(clock_nanosleep) \
|
||||
__ENUMERATE_SYSCALL(join_thread) \
|
||||
__ENUMERATE_SYSCALL(module_load) \
|
||||
__ENUMERATE_SYSCALL(module_unload) \
|
||||
__ENUMERATE_SYSCALL(detach_thread) \
|
||||
__ENUMERATE_SYSCALL(set_thread_name) \
|
||||
__ENUMERATE_SYSCALL(get_thread_name) \
|
||||
__ENUMERATE_SYSCALL(madvise) \
|
||||
__ENUMERATE_SYSCALL(purge) \
|
||||
__ENUMERATE_SYSCALL(shbuf_set_volatile) \
|
||||
__ENUMERATE_SYSCALL(profiling_enable) \
|
||||
__ENUMERATE_SYSCALL(profiling_disable) \
|
||||
__ENUMERATE_SYSCALL(get_kernel_info_page) \
|
||||
__ENUMERATE_SYSCALL(futex) \
|
||||
__ENUMERATE_SYSCALL(set_thread_boost) \
|
||||
__ENUMERATE_SYSCALL(set_process_boost) \
|
||||
__ENUMERATE_SYSCALL(chroot) \
|
||||
__ENUMERATE_SYSCALL(pledge) \
|
||||
__ENUMERATE_SYSCALL(unveil) \
|
||||
__ENUMERATE_SYSCALL(perf_event) \
|
||||
__ENUMERATE_SYSCALL(shutdown)
|
||||
|
||||
namespace Syscall {
|
||||
|
||||
enum Function {
|
||||
enum Function {
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
#define __ENUMERATE_REMOVED_SYSCALL(x) SC_##x,
|
||||
#define __ENUMERATE_SYSCALL(x) SC_##x,
|
||||
ENUMERATE_SYSCALLS
|
||||
ENUMERATE_SYSCALLS
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
__Count
|
||||
};
|
||||
__Count
|
||||
};
|
||||
|
||||
inline constexpr const char* to_string(Function function)
|
||||
{
|
||||
switch (function) {
|
||||
inline constexpr const char* to_string(Function function)
|
||||
{
|
||||
switch (function) {
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
#define __ENUMERATE_REMOVED_SYSCALL(x) \
|
||||
|
@ -205,267 +205,267 @@ inline constexpr const char* to_string(Function function)
|
|||
#define __ENUMERATE_SYSCALL(x) \
|
||||
case SC_##x: \
|
||||
return #x;
|
||||
ENUMERATE_SYSCALLS
|
||||
ENUMERATE_SYSCALLS
|
||||
#undef __ENUMERATE_SYSCALL
|
||||
#undef __ENUMERATE_REMOVED_SYSCALL
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
#ifdef __serenity__
|
||||
struct StringArgument {
|
||||
const char* characters { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
struct StringArgument {
|
||||
const char* characters { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
|
||||
template<typename DataType, typename SizeType>
|
||||
struct MutableBufferArgument {
|
||||
DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
template<typename DataType, typename SizeType>
|
||||
struct MutableBufferArgument {
|
||||
DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
|
||||
template<typename DataType, typename SizeType>
|
||||
struct ImmutableBufferArgument {
|
||||
const DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
template<typename DataType, typename SizeType>
|
||||
struct ImmutableBufferArgument {
|
||||
const DataType* data { nullptr };
|
||||
SizeType size { 0 };
|
||||
};
|
||||
|
||||
struct StringListArgument {
|
||||
StringArgument* strings { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
struct StringListArgument {
|
||||
StringArgument* strings { nullptr };
|
||||
size_t length { 0 };
|
||||
};
|
||||
|
||||
struct SC_mmap_params {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
uint32_t alignment;
|
||||
int32_t prot;
|
||||
int32_t flags;
|
||||
int32_t fd;
|
||||
int32_t offset; // FIXME: 64-bit off_t?
|
||||
StringArgument name;
|
||||
};
|
||||
struct SC_mmap_params {
|
||||
uint32_t addr;
|
||||
uint32_t size;
|
||||
uint32_t alignment;
|
||||
int32_t prot;
|
||||
int32_t flags;
|
||||
int32_t fd;
|
||||
int32_t offset; // FIXME: 64-bit off_t?
|
||||
StringArgument name;
|
||||
};
|
||||
|
||||
struct SC_open_params {
|
||||
int dirfd;
|
||||
StringArgument path;
|
||||
int options;
|
||||
u16 mode;
|
||||
};
|
||||
struct SC_open_params {
|
||||
int dirfd;
|
||||
StringArgument path;
|
||||
int options;
|
||||
u16 mode;
|
||||
};
|
||||
|
||||
struct SC_select_params {
|
||||
int nfds;
|
||||
fd_set* readfds;
|
||||
fd_set* writefds;
|
||||
fd_set* exceptfds;
|
||||
struct timeval* timeout;
|
||||
};
|
||||
struct SC_select_params {
|
||||
int nfds;
|
||||
fd_set* readfds;
|
||||
fd_set* writefds;
|
||||
fd_set* exceptfds;
|
||||
struct timeval* timeout;
|
||||
};
|
||||
|
||||
struct SC_clock_nanosleep_params {
|
||||
int clock_id;
|
||||
int flags;
|
||||
const struct timespec* requested_sleep;
|
||||
struct timespec* remaining_sleep;
|
||||
};
|
||||
struct SC_clock_nanosleep_params {
|
||||
int clock_id;
|
||||
int flags;
|
||||
const struct timespec* requested_sleep;
|
||||
struct timespec* remaining_sleep;
|
||||
};
|
||||
|
||||
struct SC_sendto_params {
|
||||
int sockfd;
|
||||
ImmutableBufferArgument<void, size_t> data;
|
||||
int flags;
|
||||
const sockaddr* addr;
|
||||
socklen_t addr_length;
|
||||
};
|
||||
struct SC_sendto_params {
|
||||
int sockfd;
|
||||
ImmutableBufferArgument<void, size_t> data;
|
||||
int flags;
|
||||
const sockaddr* addr;
|
||||
socklen_t addr_length;
|
||||
};
|
||||
|
||||
struct SC_recvfrom_params {
|
||||
int sockfd;
|
||||
MutableBufferArgument<void, size_t> buffer;
|
||||
int flags;
|
||||
sockaddr* addr;
|
||||
socklen_t* addr_length;
|
||||
};
|
||||
struct SC_recvfrom_params {
|
||||
int sockfd;
|
||||
MutableBufferArgument<void, size_t> buffer;
|
||||
int flags;
|
||||
sockaddr* addr;
|
||||
socklen_t* addr_length;
|
||||
};
|
||||
|
||||
struct SC_getsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
void* value;
|
||||
socklen_t* value_size;
|
||||
};
|
||||
struct SC_getsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
void* value;
|
||||
socklen_t* value_size;
|
||||
};
|
||||
|
||||
struct SC_setsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
const void* value;
|
||||
socklen_t value_size;
|
||||
};
|
||||
struct SC_setsockopt_params {
|
||||
int sockfd;
|
||||
int level;
|
||||
int option;
|
||||
const void* value;
|
||||
socklen_t value_size;
|
||||
};
|
||||
|
||||
struct SC_getsockname_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
struct SC_getsockname_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
|
||||
struct SC_getpeername_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
struct SC_getpeername_params {
|
||||
int sockfd;
|
||||
sockaddr* addr;
|
||||
socklen_t* addrlen;
|
||||
};
|
||||
|
||||
struct SC_futex_params {
|
||||
i32* userspace_address;
|
||||
int futex_op;
|
||||
i32 val;
|
||||
const timespec* timeout;
|
||||
};
|
||||
struct SC_futex_params {
|
||||
i32* userspace_address;
|
||||
int futex_op;
|
||||
i32 val;
|
||||
const timespec* timeout;
|
||||
};
|
||||
|
||||
struct SC_setkeymap_params {
|
||||
const char* map;
|
||||
const char* shift_map;
|
||||
const char* alt_map;
|
||||
const char* altgr_map;
|
||||
};
|
||||
struct SC_setkeymap_params {
|
||||
const char* map;
|
||||
const char* shift_map;
|
||||
const char* alt_map;
|
||||
const char* altgr_map;
|
||||
};
|
||||
|
||||
struct SC_create_thread_params {
|
||||
unsigned int m_detach_state = 0; // JOINABLE or DETACHED
|
||||
int m_schedule_priority = 30; // THREAD_PRIORITY_NORMAL
|
||||
// FIXME: Implment guard pages in create_thread (unreadable pages at "overflow" end of stack)
|
||||
// "If an implementation rounds up the value of guardsize to a multiple of {PAGESIZE},
|
||||
// a call to pthread_attr_getguardsize() specifying attr shall store in the guardsize
|
||||
// parameter the guard size specified by the previous pthread_attr_setguardsize() function call"
|
||||
// ... ok, if you say so posix. Guess we get to lie to people about guard page size
|
||||
unsigned int m_guard_page_size = 0; // Rounded up to PAGE_SIZE
|
||||
unsigned int m_reported_guard_page_size = 0; // The lie we tell callers
|
||||
unsigned int m_stack_size = 4 * MB; // Default PTHREAD_STACK_MIN
|
||||
void* m_stack_location = nullptr; // nullptr means any, o.w. process virtual address
|
||||
};
|
||||
struct SC_create_thread_params {
|
||||
unsigned int m_detach_state = 0; // JOINABLE or DETACHED
|
||||
int m_schedule_priority = 30; // THREAD_PRIORITY_NORMAL
|
||||
// FIXME: Implment guard pages in create_thread (unreadable pages at "overflow" end of stack)
|
||||
// "If an implementation rounds up the value of guardsize to a multiple of {PAGESIZE},
|
||||
// a call to pthread_attr_getguardsize() specifying attr shall store in the guardsize
|
||||
// parameter the guard size specified by the previous pthread_attr_setguardsize() function call"
|
||||
// ... ok, if you say so posix. Guess we get to lie to people about guard page size
|
||||
unsigned int m_guard_page_size = 0; // Rounded up to PAGE_SIZE
|
||||
unsigned int m_reported_guard_page_size = 0; // The lie we tell callers
|
||||
unsigned int m_stack_size = 4 * MB; // Default PTHREAD_STACK_MIN
|
||||
void* m_stack_location = nullptr; // nullptr means any, o.w. process virtual address
|
||||
};
|
||||
|
||||
struct SC_realpath_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
struct SC_realpath_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
|
||||
struct SC_set_mmap_name_params {
|
||||
void* addr;
|
||||
size_t size;
|
||||
StringArgument name;
|
||||
};
|
||||
struct SC_set_mmap_name_params {
|
||||
void* addr;
|
||||
size_t size;
|
||||
StringArgument name;
|
||||
};
|
||||
|
||||
struct SC_execve_params {
|
||||
StringArgument path;
|
||||
StringListArgument arguments;
|
||||
StringListArgument environment;
|
||||
};
|
||||
struct SC_execve_params {
|
||||
StringArgument path;
|
||||
StringListArgument arguments;
|
||||
StringListArgument environment;
|
||||
};
|
||||
|
||||
struct SC_readlink_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
struct SC_readlink_params {
|
||||
StringArgument path;
|
||||
MutableBufferArgument<char, size_t> buffer;
|
||||
};
|
||||
|
||||
struct SC_link_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
struct SC_link_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
|
||||
struct SC_chown_params {
|
||||
StringArgument path;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
};
|
||||
struct SC_chown_params {
|
||||
StringArgument path;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
};
|
||||
|
||||
struct SC_mknod_params {
|
||||
StringArgument path;
|
||||
u16 mode;
|
||||
u32 dev;
|
||||
};
|
||||
struct SC_mknod_params {
|
||||
StringArgument path;
|
||||
u16 mode;
|
||||
u32 dev;
|
||||
};
|
||||
|
||||
struct SC_symlink_params {
|
||||
StringArgument target;
|
||||
StringArgument linkpath;
|
||||
};
|
||||
struct SC_symlink_params {
|
||||
StringArgument target;
|
||||
StringArgument linkpath;
|
||||
};
|
||||
|
||||
struct SC_rename_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
struct SC_rename_params {
|
||||
StringArgument old_path;
|
||||
StringArgument new_path;
|
||||
};
|
||||
|
||||
struct SC_mount_params {
|
||||
StringArgument source;
|
||||
StringArgument target;
|
||||
StringArgument fs_type;
|
||||
int flags;
|
||||
};
|
||||
struct SC_mount_params {
|
||||
StringArgument source;
|
||||
StringArgument target;
|
||||
StringArgument fs_type;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct SC_pledge_params {
|
||||
StringArgument promises;
|
||||
StringArgument execpromises;
|
||||
};
|
||||
struct SC_pledge_params {
|
||||
StringArgument promises;
|
||||
StringArgument execpromises;
|
||||
};
|
||||
|
||||
struct SC_unveil_params {
|
||||
StringArgument path;
|
||||
StringArgument permissions;
|
||||
};
|
||||
struct SC_unveil_params {
|
||||
StringArgument path;
|
||||
StringArgument permissions;
|
||||
};
|
||||
|
||||
struct SC_waitid_params {
|
||||
int idtype;
|
||||
int id;
|
||||
struct siginfo* infop;
|
||||
int options;
|
||||
};
|
||||
struct SC_waitid_params {
|
||||
int idtype;
|
||||
int id;
|
||||
struct siginfo* infop;
|
||||
int options;
|
||||
};
|
||||
|
||||
struct SC_stat_params {
|
||||
StringArgument path;
|
||||
struct stat* statbuf;
|
||||
bool follow_symlinks;
|
||||
};
|
||||
struct SC_stat_params {
|
||||
StringArgument path;
|
||||
struct stat* statbuf;
|
||||
bool follow_symlinks;
|
||||
};
|
||||
|
||||
void initialize();
|
||||
int sync();
|
||||
void initialize();
|
||||
int sync();
|
||||
|
||||
inline u32 invoke(Function function)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
inline u32 invoke(Function function)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1>
|
||||
inline u32 invoke(Function function, T1 arg1)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1>
|
||||
inline u32 invoke(Function function, T1 arg1)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1, typename T2>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1, typename T2>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T1, typename T2, typename T3>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2), "b"((u32)arg3)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
template<typename T1, typename T2, typename T3>
|
||||
inline u32 invoke(Function function, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
u32 result;
|
||||
asm volatile("int $0x82"
|
||||
: "=a"(result)
|
||||
: "a"(function), "d"((u32)arg1), "c"((u32)arg2), "b"((u32)arg3)
|
||||
: "memory");
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue