summaryrefslogtreecommitdiff
path: root/usrbin
diff options
context:
space:
mode:
authorJake Mannens <jake72360@gmail.com>2018-06-24 02:27:22 +1000
committerJake Mannens <jake72360@gmail.com>2018-06-24 02:27:22 +1000
commit97d3551106495fa18969e2690720b621ba5a9c0b (patch)
tree76967873f1f4209b940eadc77753bd67ef65e0b1 /usrbin
parentacba87c1e946118f0ba4308a7211199cf9b7cbb2 (diff)
Re-structured the source tree and modified makefiles accordingly.
Hopefully further separation will help to keep the code readable and understandable.
Diffstat (limited to 'usrbin')
-rw-r--r--usrbin/Makefile32
-rw-r--r--usrbin/lib.s10
-rw-r--r--usrbin/link.ld8
-rw-r--r--usrbin/main.c7
-rw-r--r--usrbin/print.c3
5 files changed, 60 insertions, 0 deletions
diff --git a/usrbin/Makefile b/usrbin/Makefile
new file mode 100644
index 0000000..16a607f
--- /dev/null
+++ b/usrbin/Makefile
@@ -0,0 +1,32 @@
+TARGET = usrbin_blob.o
+
+SRCS = $(wildcard *.c)
+ASMS = $(wildcard *.s)
+OBJS = $(SRCS:.c=.o) $(ASMS:.s=.o)
+
+CFLAGS = -m32 -I../include -ffreestanding -nostdinc -nostdlib -fno-stack-protector -fno-pie
+LDFLAGS = -m elf_i386 -T link.ld
+ASMFLAGS = -f elf32
+
+CC = gcc $(CFLAGS)
+LD = ld $(LDFLAGS)
+ASM = nasm $(ASMFLAGS)
+
+all: build
+
+build: $(TARGET)
+
+.s.o:
+ $(ASM) -o $*.o $^
+
+.c.o:
+ $(CC) -c -o $*.o $^
+
+$(TARGET): $(OBJS)
+ $(LD) -o usrbin.bin $(OBJS)
+ objcopy -I binary -O elf32-i386 -B i386 usrbin.bin $(TARGET)
+
+clean:
+ rm -f usrbin.bin
+ rm -f $(OBJS)
+ rm -f $(TARGET)
diff --git a/usrbin/lib.s b/usrbin/lib.s
new file mode 100644
index 0000000..ffe4f5f
--- /dev/null
+++ b/usrbin/lib.s
@@ -0,0 +1,10 @@
+bits 32
+
+extern main
+
+section .entry
+init:
+ call main
+.loop:
+ ; loop forever
+ jmp .loop
diff --git a/usrbin/link.ld b/usrbin/link.ld
new file mode 100644
index 0000000..c1a7a42
--- /dev/null
+++ b/usrbin/link.ld
@@ -0,0 +1,8 @@
+OUTPUT_FORMAT(binary)
+SECTIONS
+{
+ . = 0x100000;
+ .text : { *(.entry); .*(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+}
diff --git a/usrbin/main.c b/usrbin/main.c
new file mode 100644
index 0000000..5cc7567
--- /dev/null
+++ b/usrbin/main.c
@@ -0,0 +1,7 @@
+#include <stdint.h>
+
+extern int print(char*);
+
+void main(void) {
+ print("We did it ma!\n");
+}
diff --git a/usrbin/print.c b/usrbin/print.c
new file mode 100644
index 0000000..ea32cdf
--- /dev/null
+++ b/usrbin/print.c
@@ -0,0 +1,3 @@
+#include <unistd.h>
+
+_syscall1(int, print, char*, s);