mirror of
https://github.com/Ed94/Odin.git
synced 2026-07-20 00:16:47 +00:00
Merge branch 'master' into new-temp-allocator
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package darwin
|
||||
|
||||
unix_offset_syscall :: proc(number: System_Call_Number) -> uintptr {
|
||||
unix_offset_syscall :: proc "contextless" (number: System_Call_Number) -> uintptr {
|
||||
return uintptr(number) + uintptr(0x2000000)
|
||||
}
|
||||
|
||||
|
||||
@@ -229,191 +229,191 @@ _Proc_Bsdinfo :: struct {
|
||||
|
||||
/*--==========================================================================--*/
|
||||
|
||||
syscall_fsync :: #force_inline proc(fildes: c.int) -> bool {
|
||||
syscall_fsync :: #force_inline proc "contextless" (fildes: c.int) -> bool {
|
||||
return !(cast(bool)intrinsics.syscall(unix_offset_syscall(.fsync), uintptr(fildes)))
|
||||
}
|
||||
|
||||
syscall_write :: #force_inline proc (fildes: c.int, buf: ^byte, nbyte: u64) -> bool {
|
||||
syscall_write :: #force_inline proc "contextless" (fildes: c.int, buf: ^byte, nbyte: u64) -> bool {
|
||||
return !(cast(bool)intrinsics.syscall(unix_offset_syscall(.write), uintptr(fildes), uintptr(buf), uintptr(nbyte)))
|
||||
}
|
||||
|
||||
syscall_read :: #force_inline proc(fildes: c.int, buf: ^byte, nbyte: u64) -> i64 {
|
||||
syscall_read :: #force_inline proc "contextless" (fildes: c.int, buf: ^byte, nbyte: u64) -> i64 {
|
||||
return cast(i64)intrinsics.syscall(unix_offset_syscall(.read), uintptr(fildes), uintptr(buf), uintptr(nbyte))
|
||||
}
|
||||
|
||||
syscall_open :: #force_inline proc(path: cstring, oflag: u32, mode: u32) -> c.int {
|
||||
syscall_open :: #force_inline proc "contextless" (path: cstring, oflag: u32, mode: u32) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.open), transmute(uintptr)path, uintptr(oflag), uintptr(mode))
|
||||
}
|
||||
|
||||
syscall_close :: #force_inline proc(fd: c.int) -> bool {
|
||||
syscall_close :: #force_inline proc "contextless" (fd: c.int) -> bool {
|
||||
return !(cast(bool)intrinsics.syscall(unix_offset_syscall(.close), uintptr(fd)))
|
||||
}
|
||||
|
||||
syscall_fchmod :: #force_inline proc(fildes: c.int, mode: u32) -> c.int {
|
||||
syscall_fchmod :: #force_inline proc "contextless" (fildes: c.int, mode: u32) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.fchmod), uintptr(fildes), uintptr(mode)))
|
||||
}
|
||||
|
||||
syscall_chmod :: #force_inline proc(path: cstring, mode: u32) -> c.int {
|
||||
syscall_chmod :: #force_inline proc "contextless" (path: cstring, mode: u32) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.chmod), transmute(uintptr)path, uintptr(mode)))
|
||||
}
|
||||
|
||||
syscall_mkdir :: #force_inline proc(path: cstring, mode: u32) -> c.int {
|
||||
syscall_mkdir :: #force_inline proc "contextless" (path: cstring, mode: u32) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.mkdir), transmute(uintptr)path, uintptr(mode)))
|
||||
}
|
||||
|
||||
syscall_mkdir_at :: #force_inline proc(fd: c.int, path: cstring, mode: u32) -> c.int {
|
||||
syscall_mkdir_at :: #force_inline proc "contextless" (fd: c.int, path: cstring, mode: u32) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.mkdir), uintptr(fd), transmute(uintptr)path, uintptr(mode)))
|
||||
}
|
||||
|
||||
syscall_rmdir :: #force_inline proc(path: cstring, mode: u32) -> c.int {
|
||||
syscall_rmdir :: #force_inline proc "contextless" (path: cstring, mode: u32) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.rmdir), transmute(uintptr)path, uintptr(mode)))
|
||||
}
|
||||
|
||||
syscall_rename :: #force_inline proc(path_old: cstring, path_new: cstring) -> c.int {
|
||||
syscall_rename :: #force_inline proc "contextless" (path_old: cstring, path_new: cstring) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.rename), transmute(uintptr)path_old, transmute(uintptr)path_new))
|
||||
}
|
||||
|
||||
syscall_rename_at :: #force_inline proc(from_fd: c.int, from: cstring, to_fd: c.int, to: cstring) -> c.int {
|
||||
syscall_rename_at :: #force_inline proc "contextless" (from_fd: c.int, from: cstring, to_fd: c.int, to: cstring) -> c.int {
|
||||
return (cast(c.int)intrinsics.syscall(unix_offset_syscall(.renameat), uintptr(from_fd), transmute(uintptr)from, uintptr(to_fd), transmute(uintptr)to))
|
||||
}
|
||||
|
||||
syscall_lseek :: #force_inline proc(fd: c.int, offset: i64, whence: c.int) -> i64 {
|
||||
syscall_lseek :: #force_inline proc "contextless" (fd: c.int, offset: i64, whence: c.int) -> i64 {
|
||||
return cast(i64)intrinsics.syscall(unix_offset_syscall(.lseek), uintptr(fd), uintptr(offset), uintptr(whence))
|
||||
}
|
||||
|
||||
syscall_gettid :: #force_inline proc() -> u64 {
|
||||
syscall_gettid :: #force_inline proc "contextless" () -> u64 {
|
||||
return cast(u64)intrinsics.syscall(unix_offset_syscall(.gettid))
|
||||
}
|
||||
|
||||
syscall_fstat :: #force_inline proc(fd: c.int, status: ^stat) -> c.int {
|
||||
syscall_fstat :: #force_inline proc "contextless" (fd: c.int, status: ^stat) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.fstat), uintptr(fd), uintptr(status))
|
||||
}
|
||||
|
||||
syscall_lstat :: #force_inline proc(path: cstring, status: ^stat) -> c.int {
|
||||
syscall_lstat :: #force_inline proc "contextless" (path: cstring, status: ^stat) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.lstat), transmute(uintptr)path, uintptr(status))
|
||||
}
|
||||
|
||||
syscall_stat :: #force_inline proc(path: cstring, status: ^stat) -> c.int {
|
||||
syscall_stat :: #force_inline proc "contextless" (path: cstring, status: ^stat) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.stat), transmute(uintptr)path, uintptr(status))
|
||||
}
|
||||
|
||||
syscall_fstatat :: #force_inline proc(fd: c.int, path: cstring, status: ^stat) -> c.int {
|
||||
syscall_fstatat :: #force_inline proc "contextless" (fd: c.int, path: cstring, status: ^stat) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.fstatat), uintptr(fd), transmute(uintptr)path, uintptr(status))
|
||||
}
|
||||
|
||||
syscall_link :: #force_inline proc(path: cstring, to_link: cstring) -> c.int {
|
||||
syscall_link :: #force_inline proc "contextless" (path: cstring, to_link: cstring) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.link), transmute(uintptr)path, transmute(uintptr)to_link)
|
||||
}
|
||||
|
||||
syscall_linkat :: #force_inline proc(fd: c.int, path: cstring, fd2: c.int, to_link: cstring) -> c.int {
|
||||
syscall_linkat :: #force_inline proc "contextless" (fd: c.int, path: cstring, fd2: c.int, to_link: cstring) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.linkat), uintptr(fd), transmute(uintptr)path, uintptr(fd2), transmute(uintptr)to_link)
|
||||
}
|
||||
|
||||
syscall_readlink :: #force_inline proc(path: cstring, buf: ^u8, buf_size: u64) -> i64 {
|
||||
syscall_readlink :: #force_inline proc "contextless" (path: cstring, buf: ^u8, buf_size: u64) -> i64 {
|
||||
return cast(i64)intrinsics.syscall(unix_offset_syscall(.readlink), transmute(uintptr)path, uintptr(buf), uintptr(buf_size))
|
||||
}
|
||||
|
||||
syscall_readlinkat :: #force_inline proc(fd: c.int, path: cstring, buf: ^u8, buf_size: u64) -> i64 {
|
||||
syscall_readlinkat :: #force_inline proc "contextless" (fd: c.int, path: cstring, buf: ^u8, buf_size: u64) -> i64 {
|
||||
return cast(i64)intrinsics.syscall(unix_offset_syscall(.readlinkat), uintptr(fd), transmute(uintptr)path, uintptr(buf), uintptr(buf_size))
|
||||
}
|
||||
|
||||
syscall_access :: #force_inline proc(path: cstring, mode: c.int) -> c.int {
|
||||
syscall_access :: #force_inline proc "contextless" (path: cstring, mode: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.access), transmute(uintptr)path, uintptr(mode))
|
||||
}
|
||||
|
||||
syscall_faccessat :: #force_inline proc(fd: c.int, path: cstring, mode: c.int, flag: c.int) -> c.int {
|
||||
syscall_faccessat :: #force_inline proc "contextless" (fd: c.int, path: cstring, mode: c.int, flag: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.faccessat), uintptr(fd), transmute(uintptr)path, uintptr(mode), uintptr(flag))
|
||||
}
|
||||
|
||||
syscall_getdirentries :: #force_inline proc(fd: c.int, buf: ^u8, nbytes: c.int, base_pointer: ^u32) -> c.int {
|
||||
syscall_getdirentries :: #force_inline proc "contextless" (fd: c.int, buf: ^u8, nbytes: c.int, base_pointer: ^u32) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getdirentries), uintptr(fd), uintptr(buf), uintptr(nbytes), uintptr(base_pointer))
|
||||
}
|
||||
|
||||
syscall_truncate :: #force_inline proc (path: cstring, length: off_t) -> c.int {
|
||||
syscall_truncate :: #force_inline proc "contextless" (path: cstring, length: off_t) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.truncate), transmute(uintptr)path, uintptr(length))
|
||||
}
|
||||
|
||||
syscall_ftruncate :: #force_inline proc (fd: c.int, length: off_t) -> c.int {
|
||||
syscall_ftruncate :: #force_inline proc "contextless" (fd: c.int, length: off_t) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.ftruncate), uintptr(fd), uintptr(length))
|
||||
}
|
||||
|
||||
syscall_sysctl :: #force_inline proc (name: ^c.int, namelen: c.uint, oldp: rawptr, oldlenp: ^i64, newp: ^i8, newlen: i64) -> c.int {
|
||||
syscall_sysctl :: #force_inline proc "contextless" (name: ^c.int, namelen: c.uint, oldp: rawptr, oldlenp: ^i64, newp: ^i8, newlen: i64) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.sysctl), uintptr(name), uintptr(namelen), uintptr(oldp), uintptr(oldlenp), uintptr(newp), uintptr(newlen))
|
||||
}
|
||||
|
||||
syscall_copyfile :: #force_inline proc(from: cstring, to: cstring, state: rawptr, flags: u32) -> c.int {
|
||||
syscall_copyfile :: #force_inline proc "contextless" (from: cstring, to: cstring, state: rawptr, flags: u32) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.copyfile), transmute(uintptr)from, transmute(uintptr)to, uintptr(state), uintptr(flags))
|
||||
}
|
||||
|
||||
// think about this? last arg should be more than one
|
||||
syscall_fcntl :: #force_inline proc(fd: c.int, cmd: c.int, other: rawptr) -> c.int {
|
||||
syscall_fcntl :: #force_inline proc "contextless" (fd: c.int, cmd: c.int, other: rawptr) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.fsctl), uintptr(fd), uintptr(cmd), uintptr(other))
|
||||
}
|
||||
|
||||
syscall_exit :: #force_inline proc(code: c.int) {
|
||||
syscall_exit :: #force_inline proc "contextless" (code: c.int) {
|
||||
intrinsics.syscall(unix_offset_syscall(.exit), uintptr(code))
|
||||
}
|
||||
|
||||
syscall_kill :: #force_inline proc(pid: pid_t, sig: c.int) -> c.int {
|
||||
syscall_kill :: #force_inline proc "contextless" (pid: pid_t, sig: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.kill), uintptr(pid), uintptr(sig))
|
||||
}
|
||||
|
||||
syscall_dup :: #force_inline proc(fd: c.int) -> c.int {
|
||||
syscall_dup :: #force_inline proc "contextless" (fd: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.dup), uintptr(fd))
|
||||
}
|
||||
|
||||
syscall_execve :: #force_inline proc(path: cstring, argv: [^]cstring, env: [^]cstring) -> c.int {
|
||||
syscall_execve :: #force_inline proc "contextless" (path: cstring, argv: [^]cstring, env: [^]cstring) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.execve), transmute(uintptr)path, transmute(uintptr)argv, transmute(uintptr)env)
|
||||
}
|
||||
|
||||
syscall_munmap :: #force_inline proc(addr: rawptr, len: u64) -> c.int {
|
||||
syscall_munmap :: #force_inline proc "contextless" (addr: rawptr, len: u64) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.mmap), uintptr(addr), uintptr(len))
|
||||
}
|
||||
|
||||
syscall_mmap :: #force_inline proc(addr: ^u8, len: u64, port: c.int, flags: c.int, fd: int, offset: off_t) -> ^u8 {
|
||||
syscall_mmap :: #force_inline proc "contextless" (addr: ^u8, len: u64, port: c.int, flags: c.int, fd: int, offset: off_t) -> ^u8 {
|
||||
return cast(^u8)intrinsics.syscall(unix_offset_syscall(.mmap), uintptr(addr), uintptr(len), uintptr(port), uintptr(flags), uintptr(fd), uintptr(offset))
|
||||
}
|
||||
|
||||
syscall_flock :: #force_inline proc(fd: c.int, operation: c.int) -> c.int {
|
||||
syscall_flock :: #force_inline proc "contextless" (fd: c.int, operation: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.flock), uintptr(fd), uintptr(operation))
|
||||
}
|
||||
|
||||
syscall_utimes :: #force_inline proc(path: cstring, times: ^timeval) -> c.int {
|
||||
syscall_utimes :: #force_inline proc "contextless" (path: cstring, times: ^timeval) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.utimes), transmute(uintptr)path, uintptr(times))
|
||||
}
|
||||
|
||||
syscall_futimes :: #force_inline proc(fd: c.int, times: ^timeval) -> c.int {
|
||||
syscall_futimes :: #force_inline proc "contextless" (fd: c.int, times: ^timeval) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.futimes), uintptr(fd), uintptr(times))
|
||||
}
|
||||
|
||||
syscall_adjtime :: #force_inline proc(delta: ^timeval, old_delta: ^timeval) -> c.int {
|
||||
syscall_adjtime :: #force_inline proc "contextless" (delta: ^timeval, old_delta: ^timeval) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.adjtime), uintptr(delta), uintptr(old_delta))
|
||||
}
|
||||
|
||||
syscall_sysctlbyname :: #force_inline proc(name: cstring, oldp: rawptr, oldlenp: ^i64, newp: rawptr, newlen: i64) -> c.int {
|
||||
syscall_sysctlbyname :: #force_inline proc "contextless" (name: cstring, oldp: rawptr, oldlenp: ^i64, newp: rawptr, newlen: i64) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.sysctlbyname), transmute(uintptr)name, uintptr(oldp), uintptr(oldlenp), uintptr(newp), uintptr(newlen))
|
||||
}
|
||||
|
||||
syscall_proc_info :: #force_inline proc(num: c.int, pid: u32, flavor: c.int, arg: u64, buffer: rawptr, buffer_size: c.int) -> c.int {
|
||||
syscall_proc_info :: #force_inline proc "contextless" (num: c.int, pid: u32, flavor: c.int, arg: u64, buffer: rawptr, buffer_size: c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.proc_info), uintptr(num), uintptr(pid), uintptr(flavor), uintptr(arg), uintptr(buffer), uintptr(buffer_size))
|
||||
}
|
||||
|
||||
syscall_openat :: #force_inline proc(fd: int, path: cstring, oflag: u32, mode: u32) -> c.int {
|
||||
syscall_openat :: #force_inline proc "contextless" (fd: int, path: cstring, oflag: u32, mode: u32) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.openat), uintptr(fd), transmute(uintptr)path, uintptr(oflag), uintptr(mode))
|
||||
}
|
||||
|
||||
syscall_getentropy :: #force_inline proc(buf: [^]u8, buflen: u64) -> c.int {
|
||||
syscall_getentropy :: #force_inline proc "contextless" (buf: [^]u8, buflen: u64) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getentropy), uintptr(buf), uintptr(buflen))
|
||||
}
|
||||
|
||||
syscall_pipe :: #force_inline proc(fds: [^]c.int) -> c.int {
|
||||
syscall_pipe :: #force_inline proc "contextless" (fds: [^]c.int) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getentropy), uintptr(&fds[0]), uintptr(&fds[1]))
|
||||
}
|
||||
|
||||
syscall_chdir :: #force_inline proc(path: cstring) -> c.int {
|
||||
syscall_chdir :: #force_inline proc "contextless" (path: cstring) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getentropy), transmute(uintptr)path)
|
||||
}
|
||||
|
||||
syscall_fchdir :: #force_inline proc(fd: c.int, path: cstring) -> c.int {
|
||||
syscall_fchdir :: #force_inline proc "contextless" (fd: c.int, path: cstring) -> c.int {
|
||||
return cast(c.int)intrinsics.syscall(unix_offset_syscall(.getentropy), uintptr(fd), transmute(uintptr)path)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1563,15 +1563,167 @@ MADV_WIPEONFORK :: 18
|
||||
MADV_KEEPONFORK :: 19
|
||||
MADV_HWPOISON :: 100
|
||||
|
||||
// pipe2 flags
|
||||
O_CLOEXEC :: 0o2000000
|
||||
|
||||
// perf event data
|
||||
Perf_Sample :: struct #raw_union {
|
||||
period: u64,
|
||||
frequency: u64,
|
||||
}
|
||||
Perf_Wakeup :: struct #raw_union {
|
||||
events: u32,
|
||||
watermark: u32,
|
||||
}
|
||||
Perf_Field1 :: struct #raw_union {
|
||||
breakpoint_addr: u64,
|
||||
kprobe_func: u64,
|
||||
uprobe_path: u64,
|
||||
config1: u64,
|
||||
}
|
||||
Perf_Field2 :: struct #raw_union {
|
||||
breakpoint_len: u64,
|
||||
kprobe_addr: u64,
|
||||
uprobe_offset: u64,
|
||||
config2: u64,
|
||||
}
|
||||
Perf_Event_Attr :: struct #packed {
|
||||
type: u32,
|
||||
size: u32,
|
||||
config: u64,
|
||||
sample: Perf_Sample,
|
||||
sample_type: u64,
|
||||
read_format: u64,
|
||||
flags: Perf_Flags,
|
||||
wakeup: Perf_Wakeup,
|
||||
breakpoint_type: u32,
|
||||
field1: Perf_Field1,
|
||||
field2: Perf_Field2,
|
||||
branch_sample_type: u64,
|
||||
sample_regs_user: u64,
|
||||
sample_stack_user: u32,
|
||||
clock_id: i32,
|
||||
sample_regs_intr: u64,
|
||||
aux_watermark: u32,
|
||||
sample_max_stack: u16,
|
||||
_padding: u16,
|
||||
}
|
||||
|
||||
Perf_Event_Flags :: distinct bit_set[Perf_Event_Flag; u64]
|
||||
Perf_Event_Flag :: enum u64 {
|
||||
Bit0 = 0,
|
||||
Bit0_Is_Deprecated = 1,
|
||||
User_Rdpmc = 2,
|
||||
User_Time = 3,
|
||||
User_Time_Zero = 4,
|
||||
User_Time_Short = 5,
|
||||
}
|
||||
Perf_Capabilities :: struct #raw_union {
|
||||
capabilities: u64,
|
||||
flags: Perf_Event_Flags,
|
||||
}
|
||||
Perf_Event_mmap_Page :: struct #packed {
|
||||
version: u32,
|
||||
compat_version: u32,
|
||||
lock: u32,
|
||||
index: u32,
|
||||
offset: i64,
|
||||
time_enabled: u64,
|
||||
time_running: u64,
|
||||
cap: Perf_Capabilities,
|
||||
pmc_width: u16,
|
||||
time_shift: u16,
|
||||
time_mult: u32,
|
||||
time_offset: u64,
|
||||
time_zero: u64,
|
||||
size: u32,
|
||||
reserved1: u32,
|
||||
time_cycles: u64,
|
||||
time_mask: u64,
|
||||
reserved2: [116*8]u8,
|
||||
data_head: u64,
|
||||
data_tail: u64,
|
||||
data_offset: u64,
|
||||
data_size: u64,
|
||||
aux_head: u64,
|
||||
aux_tail: u64,
|
||||
aux_offset: u64,
|
||||
aux_size: u64,
|
||||
}
|
||||
|
||||
Perf_Type_Id :: enum u32 {
|
||||
Hardware = 0,
|
||||
Software = 1,
|
||||
Tracepoint = 2,
|
||||
HW_Cache = 3,
|
||||
Raw = 4,
|
||||
Breakpoint = 5,
|
||||
}
|
||||
|
||||
Perf_Hardware_Id :: enum u64 {
|
||||
CPU_Cycles = 0,
|
||||
Instructions = 1,
|
||||
Cache_References = 2,
|
||||
Cache_Misses = 3,
|
||||
Branch_Instructions = 4,
|
||||
Branch_Misses = 5,
|
||||
Bus_Cycles = 6,
|
||||
Stalled_Cycles_Frontend = 7,
|
||||
Stalled_Cycles_Backend = 8,
|
||||
Ref_CPU_Cycles = 9,
|
||||
}
|
||||
|
||||
Perf_Flags :: distinct bit_set[Perf_Flag; u64]
|
||||
Perf_Flag :: enum u64 {
|
||||
Disabled = 0,
|
||||
Inherit = 1,
|
||||
Pinned = 2,
|
||||
Exclusive = 3,
|
||||
Exclude_User = 4,
|
||||
Exclude_Kernel = 5,
|
||||
Exclude_HV = 6,
|
||||
Exclude_Idle = 7,
|
||||
mmap = 8,
|
||||
Comm = 9,
|
||||
Freq = 10,
|
||||
Inherit_Stat = 11,
|
||||
Enable_On_Exec = 12,
|
||||
Task = 13,
|
||||
Watermark = 14,
|
||||
Precise_IP_0 = 15,
|
||||
Precise_IP_1 = 16,
|
||||
mmap_Data = 17,
|
||||
Sample_Id_All = 18,
|
||||
Exclude_Host = 19,
|
||||
Exclude_Guest = 20,
|
||||
Exclude_Callchain_Kernel = 21,
|
||||
Exclude_Callchain_User = 22,
|
||||
mmap2 = 23,
|
||||
Comm_Exec = 24,
|
||||
Use_Clockid = 25,
|
||||
Context_Switch = 26,
|
||||
Write_Backward = 27,
|
||||
Namespaces = 28,
|
||||
KSymbol = 29,
|
||||
BPF_Event = 30,
|
||||
Aux_Output = 31,
|
||||
CGroup = 32,
|
||||
Text_Poke = 33,
|
||||
Build_Id = 34,
|
||||
Inherit_Thread = 35,
|
||||
Remove_On_Exec = 36,
|
||||
Sigtrap = 37,
|
||||
}
|
||||
|
||||
sys_gettid :: proc "contextless" () -> int {
|
||||
return cast(int)intrinsics.syscall(SYS_gettid)
|
||||
return int(intrinsics.syscall(SYS_gettid))
|
||||
}
|
||||
|
||||
sys_getrandom :: proc "contextless" (buf: [^]byte, buflen: int, flags: uint) -> int {
|
||||
return cast(int)intrinsics.syscall(SYS_getrandom, uintptr(buf), uintptr(buflen), uintptr(flags))
|
||||
sys_getrandom :: proc "contextless" (buf: [^]byte, buflen: uint, flags: int) -> int {
|
||||
return int(intrinsics.syscall(SYS_getrandom, uintptr(buf), uintptr(buflen), uintptr(flags)))
|
||||
}
|
||||
|
||||
sys_open :: proc "contextless" (path: cstring, flags: int, mode: int = 0o000) -> int {
|
||||
sys_open :: proc "contextless" (path: cstring, flags: int, mode: uint = 0o000) -> int {
|
||||
when ODIN_ARCH != .arm64 {
|
||||
return int(intrinsics.syscall(SYS_open, uintptr(rawptr(path)), uintptr(flags), uintptr(mode)))
|
||||
} else { // NOTE: arm64 does not have open
|
||||
@@ -1579,7 +1731,7 @@ sys_open :: proc "contextless" (path: cstring, flags: int, mode: int = 0o000) ->
|
||||
}
|
||||
}
|
||||
|
||||
sys_openat :: proc "contextless" (dfd: int, path: cstring, flags: int, mode: int = 0o000) -> int {
|
||||
sys_openat :: proc "contextless" (dfd: int, path: cstring, flags: int, mode: uint = 0o000) -> int {
|
||||
return int(intrinsics.syscall(SYS_openat, uintptr(dfd), uintptr(rawptr(path)), uintptr(flags), uintptr(mode)))
|
||||
}
|
||||
|
||||
@@ -1691,7 +1843,7 @@ sys_fchdir :: proc "contextless" (fd: int) -> int {
|
||||
return int(intrinsics.syscall(SYS_fchdir, uintptr(fd)))
|
||||
}
|
||||
|
||||
sys_chmod :: proc "contextless" (path: cstring, mode: int) -> int {
|
||||
sys_chmod :: proc "contextless" (path: cstring, mode: uint) -> int {
|
||||
when ODIN_ARCH != .arm64 {
|
||||
return int(intrinsics.syscall(SYS_chmod, uintptr(rawptr(path)), uintptr(mode)))
|
||||
} else { // NOTE: arm64 does not have chmod
|
||||
@@ -1699,7 +1851,7 @@ sys_chmod :: proc "contextless" (path: cstring, mode: int) -> int {
|
||||
}
|
||||
}
|
||||
|
||||
sys_fchmod :: proc "contextless" (fd: int, mode: int) -> int {
|
||||
sys_fchmod :: proc "contextless" (fd: int, mode: uint) -> int {
|
||||
return int(intrinsics.syscall(SYS_fchmod, uintptr(fd), uintptr(mode)))
|
||||
}
|
||||
|
||||
@@ -1759,7 +1911,7 @@ sys_rmdir :: proc "contextless" (path: cstring) -> int {
|
||||
}
|
||||
}
|
||||
|
||||
sys_mkdir :: proc "contextless" (path: cstring, mode: int) -> int {
|
||||
sys_mkdir :: proc "contextless" (path: cstring, mode: uint) -> int {
|
||||
when ODIN_ARCH != .arm64 {
|
||||
return int(intrinsics.syscall(SYS_mkdir, uintptr(rawptr(path)), uintptr(mode)))
|
||||
} else { // NOTE: arm64 does not have mkdir
|
||||
@@ -1767,11 +1919,11 @@ sys_mkdir :: proc "contextless" (path: cstring, mode: int) -> int {
|
||||
}
|
||||
}
|
||||
|
||||
sys_mkdirat :: proc "contextless" (dfd: int, path: cstring, mode: int) -> int {
|
||||
sys_mkdirat :: proc "contextless" (dfd: int, path: cstring, mode: uint) -> int {
|
||||
return int(intrinsics.syscall(SYS_mkdirat, uintptr(dfd), uintptr(rawptr(path)), uintptr(mode)))
|
||||
}
|
||||
|
||||
sys_mknod :: proc "contextless" (path: cstring, mode: int, dev: int) -> int {
|
||||
sys_mknod :: proc "contextless" (path: cstring, mode: uint, dev: int) -> int {
|
||||
when ODIN_ARCH != .arm64 {
|
||||
return int(intrinsics.syscall(SYS_mknod, uintptr(rawptr(path)), uintptr(mode), uintptr(dev)))
|
||||
} else { // NOTE: arm64 does not have mknod
|
||||
@@ -1779,7 +1931,7 @@ sys_mknod :: proc "contextless" (path: cstring, mode: int, dev: int) -> int {
|
||||
}
|
||||
}
|
||||
|
||||
sys_mknodat :: proc "contextless" (dfd: int, path: cstring, mode: int, dev: int) -> int {
|
||||
sys_mknodat :: proc "contextless" (dfd: int, path: cstring, mode: uint, dev: int) -> int {
|
||||
return int(intrinsics.syscall(SYS_mknodat, uintptr(dfd), uintptr(rawptr(path)), uintptr(mode), uintptr(dev)))
|
||||
}
|
||||
|
||||
@@ -1818,6 +1970,16 @@ sys_fork :: proc "contextless" () -> int {
|
||||
return int(intrinsics.syscall(SYS_clone, SIGCHLD))
|
||||
}
|
||||
}
|
||||
sys_pipe2 :: proc "contextless" (fds: rawptr, flags: int) -> int {
|
||||
return int(intrinsics.syscall(SYS_pipe2, uintptr(fds), uintptr(flags)))
|
||||
}
|
||||
sys_dup2 :: proc "contextless" (oldfd: int, newfd: int) -> int {
|
||||
when ODIN_ARCH != .arm64 {
|
||||
return int(intrinsics.syscall(SYS_dup2, uintptr(oldfd), uintptr(newfd)))
|
||||
} else {
|
||||
return int(intrinsics.syscall(SYS_dup3, uintptr(oldfd), uintptr(newfd), 0))
|
||||
}
|
||||
}
|
||||
|
||||
sys_mmap :: proc "contextless" (addr: rawptr, length: uint, prot, flags, fd: int, offset: uintptr) -> int {
|
||||
return int(intrinsics.syscall(SYS_mmap, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), offset))
|
||||
@@ -1846,6 +2008,14 @@ sys_utimensat :: proc "contextless" (dfd: int, path: cstring, times: rawptr, fla
|
||||
return int(intrinsics.syscall(SYS_utimensat, uintptr(dfd), uintptr(rawptr(path)), uintptr(times), uintptr(flags)))
|
||||
}
|
||||
|
||||
sys_perf_event_open :: proc "contextless" (event_attr: rawptr, pid: i32, cpu: i32, group_fd: i32, flags: u32) -> int {
|
||||
return int(intrinsics.syscall(SYS_perf_event_open, uintptr(event_attr), uintptr(pid), uintptr(cpu), uintptr(group_fd), uintptr(flags)))
|
||||
}
|
||||
|
||||
sys_personality :: proc(persona: u64) -> int {
|
||||
return int(intrinsics.syscall(SYS_personality, uintptr(persona)))
|
||||
}
|
||||
|
||||
get_errno :: proc "contextless" (res: int) -> i32 {
|
||||
if res < 0 && res > -4096 {
|
||||
return i32(-res)
|
||||
|
||||
@@ -315,6 +315,13 @@ foreign kernel32 {
|
||||
lpOverlapped: LPOVERLAPPED,
|
||||
lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE,
|
||||
) -> BOOL ---
|
||||
FindFirstChangeNotificationW :: proc(
|
||||
lpPathName: LPWSTR,
|
||||
bWatchSubtree: BOOL,
|
||||
dwNotifyFilter: DWORD,
|
||||
) -> HANDLE ---
|
||||
FindNextChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL ---
|
||||
FindCloseChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL ---
|
||||
|
||||
InitializeSRWLock :: proc(SRWLock: ^SRWLOCK) ---
|
||||
AcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) ---
|
||||
|
||||
Reference in New Issue
Block a user