From 8460cee5ca6c5b9f0e5dfe7b8465ba2bd0b62249 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Sun, 15 Nov 2020 17:56:10 +0100 Subject: [PATCH] misc: Implement stacktrace --- .gitignore | 2 ++ Makefile | 8 ++--- decompressor/main.c | 15 +++++++-- limine-pxe.bin | Bin 26363 -> 27629 bytes limine.bin | Bin 32768 -> 32768 bytes stage2/Makefile | 23 +++++++++----- stage2/gensyms.sh | 17 ++++++++++ stage2/lib/blib.c | 4 +++ stage2/lib/trace.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ stage2/lib/trace.h | 10 ++++++ stage2/main.c | 3 ++ test/limine.cfg | 10 ++++-- 12 files changed, 149 insertions(+), 18 deletions(-) create mode 100755 stage2/gensyms.sh create mode 100644 stage2/lib/trace.c create mode 100644 stage2/lib/trace.h diff --git a/.gitignore b/.gitignore index ec9d1bd5..b27effaf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/**/*.gen +/**/*.map /**/*.o /**/*.d /**/*.a diff --git a/Makefile b/Makefile index cc5beb67..5f8afdd3 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ all: stage2 decompressor gzip -n -9 < stage2/stage2.bin > stage2/stage2.bin.gz cd bootsect && nasm bootsect.asm -fbin -o ../limine.bin cd pxeboot && nasm bootsect.asm -fbin -o ../limine-pxe.bin + cp stage2/stage2.map ./ clean: stage2-clean decompressor-clean test-clean rm -f stage2/stage2.bin.gz @@ -55,6 +56,7 @@ echfs-test: limine-install test.img ext2-test: limine-install test.img $(MAKE) -C test + cp stage2.map test/ rm -rf test_image/ mkdir test_image sudo losetup -Pf --show test.img > loopback_dev @@ -62,8 +64,7 @@ ext2-test: limine-install test.img sudo mkfs.ext2 `cat loopback_dev`p1 sudo mount `cat loopback_dev`p1 test_image sudo mkdir test_image/boot - sudo cp test/test.elf test_image/boot/ - sudo cp test/limine.cfg test_image/ + sudo cp -rv test/* test_image/boot/ sync sudo umount test_image/ sudo losetup -d `cat loopback_dev` @@ -80,8 +81,7 @@ fat32-test: limine-install test.img sudo mkfs.fat -F 32 `cat loopback_dev`p1 sudo mount `cat loopback_dev`p1 test_image sudo mkdir test_image/boot - sudo cp test/test.elf test_image/boot/ - sudo cp test/limine.cfg test_image/ + sudo cp -rv test/* test_image/boot/ sync sudo umount test_image/ sudo losetup -d `cat loopback_dev` diff --git a/decompressor/main.c b/decompressor/main.c index 07db966f..6ef54587 100644 --- a/decompressor/main.c +++ b/decompressor/main.c @@ -9,8 +9,17 @@ void entry(uint8_t *compressed_stage2, size_t stage2_size, uint8_t boot_drive, i tinf_gzip_uncompress(dest, compressed_stage2, stage2_size); - __attribute__((noreturn)) - void (*stage2)(uint8_t boot_drive, int pxe) = (void *)dest; + asm volatile ( + "mov esp, 0x7c00\n\t" + "xor ebp, ebp\n\t" + "push %1\n\t" + "push %0\n\t" + "push 0\n\t" + "jmp 0x8000\n\t" + : + : "r" ((uint32_t)boot_drive), "r" (pxe) + : "memory" + ); - stage2(boot_drive, pxe); + for (;;); } diff --git a/limine-pxe.bin b/limine-pxe.bin index 0e50a21fc5e38cfe1bbbc8e9844d178037d7c1ea..b7522ef6f65f0162567fa4b56bcc7dca39cd999c 100644 GIT binary patch delta 25772 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 P!z7 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 delta 24496 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 TJzm<~(BA(CCGkZ#AgurZfNs(C diff --git a/limine.bin b/limine.bin index 82ca568714217242986cc9db7423f3af58195a76..0d10becdfdf9b330ae86032ed1e105ea6531bb09 100644 GIT binary patch delta 25757 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 E1jho=ivR!s diff --git a/stage2/Makefile b/stage2/Makefile index 8ac4c472..9e4ccdcf 100644 --- a/stage2/Makefile +++ b/stage2/Makefile @@ -1,9 +1,10 @@ CC = i386-elf-gcc LD = i386-elf-gcc OBJCOPY = i386-elf-objcopy +OBJDUMP = i386-elf-objdump WERROR = -Werror -CFLAGS = -flto -Os -pipe -Wall -Wextra $(WERROR) +CFLAGS = -Os -pipe -Wall -Wextra $(WERROR) INTERNAL_CFLAGS = \ -std=gnu11 \ @@ -11,7 +12,7 @@ INTERNAL_CFLAGS = \ -ffreestanding \ -fno-stack-protector \ -fno-pic \ - -fomit-frame-pointer \ + -fno-omit-frame-pointer \ -Wno-address-of-packed-member \ -masm=intel \ -mno-80387 \ @@ -23,7 +24,7 @@ INTERNAL_CFLAGS = \ -I. \ -I.. -LDFLAGS = -flto -Os +LDFLAGS = -Os INTERNAL_LDFLAGS = \ -lgcc \ @@ -41,11 +42,17 @@ ASM_FILES := $(shell find ./ -type f -name '*.asm' | sort) OBJ := $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o) HEADER_DEPS := $(C_FILES:.c=.d) -all: stage2.bin +all: stage2.map stage2.bin -stage2.bin: $(OBJ) - $(LD) $(OBJ) $(LDFLAGS) $(INTERNAL_LDFLAGS) -o stage2.elf - $(OBJCOPY) -O binary stage2.elf stage2.bin +stage2.map: stage2.elf + ./gensyms.sh $(OBJDUMP) + nasm symlist.gen -f bin -o $@ + +stage2.bin: stage2.elf + $(OBJCOPY) -O binary $< $@ + +stage2.elf: $(OBJ) + $(LD) $(OBJ) $(LDFLAGS) $(INTERNAL_LDFLAGS) -o $@ -include $(HEADER_DEPS) @@ -56,4 +63,4 @@ stage2.bin: $(OBJ) nasm $< -f elf32 -o $@ clean: - rm -f stage2.bin stage2.elf $(OBJ) $(HEADER_DEPS) + rm -f symlist.gen stage2.map stage2.bin stage2.elf $(OBJ) $(HEADER_DEPS) diff --git a/stage2/gensyms.sh b/stage2/gensyms.sh new file mode 100755 index 00000000..16145d55 --- /dev/null +++ b/stage2/gensyms.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +set -e + +TMP1=$(mktemp) +TMP2=$(mktemp) +TMP3=$(mktemp) + +$1 -t stage2.elf | sed '/\bd\b/d' | sort > "$TMP1" +grep "\.text" < "$TMP1" | cut -d' ' -f1 > "$TMP2" +grep "\.text" < "$TMP1" | awk 'NF{ print $NF }' > "$TMP3" + +paste -d'$' "$TMP2" "$TMP3" | sed 's/^/dd 0x/g' | sed 's/$/", 0/g' | sed 's/\$/\ndb "/g' > symlist.gen + +echo "dd 0xffffffff" >> symlist.gen + +rm "$TMP1" "$TMP2" "$TMP3" diff --git a/stage2/lib/blib.c b/stage2/lib/blib.c index 3112bf4f..ce4596e2 100644 --- a/stage2/lib/blib.c +++ b/stage2/lib/blib.c @@ -4,6 +4,7 @@ #include #include #include +#include uint8_t boot_drive; @@ -73,6 +74,9 @@ __attribute__((noreturn)) void panic(const char *fmt, ...) { va_end(args); + print("\n"); + print_stacktrace(NULL); + for (;;) { asm volatile ("hlt" ::: "memory"); } diff --git a/stage2/lib/trace.c b/stage2/lib/trace.c new file mode 100644 index 00000000..1e392678 --- /dev/null +++ b/stage2/lib/trace.c @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static char *stage2_map = NULL; + +void trace_init(void) { + char map_filename[80]; + if (!config_get_value(map_filename, 0, 80, "STAGE2_MAP")) + return; + + struct file_handle stage2_map_file; + if (!uri_open(&stage2_map_file, map_filename)) + panic("Could not open stage2 map file `%s`", map_filename); + + stage2_map = ext_mem_alloc(stage2_map_file.size); + fread(&stage2_map_file, stage2_map, 0, stage2_map_file.size); + + print("trace: Stage 2 map file `%s` loaded.\n", map_filename); +} + +char *trace_address(size_t *off, size_t addr) { + if (!stage2_map) + return NULL; + + uint32_t prev_addr = 0; + char *prev_sym = NULL; + + for (size_t i = 0;;) { + if (*((uint32_t *)&stage2_map[i]) >= addr) { + *off = addr - prev_addr; + return prev_sym; + } + prev_addr = *((uint32_t *)&stage2_map[i]); + i += sizeof(uint32_t); + prev_sym = &stage2_map[i]; + while (stage2_map[i++] != 0); + } +} + +void print_stacktrace(size_t *base_ptr) { + if (!stage2_map) + print("trace: Symbol names won't be resolved due to missing map file.\n"); + + if (base_ptr == NULL) { + asm volatile ( + "mov %0, ebp" + : "=g"(base_ptr) + :: "memory" + ); + } + print("Stacktrace:\n"); + for (;;) { + size_t old_bp = base_ptr[0]; + size_t ret_addr = base_ptr[1]; + if (!ret_addr) + break; + size_t off; + char *name = trace_address(&off, ret_addr); + if (name) + print(" [%x] <%s+%x>\n", ret_addr, name, off); + else + print(" [%x]\n", ret_addr); + if (!old_bp) + break; + base_ptr = (void*)old_bp; + } + print("End of trace.\n"); +} diff --git a/stage2/lib/trace.h b/stage2/lib/trace.h new file mode 100644 index 00000000..30c3cf47 --- /dev/null +++ b/stage2/lib/trace.h @@ -0,0 +1,10 @@ +#ifndef __LIB__TRACE_H__ +#define __LIB__TRACE_H__ + +#include + +void trace_init(void); +char *trace_address(size_t *off, size_t addr); +void print_stacktrace(size_t *base_ptr); + +#endif diff --git a/stage2/main.c b/stage2/main.c index dfdd9d4e..a2f2bb1f 100644 --- a/stage2/main.c +++ b/stage2/main.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,8 @@ void entry(uint8_t _boot_drive, int pxe_boot) { } } + trace_init(); + char *cmdline = menu(); char proto[32]; diff --git a/test/limine.cfg b/test/limine.cfg index 3d38a940..da6cfcd1 100644 --- a/test/limine.cfg +++ b/test/limine.cfg @@ -3,21 +3,25 @@ TIMEOUT=3 GRAPHICS=yes MENU_RESOLUTION=1024x768 E9_OUTPUT=yes +STAGE2_MAP=bios://:1/boot/stage2.map THEME_COLOURS=60000000;aa0000;00aaff;aa5500;0000aa;aa00aa;9076de;aaaaaa THEME_MARGIN=64 -BACKGROUND_PATH=guid://@GUID@/bg.bmp +BACKGROUND_PATH=bios://:1/boot/bg.bmp :Stivale Test PROTOCOL=stivale -KERNEL_PATH=guid://@GUID@/boot/test.elf +KERNEL_PATH=bios://:1/boot/test.elf KERNEL_CMDLINE=Hi! This is an example! MODULE_PATH=bios://:1/boot/test.elf MODULE_STRING=yooooo +MODULE_PATH=bios://:1/boot/bg.bmp +MODULE_STRING=yooooo + :Stivale2 Test PROTOCOL=stivale2 @@ -25,5 +29,5 @@ RESOLUTION=640x480x16 KERNEL_PATH=bios://:1/boot/test.elf KERNEL_CMDLINE=Woah! Another example! -MODULE_PATH=guid://@GUID@/boot/test.elf +MODULE_PATH=bios://:1/boot/bg.bmp MODULE_STRING=yooooo