diff options
| author | Jake Mannens <jake72360@gmail.com> | 2018-06-24 02:27:22 +1000 |
|---|---|---|
| committer | Jake Mannens <jake72360@gmail.com> | 2018-06-24 02:27:22 +1000 |
| commit | 97d3551106495fa18969e2690720b621ba5a9c0b (patch) | |
| tree | 76967873f1f4209b940eadc77753bd67ef65e0b1 /usrbin | |
| parent | acba87c1e946118f0ba4308a7211199cf9b7cbb2 (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/Makefile | 32 | ||||
| -rw-r--r-- | usrbin/lib.s | 10 | ||||
| -rw-r--r-- | usrbin/link.ld | 8 | ||||
| -rw-r--r-- | usrbin/main.c | 7 | ||||
| -rw-r--r-- | usrbin/print.c | 3 |
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); |
