summary refs log tree commit diff
diff options
context:
space:
mode:
authorDruid520 <r.ustydruid520@proton.me>2026-08-17 16:32:37 -0700
committerDruid520 <r.ustydruid520@proton.me>2026-08-17 16:32:37 -0700
commit355bb650b0b9548b604040ca6725937538ff5ff7 (patch)
tree14220c455572fcc9ffea2106a2192037114ec482
parentfd9e51b838f454894940940110f2f18bedf5e621 (diff)
MOD: add better linux support and fix argv/argc.
-rw-r--r--mk.conf10
-rw-r--r--mk/linux/b.sh4
-rw-r--r--mk/netbsd/b.sh4
-rw-r--r--src/linux-start.obin0 -> 776 bytes
-rw-r--r--src/linux-start.s16
-rw-r--r--src/netbsd-start.s (renamed from src/start.s)3
6 files changed, 27 insertions, 10 deletions
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"
6 6
7netbsd_note_src="$src/netbsd-note.s" 7netbsd_note_src="$src/netbsd-note.s"
8netbsd_note_bin="$out/netbsd-note.o" 8netbsd_note_bin="$out/netbsd-note.o"
9start_src="$src/start.s" 9netbsd_start_src="$src/netbsd-start.s"
10start_bin="$out/start.o" 10netbsd_start_bin="$out/netbsd-start.o"
11linux_start_src="$src/linux-start.s"
12linux_start_bin="$src/linux-start.o"
11main_src="$src/main.c" 13main_src="$src/main.c"
12main_bin="$out/main.o" 14main_bin="$out/main.o"
13 15
14ln="ln" 16ln="ln"
15as="as" 17as="as"
16ld="ld" 18ld="ld"
17ld_netbsd_cfg="netbsd-cfg.ld" 19netbsd_ld_cfg="netbsd-cfg.ld"
18ld_linux_cfg="linux-cfg.ld" 20linux_ld_cfg="linux-cfg.ld"
19cc="gcc" 21cc="gcc"
20 22
21lnflgs="-sf" 23lnflgs="-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 @@
2set -e 2set -e
3 3
4mkdir $out 4mkdir $out
5$as $asflgs -o $start_bin $start_src 5$as $asflgs -o $linux_start_bin $linux_start_src
6$cc $ccflgs -o $main_bin -c $main_src 6$cc $ccflgs -o $main_bin -c $main_src
7$ld $ldflgs -T $ld_linux_cfg -o $bin $start_bin $main_bin 7$ld $ldflgs -T $linux_ld_cfg -o $bin $linux_start_bin $main_bin
8$ln $lnflgs $bin $bin_ln 8$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
3 3
4mkdir $out 4mkdir $out
5$as $asflgs -o $netbsd_note_bin $netbsd_note_src 5$as $asflgs -o $netbsd_note_bin $netbsd_note_src
6$as $asflgs -o $start_bin $start_src 6$as $asflgs -o $netbsd_start_bin $netbsd_start_src
7$cc $ccflgs -o $main_bin -c $main_src 7$cc $ccflgs -o $main_bin -c $main_src
8$ld $ldflgs -T $ld_netbsd_cfg -o $bin $netbsd_note_bin $start_bin $main_bin 8$ld $ldflgs -T $netbsd_ld_cfg -o $bin $netbsd_note_bin $netbsd_start_bin $main_bin
9$ln $lnflgs $bin $bin_ln 9$ln $lnflgs $bin $bin_ln
diff --git a/src/linux-start.o b/src/linux-start.o new file mode 100644 index 0000000..72750c8 --- /dev/null +++ b/src/linux-start.o
Binary files 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 @@
1.section .text
2.globl _start
3.type _start, @function
4_start:
5 xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom.
6
7 movq (%rsp), %rdi # argc = first 4 bytes of stack.
8 leaq 8(%rsp), %rsi # argv = address of first arg ptr.
9
10 call main
11
12 movl %eax, %edi # status = ret val.
13 movl $60, %eax # SYS_exit = 60.
14 syscall
15
16 hlt # if syscall fails hang.
diff --git a/src/start.s b/src/netbsd-start.s index 683bfe7..e4e960e 100644 --- a/src/start.s +++ b/src/netbsd-start.s
@@ -4,7 +4,7 @@
4_start: 4_start:
5 xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom. 5 xorq %rbp, %rbp # frame ptr (%rbp) = null. marks stack bottom.
6 6
7 movl (%rsp), %edi # argc = first 4 bytes of stack. 7 movq (%rsp), %rdi # argc = first 4 bytes of stack.
8 leaq 8(%rsp), %rsi # argv = address of first arg ptr. 8 leaq 8(%rsp), %rsi # argv = address of first arg ptr.
9 9
10 call main 10 call main
@@ -13,5 +13,4 @@ _start:
13 movl $1, %eax # SYS_exit = 1. 13 movl $1, %eax # SYS_exit = 1.
14 syscall 14 syscall
15 15
16 .size _start, .-_start
17 hlt # if syscall fails hang. 16 hlt # if syscall fails hang.