From 355bb650b0b9548b604040ca6725937538ff5ff7 Mon Sep 17 00:00:00 2001 From: Druid520 Date: Mon, 17 Aug 2026 16:32:37 -0700 Subject: MOD: add better linux support and fix argv/argc. --- mk.conf | 10 ++++++---- mk/linux/b.sh | 4 ++-- mk/netbsd/b.sh | 4 ++-- src/linux-start.o | Bin 0 -> 776 bytes src/linux-start.s | 16 ++++++++++++++++ src/netbsd-start.s | 16 ++++++++++++++++ src/start.s | 17 ----------------- 7 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 src/linux-start.o create mode 100644 src/linux-start.s create mode 100644 src/netbsd-start.s delete mode 100644 src/start.s diff --git a/mk.conf b/mk.conf index c520246..30feef6 100644 --- a/mk.conf +++ b/mk.conf @@ -6,16 +6,18 @@ bin_ln="bin" netbsd_note_src="$src/netbsd-note.s" netbsd_note_bin="$out/netbsd-note.o" -start_src="$src/start.s" -start_bin="$out/start.o" +netbsd_start_src="$src/netbsd-start.s" +netbsd_start_bin="$out/netbsd-start.o" +linux_start_src="$src/linux-start.s" +linux_start_bin="$src/linux-start.o" main_src="$src/main.c" main_bin="$out/main.o" ln="ln" as="as" ld="ld" -ld_netbsd_cfg="netbsd-cfg.ld" -ld_linux_cfg="linux-cfg.ld" +netbsd_ld_cfg="netbsd-cfg.ld" +linux_ld_cfg="linux-cfg.ld" cc="gcc" lnflgs="-sf" diff --git a/mk/linux/b.sh b/mk/linux/b.sh index c9b9b04..db5c30f 100644 --- a/mk/linux/b.sh +++ b/mk/linux/b.sh @@ -2,7 +2,7 @@ set -e mkdir $out -$as $asflgs -o $start_bin $start_src +$as $asflgs -o $linux_start_bin $linux_start_src $cc $ccflgs -o $main_bin -c $main_src -$ld $ldflgs -T $ld_linux_cfg -o $bin $start_bin $main_bin +$ld $ldflgs -T $linux_ld_cfg -o $bin $linux_start_bin $main_bin $ln $lnflgs $bin $bin_ln diff --git a/mk/netbsd/b.sh b/mk/netbsd/b.sh index 6a4251c..f27512a 100644 --- a/mk/netbsd/b.sh +++ b/mk/netbsd/b.sh @@ -3,7 +3,7 @@ set -e mkdir $out $as $asflgs -o $netbsd_note_bin $netbsd_note_src -$as $asflgs -o $start_bin $start_src +$as $asflgs -o $netbsd_start_bin $netbsd_start_src $cc $ccflgs -o $main_bin -c $main_src -$ld $ldflgs -T $ld_netbsd_cfg -o $bin $netbsd_note_bin $start_bin $main_bin +$ld $ldflgs -T $netbsd_ld_cfg -o $bin $netbsd_note_bin $netbsd_start_bin $main_bin $ln $lnflgs $bin $bin_ln diff --git a/src/linux-start.o b/src/linux-start.o new file mode 100644 index 0000000..72750c8 Binary files /dev/null and b/src/linux-start.o differ diff --git a/src/linux-start.s b/src/linux-start.s new file mode 100644 index 0000000..6392e45 --- /dev/null +++ b/src/linux-start.s @@ -0,0 +1,16 @@ +.section .text +.globl _start +.type _start, @function +_start: + xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom. + + movq (%rsp), %rdi # argc = first 4 bytes of stack. + leaq 8(%rsp), %rsi # argv = address of first arg ptr. + + call main + + movl %eax, %edi # status = ret val. + movl $60, %eax # SYS_exit = 60. + syscall + + hlt # if syscall fails hang. diff --git a/src/netbsd-start.s b/src/netbsd-start.s new file mode 100644 index 0000000..e4e960e --- /dev/null +++ b/src/netbsd-start.s @@ -0,0 +1,16 @@ +.section .text +.globl _start +.type _start, @function +_start: + xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom. + + movq (%rsp), %rdi # argc = first 4 bytes of stack. + leaq 8(%rsp), %rsi # argv = address of first arg ptr. + + call main + + movl %eax, %edi # status = ret val. + movl $1, %eax # SYS_exit = 1. + syscall + + hlt # if syscall fails hang. diff --git a/src/start.s b/src/start.s deleted file mode 100644 index 683bfe7..0000000 --- a/src/start.s +++ /dev/null @@ -1,17 +0,0 @@ -.section .text -.globl _start -.type _start, @function -_start: - xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom. - - movl (%rsp), %edi # argc = first 4 bytes of stack. - leaq 8(%rsp), %rsi # argv = address of first arg ptr. - - call main - - movl %eax, %edi # status = ret val. - movl $1, %eax # SYS_exit = 1. - syscall - - .size _start, .-_start - hlt # if syscall fails hang. -- cgit 1.4.1