summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--linux-cfg.ld36
-rw-r--r--mk.conf11
-rw-r--r--mk/linux/b.sh (renamed from mk/b.sh)3
-rw-r--r--mk/netbsd/b.sh9
-rw-r--r--netbsd-cfg.ld (renamed from cfg.ld)26
-rw-r--r--src/netbsd-note.s (renamed from src/note.s)0
6 files changed, 58 insertions, 27 deletions
diff --git a/linux-cfg.ld b/linux-cfg.ld new file mode 100644 index 0000000..b2a5f17 --- /dev/null +++ b/linux-cfg.ld
@@ -0,0 +1,36 @@
1OUTPUT_FORMAT("elf64-x86-64")
2OUTPUT_ARCH("i386:x86-64")
3ENTRY(_start)
4MAXPAGESIZE = 0;
5
6SECTIONS
7{
8 . = 0x100000; /* start at 1mb. */
9
10 .text :
11 {
12 *(.text.startup)
13 *(.text)
14 *(.rodata)
15 *(.data)
16 }
17
18 .bss :
19 {
20 *(.bss)
21 }
22
23 /DISCARD/ :
24 {
25 *(.comment)
26 *(.eh_frame)
27 *(.eh_frame_hdr)
28 *(.debug_*)
29 *(.symtab)
30 *(.strtab)
31 *(.shstrtab)
32 }
33}
34
35PROVIDE(__stack = 0x400000);
36PROVIDE(_end = .);
diff --git a/mk.conf b/mk.conf index 8f3ff1f..c520246 100644 --- a/mk.conf +++ b/mk.conf
@@ -4,8 +4,8 @@ out="out"
4bin="$out/bin" 4bin="$out/bin"
5bin_ln="bin" 5bin_ln="bin"
6 6
7note_src="$src/note.s" 7netbsd_note_src="$src/netbsd-note.s"
8note_bin="$out/note.o" 8netbsd_note_bin="$out/netbsd-note.o"
9start_src="$src/start.s" 9start_src="$src/start.s"
10start_bin="$out/start.o" 10start_bin="$out/start.o"
11main_src="$src/main.c" 11main_src="$src/main.c"
@@ -14,10 +14,11 @@ main_bin="$out/main.o"
14ln="ln" 14ln="ln"
15as="as" 15as="as"
16ld="ld" 16ld="ld"
17ld_cfg="cfg.ld" 17ld_netbsd_cfg="netbsd-cfg.ld"
18ld_linux_cfg="linux-cfg.ld"
18cc="gcc" 19cc="gcc"
19 20
20lnflgs="-sf" 21lnflgs="-sf"
21asflgs="" 22asflgs=""
22ldflgs="-O0 -static -no-pie -T $ld_cfg" 23ldflgs="-Os -s -static -no-pie --omagic -N -z nosectionheader --no-warn-rwx-segments"
23ccflgs="-nostdlib -ffreestanding -fno-pie -fno-builtin -std=c99 -O0 -g0" 24ccflgs="-nostdlib -ffreestanding -fno-pie -fno-builtin -std=c99 -Os -pipe -s -g0 -I$src"
diff --git a/mk/b.sh b/mk/linux/b.sh index d8b27d5..c9b9b04 100644 --- a/mk/b.sh +++ b/mk/linux/b.sh
@@ -2,8 +2,7 @@
2set -e 2set -e
3 3
4mkdir $out 4mkdir $out
5$as $asflgs -o $note_bin $note_src
6$as $asflgs -o $start_bin $start_src 5$as $asflgs -o $start_bin $start_src
7$cc $ccflgs -o $main_bin -c $main_src 6$cc $ccflgs -o $main_bin -c $main_src
8$ld $ldflgs -o $bin $note_bin $start_bin $main_bin 7$ld $ldflgs -T $ld_linux_cfg -o $bin $start_bin $main_bin
9$ln $lnflgs $bin $bin_ln 8$ln $lnflgs $bin $bin_ln
diff --git a/mk/netbsd/b.sh b/mk/netbsd/b.sh new file mode 100644 index 0000000..6a4251c --- /dev/null +++ b/mk/netbsd/b.sh
@@ -0,0 +1,9 @@
1. ./mk.conf
2set -e
3
4mkdir $out
5$as $asflgs -o $netbsd_note_bin $netbsd_note_src
6$as $asflgs -o $start_bin $start_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
9$ln $lnflgs $bin $bin_ln
diff --git a/cfg.ld b/netbsd-cfg.ld index a4dc193..235af62 100644 --- a/cfg.ld +++ b/netbsd-cfg.ld
@@ -1,38 +1,26 @@
1OUTPUT_FORMAT("elf64-x86-64") 1OUTPUT_FORMAT("elf64-x86-64")
2OUTPUT_ARCH("i386:x86-64") 2OUTPUT_ARCH("i386:x86-64")
3ENTRY(_start) 3ENTRY(_start)
4MAXPAGESIZE = 0;
4 5
5SECTIONS 6SECTIONS
6{ 7{
7 . = 0x100000; /* start at 1mb. */ 8 . = 0x100000; /* start at 1mb. */
8 9
9 .text : ALIGN(4K) 10 .text :
10 { 11 {
11 *(.text.startup) 12 *(.text.startup)
12 *(.text) 13 *(.text)
13 *(.text.*)
14 }
15
16 .rodata : ALIGN(4K)
17 {
18 *(.rodata) 14 *(.rodata)
19 *(.rodata.*)
20 }
21
22 .data : ALIGN(4K)
23 {
24 *(.data) 15 *(.data)
25 *(.data.*)
26 } 16 }
27 17
28 .bss : ALIGN(4K) 18 .bss :
29 { 19 {
30 *(.bss) 20 *(.bss)
31 *(.bss.*)
32 *(COMMON)
33 } 21 }
34 22
35 .note.netbsd.ident : ALIGN(4) 23 .note.netbsd.ident :
36 { 24 {
37 *(.note.netbsd.ident) 25 *(.note.netbsd.ident)
38 } 26 }
@@ -43,11 +31,9 @@ SECTIONS
43 *(.eh_frame) 31 *(.eh_frame)
44 *(.eh_frame_hdr) 32 *(.eh_frame_hdr)
45 *(.debug_*) 33 *(.debug_*)
46 *(.stab)
47 *(.stabstr)
48 *(.shstrtab)
49 *(.strtab)
50 *(.symtab) 34 *(.symtab)
35 *(.strtab)
36 *(.shstrtab)
51 } 37 }
52} 38}
53 39
diff --git a/src/note.s b/src/netbsd-note.s index a8b606e..a8b606e 100644 --- a/src/note.s +++ b/src/netbsd-note.s