From 2e66d621b50965624f244a77661bcd0225cfdfd5 Mon Sep 17 00:00:00 2001 From: flysand7 Date: Sun, 22 Oct 2023 01:58:35 +1100 Subject: [PATCH] Implement -no-crt entry point on linux --- bug | Bin 0 -> 34744 bytes core/runtime/entry_unix.odin | 40 ++++++++++++++++----- core/runtime/entry_unix_no_crt_amd64.asm | 43 +++++++++++++++++++++++ core/runtime/entry_unix_no_crt_i386.asm | 18 ++++++++++ 4 files changed, 93 insertions(+), 8 deletions(-) create mode 100755 bug create mode 100644 core/runtime/entry_unix_no_crt_amd64.asm create mode 100644 core/runtime/entry_unix_no_crt_i386.asm diff --git a/bug b/bug new file mode 100755 index 0000000000000000000000000000000000000000..ec13d9e7efe0e3ae1e65dc139a2869af211bbe1a GIT binary patch literal 34744 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 XB|v!sn|@Q!S#qFpPpCQ=g{~g}v-_|m literal 0 HcmV?d00001 diff --git a/core/runtime/entry_unix.odin b/core/runtime/entry_unix.odin index 9f7d219c3..0c718445a 100644 --- a/core/runtime/entry_unix.odin +++ b/core/runtime/entry_unix.odin @@ -21,13 +21,37 @@ when ODIN_BUILD_MODE == .Dynamic { return 0 } } else when !ODIN_TEST && !ODIN_NO_ENTRY_POINT { - @(link_name="main", linkage="strong", require) - main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 { - args__ = argv[:argc] - context = default_context() - #force_no_inline _startup_runtime() - intrinsics.__entry_point() - #force_no_inline _cleanup_runtime() - return 0 + when ODIN_NO_CRT { + // NOTE(flysand): We need to start from assembly because we need + // to retrieve argc and argv from the stack + when ODIN_ARCH == .amd64 { + @require foreign import entry "entry_unix_no_crt_amd64.asm" + } else when ODIN_ARCH == .i386 { + @require foreign import entry "entry_unix_no_crt_i386.asm" + } + @(link_name="_start_odin", linkage="strong", require) + _start_odin :: proc "c" (argc: i32, argv: [^]cstring) -> ! { + args__ = argv[:argc] + context = default_context() + #force_no_inline _startup_runtime() + intrinsics.__entry_point() + #force_no_inline _cleanup_runtime() + when ODIN_ARCH == .amd64 { + intrinsics.syscall(/*SYS_exit = */60) + } else when ODIN_ARCH == .i386 { + intrinsics.syscall(/*SYS_exit = */1) + } + unreachable() + } + } else { + @(link_name="main", linkage="strong", require) + main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 { + args__ = argv[:argc] + context = default_context() + #force_no_inline _startup_runtime() + intrinsics.__entry_point() + #force_no_inline _cleanup_runtime() + return 0 + } } } diff --git a/core/runtime/entry_unix_no_crt_amd64.asm b/core/runtime/entry_unix_no_crt_amd64.asm new file mode 100644 index 000000000..f0bdce8d7 --- /dev/null +++ b/core/runtime/entry_unix_no_crt_amd64.asm @@ -0,0 +1,43 @@ +bits 64 + +extern _start_odin +global _start + +section .text + +;; Entry point for programs that specify -no-crt option +;; This entry point should be compatible with dynamic loaders on linux +;; The parameters the dynamic loader passes to the _start function: +;; RDX = pointer to atexit function +;; The stack layout is as follows: +;; +-------------------+ +;; NULL +;; +-------------------+ +;; envp[m] +;; +-------------------+ +;; ... +;; +-------------------+ +;; envp[0] +;; +-------------------+ +;; NULL +;; +-------------------+ +;; argv[n] +;; +-------------------+ +;; ... +;; +-------------------+ +;; argv[0] +;; +-------------------+ +;; argc +;; +-------------------+ <------ RSP +;; +_start: + ;; Mark stack frame as the top of the stack + xor rbp, rbp + ;; Load argc into 1st param reg, argv into 2nd param reg + pop rdi + mov rdx, rsi + ;; Align stack pointer down to 16-bytes (sysv calling convention) + and rsp, -16 + ;; Call into odin entry point + call _start_odin + jmp $$ \ No newline at end of file diff --git a/core/runtime/entry_unix_no_crt_i386.asm b/core/runtime/entry_unix_no_crt_i386.asm new file mode 100644 index 000000000..a61d56a16 --- /dev/null +++ b/core/runtime/entry_unix_no_crt_i386.asm @@ -0,0 +1,18 @@ +bits 32 + +extern _start_odin +global _start + +section .text + +;; NOTE(flysand): For description see the corresponding *_amd64.asm file +;; also I didn't test this on x86-32 +_start: + xor ebp, rbp + pop ecx + mov eax, esp + and esp, -16 + push eax + push ecx + call _start_odin + jmp $$ \ No newline at end of file