From 8939c3421c2c01f02e88275e76a3cbbaa5b175a5 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Thu, 4 Mar 2021 23:12:40 +0100 Subject: [PATCH] misc: Compile stage 2 with -Os and stage 3 with -O3 --- stage23/Makefile | 10 ++++++++-- stage23/fs/fat32.s2.c | 3 +++ stage23/protos/chainload.c | 5 ++++- stage23/protos/linux.c | 5 ++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/stage23/Makefile b/stage23/Makefile index 5f928a0a..f0dd8422 100644 --- a/stage23/Makefile +++ b/stage23/Makefile @@ -20,7 +20,8 @@ E9_OUTPUT = false BUILD_ID := $(shell dd if=/dev/urandom count=8 bs=1 | od -An -t x8 | sed 's/^ /0x/') LIMINE_VERSION := $(shell git describe --exact-match --tags `git log -n1 --pretty='%h'` || git log -n1 --pretty='%h') WERROR = -Werror -CFLAGS = -Os -g -pipe -Wall -Wextra $(WERROR) +CFLAGS = -O3 -g -pipe -Wall -Wextra $(WERROR) +S2CFLAGS = -Os -g -pipe -Wall -Wextra $(WERROR) INTERNAL_CFLAGS := \ -std=gnu11 \ @@ -54,7 +55,7 @@ ifeq ($(TARGET), uefi) -mno-red-zone endif -LDFLAGS = -Os -g +LDFLAGS = -O3 -g INTERNAL_LDFLAGS := \ -fno-lto \ @@ -133,6 +134,11 @@ limine_efi.elf: $(OBJ) font.o sys/smp_trampoline.o %.o: %.c $(CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@ +ifeq ($(TARGET), bios) +%.s2.o: %.s2.c + $(CC) $(S2CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@ +endif + %.o: %.asm nasm $< -F dwarf -g -f elf32 -o $@ diff --git a/stage23/fs/fat32.s2.c b/stage23/fs/fat32.s2.c index 06ffe1d2..d17c8bf4 100644 --- a/stage23/fs/fat32.s2.c +++ b/stage23/fs/fat32.s2.c @@ -191,6 +191,9 @@ static int fat32_open_in(struct fat32_context* context, struct fat32_directory_e size_t dir_chain_len; uint32_t *directory_cluster_chain = cache_cluster_chain(context, current_cluster_number, &dir_chain_len); + if (directory_cluster_chain == NULL) + return -1; + struct fat32_directory_entry *directory_entries = ext_mem_alloc(dir_chain_len * block_size); if (!read_cluster_chain(context, directory_cluster_chain, directory_entries, 0, dir_chain_len * block_size)) return -1; diff --git a/stage23/protos/chainload.c b/stage23/protos/chainload.c index f407e35d..5663f9e1 100644 --- a/stage23/protos/chainload.c +++ b/stage23/protos/chainload.c @@ -26,7 +26,10 @@ static void spinup(uint8_t drive) { "mov eax, cr0\n\t" "and al, 0xfe\n\t" "mov cr0, eax\n\t" - "jmp 0x0000:1f\n\t" + "mov eax, OFFSET 1f\n\t" + "push eax\n\t" + "push 0\n\t" + "retf\n\t" "1:\n\t" "mov ax, 0\n\t" "mov ds, ax\n\t" diff --git a/stage23/protos/linux.c b/stage23/protos/linux.c index 5803942e..a54a7672 100644 --- a/stage23/protos/linux.c +++ b/stage23/protos/linux.c @@ -34,7 +34,10 @@ static void spinup(uint16_t real_mode_code_seg, uint16_t kernel_entry_seg, "mov eax, cr0\n\t" "and al, 0xfe\n\t" "mov cr0, eax\n\t" - "jmp 0x0000:1f\n\t" + "mov eax, OFFSET 1f\n\t" + "push eax\n\t" + "push 0\n\t" + "retf\n\t" "1:\n\t" "mov ds, bx\n\t" "mov es, bx\n\t"