aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordam <dam@gudinoff>2023-03-04 03:42:08 +0000
committerdam <dam@gudinoff>2023-03-04 03:42:08 +0000
commit74fc3bd3a1e934ee3be2baa7c62069a79436064f (patch)
treeb2f755773946ec7eb9a615338d5f05fc93311749
parent455aa332bad7d9311519c8a23f51a82d3ae116e6 (diff)
downloadtask-time-tracker-74fc3bd3a1e934ee3be2baa7c62069a79436064f.tar.zst
task-time-tracker-74fc3bd3a1e934ee3be2baa7c62069a79436064f.zip
Removed syscall test script.
-rw-r--r--syscall.jai213
1 files changed, 0 insertions, 213 deletions
diff --git a/syscall.jai b/syscall.jai
deleted file mode 100644
index 34cdcf2..0000000
--- a/syscall.jai
+++ /dev/null
@@ -1,213 +0,0 @@
-#import "Basic";
-#import "POSIX";
-
-// This prototype is suposed to allow me to use the "open" posix syscall
-// that returns a file-descriptor (fd) that can then be used by the mmap
-// syscall that allows to map a file to memory.
-//
-// Syscall info: https://filippo.io/linux-syscall-table/
-
-// TODO
-// - On mmap_file and munmap_file use get_error_string as in the windows version. This is defined in ./modules/System.jai.
-// - Check if the strings being passed to these syscalls require any processing to be a C_string.
-// - Check what's the best return type for syscalls... is it OS dependent?
-// - File structure
-// modules/POSIX - where a lot of POSIX stuff (constants and structs) is defined, e.g.: `SYS_open :: 5;`
-// modules/System - where "Windows" or "POSIX" or "Objective -> macos" modules are imported... I suspect we import "System" if trying to target all OSes.
-// modules/Linux - defines some unix stuff (constants and structs) and then imports "POSIX".
-//
-// Seems that, each functionality may directly implement for all OSes, instead of using a OS independent layer.
-
-main :: () {
-
- //sys_exit(-1);
- size_stat, error_stat := sys_stat("./dummy");
- print("> dymmy has stat size % widh error %\n", size_stat.st_size, error_stat);
-
- fd, error_open := sys_open("./dummy", O_RDONLY, O_RDONLY);
- print("> opened dummy with fd % and errno %\n", fd, error_open);
- if fd < 0 return;
-
-
- //LOOPER :: "\\|/-";
- //idx := 0;
- //loop: string;
- //loop.count = 1;
- //for 0..3 {
- //sleep_milliseconds(1000);
- //loop.data = *LOOPER.data[idx];
- //idx = (idx + 1) % LOOPER.count;
- //print("\rlooping %", loop);
- //}
-
-
- size_lseek, error_lseek := sys_lseek(fd, 0, SEEK_END);
- print("\r> dummy has lseek size % with error %\n", size_lseek, error_lseek);
-
- size_fstat, error_fstat := sys_fstat(fd);
- print("\r> dummy has fstat size % with error %\n", size_fstat.st_size, error_fstat);
-
- error_close := sys_close(fd);
- print("\r> close(%) with errno %\n", fd, error_close);
-
- print("---\n");
- error :s64;
- fd, error = sys_open("./fail", O_RDONLY, O_RDONLY);
- print("$ open(fail) returned fd % and error %\n", fd, error);
- error = sys_close(456);
- print("$ close(456) returned error %\n", error);
-}
-
-/*
-#import "Basic";
-
-sys_stat :: (path: string) -> result: stat_t, error: s64{
- #assert(OS != .MACOS); // Not yet tested on MACOS. Remove assert to proceed.
- stats: stat_t = ---;
- result: s64 = ---;
- #if CPU == .X64 {
- print("\r# LINUX:ASM:STAT\n"); // TODO
- path_p: *s8 = xx path.data;
- stats_p := *stats;
- #asm SYSCALL_SYSRET {
- mov rax: gpr === a, SYS_stat;
- mov rdi: gpr === di, path_p;
- mov rsi: gpr === si, stats_p;
- syscall
- rcx: gpr === c, // Implicitly used by syscall to store RIP
- r11: gpr === 11, // Implicitly used by syscall to store RFLAGS
- rax, rdi, rsi;
- mov result, rax;
- }
- if result < 0
- return .{}, -result; // Error.
- else
- return stats, 0; // OK.
- } else {
- print("\r# LINUX:LIBC:STAT\n"); // TODO
- path_p: *s8 = xx path.data;
- error := syscall(SYS_stat, path_p, *stats);
- if error < 0
- return .{}, errno(); // Error.
- else
- return stats, 0; // OK.
- }
-}
-
-sys_fstat :: (file_descriptor: s64) -> result: stat_t, error: s64{
- #assert(OS != .MACOS); // Not yet tested on MACOS. Remove assert to proceed.
- stats: stat_t = ---;
- stats_p := *stats;
- result: s64 = ---;
- #if CPU == .X64 {
- print("\r# LINUX:ASM:FSTAT\n"); // TODO
- #asm SYSCALL_SYSRET {
- mov rax: gpr === a, SYS_fstat;
- mov rdi: gpr === di, file_descriptor;
- mov rsi: gpr === si, stats_p;
- syscall
- rcx: gpr === c, // Implicitly used by syscall to store RIP
- r11: gpr === 11, // Implicitly used by syscall to store RFLAGS
- rax, rdi, rsi;
- mov result, rax;
- }
- if result < 0
- return .{}, -result; // Error.
- else
- return stats, 0; // OK.
- } else {
- print("\r# LINUX:LIBC:FSTAT\n"); // TODO
- error := syscall(SYS_fstat, file_descriptor, *result);
- if error < 0
- return .{}, errno(); // Error.
- else
- return stats, 0; // OK.
- }
-}
-
-sys_lseek :: (file_descriptor: s64, offset: s64, whence: s64) -> offset_location: s64, error: s64 {
- #assert(OS != .MACOS); // Not yet tested on MACOS. Remove assert to proceed.
- result: s64 = ---;
- #if CPU == .X64 {
- print("\r# LINUX:ASM:LSEEK\n"); // TODO
- #asm SYSCALL_SYSRET {
- mov rax: gpr === a, SYS_lseek;
- mov rdi: gpr === di, file_descriptor;
- mov rsi: gpr === si, offset;
- mov rdx: gpr === d, whence;
- //syscall rcx, r11, rax, rdi, rsi, rdx; // TODO Cleanup?
- syscall
- rcx: gpr === c, // Implicitly used by syscall to store RIP
- r11: gpr === 11, // Implicitly used by syscall to store RFLAGS
- rax, rdi, rsi, rdx;
- mov result, rax;
- }
- if result < 0
- return -1, -result; // Error.
- else
- return result, 0; // OK.
- } else {
- print("\r# LINUX:LIBC:LSEEK\n"); // TODO
- result = syscall(SYS_lseek, file_descriptor, offset, whence);
- if result < 0
- return -1, errno(); // Error.
- else
- return result, 0; // OK.
- }
-}
-
-sys_open :: (path: string, flags: s64, mode: s64) -> file_descriptor: s64, error: s64 {
- #assert(OS != .MACOS); // Not yet tested on MACOS. Remove assert to proceed.
- data: *s8 = xx path.data;
- result: s64 = ---;
- #if CPU == .X64 {
- print("\r# LINUX:ASM:OPEN\n"); // TODO
- #asm SYSCALL_SYSRET {
- mov rax: gpr === a, SYS_open;
- mov rdi: gpr === di, data;
- mov rsi: gpr === si, flags;
- mov rdx: gpr === d, mode; // TODO Is this really used?
- //syscall rcx, r11, rax, rdi, rsi, rdx; // TODO Cleanup?
- syscall
- rcx: gpr === c, // Implicitly used by syscall to store RIP
- r11: gpr === 11, // Implicitly used by syscall to store RFLAGS
- rax, rdi, rsi, rdx;
- mov result, rax;
- }
- if result < 0
- return -1, -result; // Error.
- else
- return result, 0; // OK.
- } else {
- print("\r# LINUX:LIBC:OPEN\n"); // TODO
- result = syscall(SYS_open, data, flags, mode);
- if result < 0
- return -1, errno(); // Error.
- else
- return result, 0; // OK.
- }
-}
-
-sys_close :: (file_descriptor: s64) -> error: s64 {
- #assert(OS != .MACOS); // Not yet tested on MACOS. Remove assert to proceed.
- result: s64 = ---;
- #if CPU == .X64 {
- print("\r# LINUX:ASM:CLOSE\n"); // TODO
- #asm SYSCALL_SYSRET {
- mov rax: gpr === a, SYS_close;
- mov rdi: gpr === di, file_descriptor;
- syscall
- rcx: gpr === c, // Implicitly used by syscall to store RIP
- r11: gpr === 11, // Implicitly used by syscall to store RFLAGS
- rax, rdi;
- mov result, rax;
- }
- return ifx result < 0 then -result else 0;
- } else {
- print("\r# LINUX:LIBC:CLOSE\n"); // TODO
- result = syscall(SYS_close, file_descriptor);
- return ifx result < 0 then errno() else 0;
- }
-}
-
-*/