From 6591a9c32f72c7ca89115f0cabfb42b54ed8eab4 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 18 Sep 2020 22:15:27 +0200 Subject: [PATCH] Fix some warnings in the decompressor and do not use special symbol main() for entry points --- decompressor/Makefile | 8 ++++++-- decompressor/entry.asm | 18 ++++++++++++++++++ decompressor/linker.ld | 2 +- decompressor/main.c | 20 ++------------------ limine.bin | Bin 32768 -> 32768 bytes stage2/entry.asm | 18 ++++++++++++++++++ stage2/linker.ld | 2 +- stage2/main.c | 17 +---------------- 8 files changed, 47 insertions(+), 38 deletions(-) create mode 100644 decompressor/entry.asm create mode 100644 stage2/entry.asm diff --git a/decompressor/Makefile b/decompressor/Makefile index 4fd006c5..1f78f0d3 100644 --- a/decompressor/Makefile +++ b/decompressor/Makefile @@ -5,7 +5,7 @@ OBJCOPY = i386-elf-objcopy CFLAGS = -flto -Os -pipe -Wall -Wextra INTERNAL_CFLAGS = \ - -std=gnu99 \ + -std=gnu11 \ -ffreestanding \ -fno-stack-protector \ -fno-pic \ @@ -32,7 +32,8 @@ INTERNAL_LDFLAGS = \ .PHONY: all clean C_FILES := $(shell find ./ -type f -name '*.c' | sort) -OBJ := $(C_FILES:.c=.o) +ASM_FILES := $(shell find ./ -type f -name '*.asm' | sort) +OBJ := $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o) all: decompressor.bin @@ -43,5 +44,8 @@ decompressor.bin: $(OBJ) %.o: %.c $(CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@ +%.o: %.asm + nasm $< -f elf32 -o $@ + clean: rm -f decompressor.bin decompressor.elf $(OBJ) diff --git a/decompressor/entry.asm b/decompressor/entry.asm new file mode 100644 index 00000000..c2b94a97 --- /dev/null +++ b/decompressor/entry.asm @@ -0,0 +1,18 @@ +extern bss_begin +extern bss_end +extern entry + +section .entry + +global _start +_start: + cld + + ; Zero out .bss + xor al, al + mov edi, bss_begin + mov ecx, bss_end + sub ecx, bss_begin + rep stosb + + jmp entry diff --git a/decompressor/linker.ld b/decompressor/linker.ld index 12b58ef4..a5bae43a 100644 --- a/decompressor/linker.ld +++ b/decompressor/linker.ld @@ -1,5 +1,5 @@ OUTPUT_FORMAT(elf32-i386) -ENTRY(main) +ENTRY(_start) SECTIONS { diff --git a/decompressor/main.c b/decompressor/main.c index b1c9ffa2..68cd0a67 100644 --- a/decompressor/main.c +++ b/decompressor/main.c @@ -1,27 +1,11 @@ -asm ( - ".section .entry\n\t" - - "cld\n\t" - - // Zero out .bss - "xor al, al\n\t" - "mov edi, OFFSET bss_begin\n\t" - "mov ecx, OFFSET bss_end\n\t" - "sub ecx, OFFSET bss_begin\n\t" - "rep stosb\n\t" - - "mov ebx, OFFSET main\n\t" - "jmp ebx\n\t" -); - #include #include #include __attribute__((noreturn)) -void main(uint8_t *compressed_stage2, size_t stage2_size, uint8_t boot_drive) { +void entry(uint8_t *compressed_stage2, size_t stage2_size, uint8_t boot_drive) { // The decompressor should decompress compressed_stage2 to address 0x4000. - volatile uint8_t *dest = (volatile uint8_t *)0x4000; + uint8_t *dest = (uint8_t *)0x4000; tinf_gzip_uncompress(dest, compressed_stage2, stage2_size); diff --git a/limine.bin b/limine.bin index 36f13670997e3ed55e7815a141b1e5b9c041723b..8ae96e1c963c78f23d5432037675c98bb31a1c49 100644 GIT binary patch delta 18922 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 JFDsKk0Y~|oD?|VQ delta 18985 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 UBc`Z7{|_2=#6>`bvyoIiE3j`D$N&HU diff --git a/stage2/entry.asm b/stage2/entry.asm new file mode 100644 index 00000000..c2b94a97 --- /dev/null +++ b/stage2/entry.asm @@ -0,0 +1,18 @@ +extern bss_begin +extern bss_end +extern entry + +section .entry + +global _start +_start: + cld + + ; Zero out .bss + xor al, al + mov edi, bss_begin + mov ecx, bss_end + sub ecx, bss_begin + rep stosb + + jmp entry diff --git a/stage2/linker.ld b/stage2/linker.ld index 7f7ddf0d..3f0d47c1 100644 --- a/stage2/linker.ld +++ b/stage2/linker.ld @@ -1,5 +1,5 @@ OUTPUT_FORMAT(elf32-i386) -ENTRY(main) +ENTRY(_start) SECTIONS { diff --git a/stage2/main.c b/stage2/main.c index 10fbad1f..47e54ee4 100644 --- a/stage2/main.c +++ b/stage2/main.c @@ -1,18 +1,3 @@ -asm ( - ".section .entry\n\t" - - "cld\n\t" - - // Zero out .bss - "xor al, al\n\t" - "mov edi, OFFSET bss_begin\n\t" - "mov ecx, OFFSET bss_end\n\t" - "sub ecx, OFFSET bss_begin\n\t" - "rep stosb\n\t" - - "jmp main\n\t" -); - #include #include #include @@ -31,7 +16,7 @@ asm ( #include #include -void main(int boot_drive) { +void entry(int boot_drive) { term_textmode(); print("Limine " LIMINE_VERSION "\n\n");