mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 06:38:47 +00:00
Add runtime.exit
This commit is contained in:
@@ -5,3 +5,7 @@ _OS_Errno :: distinct int
|
|||||||
stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
||||||
return _stderr_write(data)
|
return _stderr_write(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
_exit(code)
|
||||||
|
}
|
||||||
@@ -24,3 +24,14 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
}
|
}
|
||||||
return int(ret), 0
|
return int(ret), 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreign import libc "system:c"
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
@(default_calling_convention="c")
|
||||||
|
foreign libc {
|
||||||
|
exit :: proc(status: i32) -> ! ---
|
||||||
|
}
|
||||||
|
exit(i32(code))
|
||||||
|
}
|
||||||
@@ -26,3 +26,13 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
return 0, _OS_Errno(__error()^)
|
return 0, _OS_Errno(__error()^)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreign import libc "system:System"
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
@(default_calling_convention="c")
|
||||||
|
foreign libc {
|
||||||
|
exit :: proc(status: i32) -> ! ---
|
||||||
|
}
|
||||||
|
exit(i32(code))
|
||||||
|
}
|
||||||
@@ -6,3 +6,7 @@ package runtime
|
|||||||
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
||||||
return 0, -1
|
return 0, -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
trap()
|
||||||
|
}
|
||||||
@@ -19,3 +19,9 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
}
|
}
|
||||||
return int(ret), 0
|
return int(ret), 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,3 +11,8 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
write(1, data)
|
write(1, data)
|
||||||
return len(data), 0
|
return len(data), 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
trap()
|
||||||
|
}
|
||||||
@@ -24,3 +24,17 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
}
|
}
|
||||||
return ret, 0
|
return ret, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
SYS_exit_group ::
|
||||||
|
231 when ODIN_ARCH == .amd64 else
|
||||||
|
248 when ODIN_ARCH == .arm32 else
|
||||||
|
94 when ODIN_ARCH == .arm64 else
|
||||||
|
252 when ODIN_ARCH == .i386 else
|
||||||
|
94 when ODIN_ARCH == .riscv64 else
|
||||||
|
0
|
||||||
|
|
||||||
|
intrinsics.syscall(uintptr(SYS_exit_group), i32(code))
|
||||||
|
unreachable()
|
||||||
|
}
|
||||||
|
|||||||
@@ -41,3 +41,8 @@ _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
|||||||
|
|
||||||
return len(data), 0
|
return len(data), 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
trap()
|
||||||
|
}
|
||||||
@@ -23,6 +23,9 @@ foreign wasi {
|
|||||||
argv: [^]cstring,
|
argv: [^]cstring,
|
||||||
argv_buf: [^]byte,
|
argv_buf: [^]byte,
|
||||||
) -> u16 ---
|
) -> u16 ---
|
||||||
|
|
||||||
|
@(private="file")
|
||||||
|
proc_exit :: proc(rval: u32) -> ! ---
|
||||||
}
|
}
|
||||||
|
|
||||||
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
_stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) {
|
||||||
@@ -53,3 +56,8 @@ _wasi_setup_args :: proc() {
|
|||||||
delete(args_buf)
|
delete(args_buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
proc_exit(u32(code))
|
||||||
|
}
|
||||||
@@ -14,6 +14,8 @@ foreign kernel32 {
|
|||||||
SetHandleInformation :: proc(hObject: rawptr, dwMask: u32, dwFlags: u32) -> b32 ---
|
SetHandleInformation :: proc(hObject: rawptr, dwMask: u32, dwFlags: u32) -> b32 ---
|
||||||
WriteFile :: proc(hFile: rawptr, lpBuffer: rawptr, nNumberOfBytesToWrite: u32, lpNumberOfBytesWritten: ^u32, lpOverlapped: rawptr) -> b32 ---
|
WriteFile :: proc(hFile: rawptr, lpBuffer: rawptr, nNumberOfBytesToWrite: u32, lpNumberOfBytesWritten: ^u32, lpOverlapped: rawptr) -> b32 ---
|
||||||
GetLastError :: proc() -> u32 ---
|
GetLastError :: proc() -> u32 ---
|
||||||
|
|
||||||
|
ExitProcess :: proc(code: u32) -> ! ---
|
||||||
}
|
}
|
||||||
|
|
||||||
_stderr_write :: proc "contextless" (data: []byte) -> (n: int, err: _OS_Errno) #no_bounds_check {
|
_stderr_write :: proc "contextless" (data: []byte) -> (n: int, err: _OS_Errno) #no_bounds_check {
|
||||||
@@ -49,3 +51,7 @@ _stderr_write :: proc "contextless" (data: []byte) -> (n: int, err: _OS_Errno) #
|
|||||||
n = int(total_write)
|
n = int(total_write)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_exit :: proc "contextless" (code: int) -> ! {
|
||||||
|
ExitProcess(u32(code))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user